1、建立嚮導對話方塊
在使用具體某個軟體的時候,我們常常會在該程式中使用嚮導模式來建立新的檔案,最典型的例子就是在Frontpage2000中或者Word2000中使用嚮導方式來建立一個網頁檔案或者Word文檔。那麼看到別的程式都能提供人性化的嚮導對話方塊後,不知您有沒有什麼衝動?如果有的話,不妨使用下面的代碼來建立一個嚮導對話方塊:
以下是引用片段: void CMy56_s1Dlg::OnWiz() { CSheet sheet; sheet.SetWizardMode(); int iRet=sheet.DoModal();//返回ID_WIZFINISH或IDCANCEL } //重載BOOL CPropertyPage::OnSetActive( )來控制顯示的按鈕BOOL CPage1::OnSetActive() { ((CPropertySheet*)GetParent())->SetWizardButtons(PSWIZB_BACK|PSWIZB_NEXT); return CPropertyPage::OnSetActive(); } BOOL CPage2::OnSetActive() { ((CPropertySheet*)GetParent())->SetWizardButtons(PSWIZB_BACK|PSWIZB_FINISH); return CPropertyPage::OnSetActive(); } |
2、在電腦之間實現收發資料 大家知道,電腦之間相互連信時,一般都是通過TCP協議來與指定IP地址的主機來建立聯絡,並進行相互連信的,在這個過程中,必需有一方扮演伺服器的角色等待另一方(客戶端)的串連請求,所以伺服器端需要建立一個監聽套介面,然後在此套介面上等待串連。當串連建立後會產生一個新的套介面用於通訊。而用戶端在建立套介面後只需要簡單的調用串連函數就可以建立串連。對於有串連的通訊不論是資料的發送還是發送與接收的順序都是有保證的。下面的代碼就是利用VC++提供的CSocket來實現資料收發功能的:
以下是引用片段: /* 伺服器方在連接埠6802上等待串連,當串連建立後關閉監聽套介面 客戶方向伺服器連接埠6802發起串連請求 */BOOL CMy63_s1_serverDlg::OnInitDialog() { CDialog::OnInitDialog(); CSocket sockListen; //建立本地套介面 sockListen.Create(6802,SOCK_STREAM,"127.0.0.1"); //綁定參數 sockListen.Bind(6802,"127.0.0.1"); sockListen.Listen(5); //等待串連請求,m_sockSend為成員變數,用於通訊 sockListen.Accept(m_sockSend); //關閉監聽套介面 sockListen.Close(); //啟動定時器,定時發送資料 SetTimer(1,3000,NULL); } void CMy63_s1_serverDlg::OnTimer(UINT nIDEvent) { static iIndex=0; char szSend[20]; sprintf(szSend,"%010d",iIndex++); //發送TCP資料 int iSend= m_sockSend.Send(szSend,10,0); } BOOL CMy63_s1_clientDlg::OnInitDialog() { CDialog::OnInitDialog(); //建立本地套介面 m_sockRecv.Create(); //發起串連請求 BOOL fC=m_sockRecv.Connect("127.0.0.1",6802); TRACE("connect is %s ",(fC)?"OK":"Error"); //啟動定時器,定時接收資料 SetTimer(1,3000,NULL); } void CMy63_s1_clientDlg::OnTimer(UINT nIDEvent) { char szRecv[20]; //接收TCP資料 int iRecv =m_sockRecv.Receive(szRecv,10,0); TRACE("received %d byte ",iRecv); if(iRecv>=0) { szRecv[iRecv]=''; m_szRecv=szRecv; UpdateData(FALSE); } } |
3、讓工具列並列顯示
假設在Windows程式視窗中有幾個工具列,現在我們希望讓這些多個工具列並列顯示,該怎麼實現呢?在這裡,我們可以使用下面的函數來實現該功能,此函數是從CJ60Lib函數庫弄下來的。筆者在下面的程式中實現的功能是,讓LeftOf工具列顯示在Bar工具列的左側,同時還要並列顯示在一起,下面就是實現其功能的主要代碼:
以下是引用片段: void CCJMDIFrameWnd::DockControlBarLeftOf(CControlBar* Bar, CControlBar* LeftOf) { CRect rect; DWORD dw; UINT n; // 使用MFC來調整所有工具列的尺寸 // 確保GetWindowRec準確 RecalcLayout(TRUE); LeftOf->GetWindowRect(&rect); rect.OffsetRect(1,0); dw=LeftOf->GetBarStyle(); n = 0; n = (dw&CBRS_ALIGN_TOP) ? AFX_IDW_DOCKBAR_TOP: n; n = (dw&CBRS_ALIGN_BOTTOM&& n==0) ? AFX_IDW_DOCKBAR_BOTTOM:n; n = (dw&CBRS_ALIGN_LEFT && n==0) ? AFX_IDW_DOCKBAR_LEFT:n; n = (dw&CBRS_ALIGN_RIGHT&& n==0) ? AFX_IDW_DOCKBAR_RIGHT:n; DockControlBar(Bar,n,&rect); } |