创建向导对话框 在使用具体某个软件的时候我们常常会在该程序中使用向导模式来建立新的文件最典型的例子就是在Frontpage中或者Word中使用向导方式来新建一个网页文件或者Word文档那么看到别的程序都能提供人性化的向导对话框后不知您有没有什么沖动?如果有的话不妨使用下面的代码来创建一个向导对话框 void CMy_sDlg::OnWiz() { CSheet sheet; sheetSetWizardMode(); int iRet=sheetDoModal();//返回ID_WIZFINISH或IDCANCEL } //重载BOOL CPropertyPage::OnSetActive( )来控制显示的按钮 BOOL CPage::OnSetActive() { ((CPropertySheet*)GetParent())>SetWizardButtons(PSWIZB_BACK|PSWIZB_NEXT); return CPropertyPage::OnSetActive(); } BOOL CPage::OnSetActive() { ((CPropertySheet*)GetParent())>SetWizardButtons(PSWIZB_BACK|PSWIZB_FINISH); return CPropertyPage::OnSetActive(); } 在计算机之间实现收发数据 大家知道计算机之间相互通信时一般都是通过TCP协议来与指定IP地址的主机来建立联系并进行相互通信的在这个过程中必需有一方扮演服务器的角色等待另一方(客户端)的连接请求所以服务器端需要建立一个监听套接口然后在此套接口上等待连接当连接建立后会产生一个新的套接口用于通信而客户端在创建套接口后只需要简单的调用连接函数就可以创建连接对于有连接的通信不论是数据的发送还是发送与接收的顺序都是有保证的下面的代码就是利用VC++提供的CSocket来实现数据收发功能的 /* 服务器方在端口上等待连接当连接建立后关闭监听套接口 客户方向服务器端口发起连接请求 */ BOOL CMy_s_serverDlg::OnInitDialog() { CDialog::OnInitDialog(); CSocket sockListen; //创建本地套接口 sockListenCreate(SOCK_STREAM); //绑定参数 sockListenBind(); sockListenListen(); //等待连接请求m_sockSend为成员变量用于通信 sockListenAccept(m_sockSend); //关闭监听套接口 sockListenClose(); //启动定时器定时发送数据 SetTimer(NULL); } void CMy_s_serverDlg::OnTimer(UINT nIDEvent) { static iIndex=; char szSend[]; sprintf(szSend%diIndex++); //发送TCP数据 int iSend= m_sockSendSend(szSend); } BOOL CMy_s_clientDlg::OnInitDialog() { CDialog::OnInitDialog(); //创建本地套接口 m_sockRecvCreate(); //发起连接请求 BOOL fC=m_sockRecvConnect(); TRACE(connect is %s (fC)?OK:Error); //启动定时器定时接收数据 SetTimer(NULL); } void CMy_s_clientDlg::OnTimer(UINT nIDEvent) { char szRecv[]; //接收TCP数据 int iRecv =m_sockRecvReceive(szRecv); TRACE(received %d byte iRecv); if(iRecv>=) { szRecv[iRecv]=; m_szRecv=szRecv; UpdateData(FALSE); } } 让工具栏并列显示 假设在Windows程序窗口中有几个工具栏现在我们希望让这些多个工具栏并列显示该怎么实现呢?在这里我们可以使用下面的函数来实现该功能此函数是从CJLib函数库弄下来的笔者在下面的程序中实现的功能是让LeftOf工具栏显示在Bar工具栏的左侧同时还要并列显示在一起 下面就是实现其功能的主要代码 void CCJMDIFrameWnd::DockControlBarLeftOf(CControlBar* Bar CControlBar* LeftOf) { CRect rect; DWORD dw; UINT n; // 使用MFC来调整所有工具栏的尺寸 // 确保GetWindowRec准确 RecalcLayout(TRUE); LeftOf>GetWindowRect(&rect); rectOffsetRect(); dw=LeftOf>GetBarStyle(); n = ; n = (dw&CBRS_ALIGN_TOP) ? AFX_IDW_DOCKBAR_TOP: n; n = (dw&CBRS_ALIGN_BOTTOM&& n==) ? AFX_IDW_DOCKBAR_BOTTOM:n; n = (dw&CBRS_ALIGN_LEFT && n==) ? AFX_IDW_DOCKBAR_LEFT:n; n = (dw&CBRS_ALIGN_RIGHT&& n==) ? AFX_IDW_DOCKBAR_RIGHT:n; DockControlBar(Barn&rect); } |