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