1. 當(dāng)在vc++中預(yù)覽一個(gè)窗口,出現(xiàn)無(wú)法關(guān)閉窗口的情況時(shí):使用快捷鍵:Ctrl+PauseBreak 2. VC中出現(xiàn)類(lèi)丟失的情況,可以刪除aps、ncb、clw這三個(gè)文件,然后打開(kāi)工程,ctrl+w,按提示來(lái)。 3. CWnd::PreCreateWindow:在窗口沒(méi)有附著在CWnd之前被框架調(diào)用。通過(guò)修改CREATESTRUCT這個(gè)結(jié)構(gòu)體(CREATESTRUCT定義傳遞給窗口過(guò)程的初始化參數(shù)),來(lái)修改窗口類(lèi)和樣式。 4. 在窗口創(chuàng)建之后改變外觀需要在OnCreate中操作。用SetClassLong這個(gè)函數(shù)。 5. 雖然不能修改MFC底層代碼,但是我們可以創(chuàng)建自己的窗口類(lèi),使程序用我們的類(lèi)去創(chuàng)建窗口。WNDCLASS。設(shè)計(jì)完窗口類(lèi)之后應(yīng)該用RegisterClass注冊(cè)之 6. 使用AfxGetInstanceHandle()獲取當(dāng)前應(yīng)用程序的句柄。 7. 修改背景和光標(biāo)應(yīng)該在view類(lèi)中修改 8. SetWindowLong() 在窗口創(chuàng)建之后修改窗口的屬性,在OnCreate函數(shù)中調(diào)用。 9. null-terminated string 以空終止“\0”結(jié)尾的字符串 10. AfxRegisterWndClass() 如果想注冊(cè)自己的窗口類(lèi),調(diào)用這個(gè)函數(shù),返回一個(gè)null-terminated string which contains class name 11. SetClassLong這個(gè)函數(shù)的能替換窗口類(lèi)的信息,下面是替換圖標(biāo)的例子,在CMainFrame類(lèi)中的OnCreate中最后輸入 SetClassLong(m_hWnd,GCL_HICON,(LONG)LoadIcon(NULL,IDI_WARNING));則圖標(biāo)被替換成最后一個(gè)參數(shù)表示的圖標(biāo) 12. 在CMainFrame中修改光標(biāo)和背景是沒(méi)有意義的,因?yàn)镕rame會(huì)被View遮蓋,所以,要修改光標(biāo)和背景需要在View類(lèi)中修改。但是View類(lèi)沒(méi)有提供OnCreate這個(gè)消息響應(yīng)函數(shù),需要自己添加。 SetClassLong(m_hWnd,GCL_HCURSOR,(LONG)LoadCursor(NULL,IDC_CROSS));//修改光標(biāo) SetClassLong(m_hWnd,GCL_HBRBACKGROUND,(LONG)(HBRUSH)GetStockObject(BLACK_BRUSH));//修改背景 13. MAKEINTRESOURCE這個(gè)宏將一個(gè)整型值轉(zhuǎn)化為一個(gè)資源 MAKEINTRESOURCE(IDI_ICON1);//這是把資源ID為IDI_ICON1的圖標(biāo)轉(zhuǎn)化為資源的寫(xiě)法 14. 獲得應(yīng)用程序的實(shí)例有三種方法 a) AfxGetInstanceHandle() b) AfxGetApp()->m_hInstance c) 在MFC架構(gòu)中,有一個(gè)類(lèi)APP類(lèi)已經(jīng)實(shí)例化了一個(gè)變量:C***App theApp;所以我們?cè)谛枰牡胤缴幌戮托辛?。例如在CMainFrame要使用這個(gè)函數(shù),只需要 extern CModifyApp theApp就行了。然后調(diào)用theApp->m_hInstance; 15. 要獲得一個(gè)介于0-2之間的數(shù),可以這樣 OnTimer() { static int i=0 i=++i%3; } 16. 設(shè)置復(fù)選標(biāo)記,可以用UpDateCommandUI 消息相應(yīng),然后用pCmdUI->SetCheck() 17. CTime獲取系統(tǒng)時(shí)間CTime::GetCurrentTime 18. 設(shè)置狀態(tài)欄信息CStatusBar::SetPaneText 19. 進(jìn)度欄CProgressCtrl 20. 自定義消息使用 a) 消息在windows中用整數(shù)值表示,windows系統(tǒng)消息定義到了WM_USER,自己要定義消息的話(huà),需要在這個(gè)基礎(chǔ)上面加一個(gè)值。#define UM_PROGRESS WM_USER+1 b) 在頭文件中自定義消息:#define UM_PROGESS WM_USER+1,有了消息之后我們需要作消息響應(yīng)函數(shù)的聲明,在頭文件中進(jìn)行afx_msg void OnProgress() c) 消息響應(yīng)函數(shù)聲明之后需要做消息映射。ON_MESSAGE(UM_PROGRESS,OnProgress) d) 消息映射之后要實(shí)現(xiàn)函數(shù)void CMainFrame::OnProgress(){} 21. SendMessage和PostMessage的區(qū)別 a) SendMessage和將代碼直接放置到SendMessage位置的效果一樣 b) PostMessage是將消息放置到消息隊(duì)列之中,立即返回,這時(shí)候消息等待處理 22. 移動(dòng)窗口:MoveWindow 23. SetWindowText 設(shè)置窗口文本。這個(gè)可以是一個(gè)狀態(tài)欄 24. SetMessageText這個(gè)函數(shù)的作用主要是用來(lái)設(shè)置狀態(tài)欄的信息。這個(gè)一般是最左的,最長(zhǎng)的面板。ID為0的。 25. GetDescendantWindow獲取一個(gè)子孫窗口 26. AFX_IDW_STATUS_BAR 系統(tǒng)默認(rèn)的狀態(tài)欄的ID 27. 系統(tǒng)給我們定義好了很多標(biāo)準(zhǔn)的控制條的ID號(hào)。只要知道了一個(gè)ID,然后用go to definition就可以找到其它的了。 28. 增加啟動(dòng)畫(huà)面 a) 在project->add to project->component and control->Visual C++ Components,選擇Splashscreen b) 在OnCreate中修改SetTimer中的時(shí)間。 29. 修改工具欄——給工具欄增加一個(gè)按鈕 a) 工具欄的按鈕和菜單中的選項(xiàng)的功能是一一對(duì)應(yīng)的,所以,他們有著一樣的ID b) 基于他們擁有同一個(gè)ID,那么我們只需要對(duì)菜單欄上的MenuItem進(jìn)行消息處理,即可使工具欄上面的按鈕擁有同樣的功能 c) 首先在工具欄上新建一個(gè)圖標(biāo)(一個(gè)位圖),然后再在菜單欄新建一個(gè)MenuItem,給MenuItem添加消息相應(yīng),最后將工具欄中新建的圖標(biāo)的ID設(shè)置成和MenuItem一樣即可 d) 修改圖標(biāo)的ID需要在所要修改的圖標(biāo)上面雙擊,這樣就打開(kāi)了它的屬性對(duì)話(huà)框。 e) 想在工具欄上建立一個(gè)分隔符,只需要拖動(dòng)所要插入分割符后面的圖標(biāo)向后移動(dòng)即可 f) 想要?jiǎng)h除一個(gè)工具欄上面的圖標(biāo),只需要將圖標(biāo)拖出工具欄即可。 30. 增加一個(gè)工具欄 a) 新建一個(gè)工具欄資源,然后在上面隨便建幾個(gè)按鈕 b) 到CMainFrame這個(gè)類(lèi)中添加成員變量 CToolBar m_newToolBar; c) 找到CMainFrame這個(gè)類(lèi)的OnCreate函數(shù),然后找到添加默認(rèn)的工具欄的代碼,如下 if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||!m_wndToolBar.LoadToolBar(IDR_MAINFRAME)) { TRACE0("Failed to create toolbar\n"); return -1; // fail to create }
m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);//使工具欄具有停靠的屬性 EnableDocking(CBRS_ALIGN_ANY);//允許當(dāng)前窗口被工具欄???/P> DockControlBar(&m_wndToolBar);//停靠工具欄 然后將復(fù)制,將其中的m_wndToolBar改稱(chēng)我們新定義的m_newToolBar即可 31. 在菜單的MenuItem里面增加一個(gè)控制新建的工具欄,并可以顯示選中的MenuItem a) 在菜單欄“查看”下面新建一個(gè)項(xiàng)“新工具欄” b) 用class wizard添加消息響應(yīng)command c) 編輯代碼 if(!m_newToolBar.IsWindowVisible()) { m_newToolBar.ShowWindow(SW_SHOWNORMAL); } else { m_newToolBar.ShowWindow(SW_HIDE); } this->RecalcLayout();//若是不加這一行,結(jié)果回是工具欄上面的圖標(biāo)不見(jiàn)了,但是工具欄還在 //這個(gè)函數(shù)的功能就是重新計(jì)算窗口的布局 d) 再添加一個(gè)消息相應(yīng)UPDATE_COMMAND_UI,編輯代碼 pCmdUI->SetCheck(m_newToolBar.IsWindowVisible()); e) 還可以使ShowControlBar(&m_newToolBar,!m_newToolBar.IsWindowVisible(),FALSE); 這個(gè)方法不需要重新計(jì)算位置,和重新???/P> 32. 修改窗口的大小、程序的標(biāo)題 通過(guò)修改CMainFrame類(lèi)中的CREATESTRUCT結(jié)構(gòu)體來(lái)實(shí)現(xiàn) BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs) { if( !CFrameWnd::PreCreateWindow(cs) ) return FALSE; // TODO: Modify the Window class or styles here by modifying // the CREATESTRUCT cs cs.cx=300;//新的x,寬度 cs.cy=400;//新的y,高度 //cs.style&=~FWS_ADDTOTITLE; cs.style=WS_OVERLAPPEDWINDOW; return TRUE; } |
|
來(lái)自: 行者120 > 《網(wǎng)文收錄》