標籤:
NotePad功能:
1.向上尋找,大小寫,全字匹配,利用CFindDlg的基類的成員函數實現;
switch case
PreTranslateMessage()函數
http://blog.sina.com.cn/s/blog_9cd8465f01010cwe.html
http://blog.csdn.net/liuzhuomju/article/details/7380539
2.尋找對話方塊只允許出現一次,利用“if ...else...在主對話方塊Create CFindReplaceDialog之前判斷”實現;
3.使用CWinAPP中的Profile相關函數實現退出時記錄視窗位置和字型的功能,再次啟動時位置和字型載入退出時的狀態
4.PreTranslateMessage函數的使用(在class wizard中建立映射)可以實現快速鍵設定的功能
關於PreTranslateMessage
MFC訊息控制流程最具特色的地方是CWnd類的虛擬函數PreTranslateMessage(),通過重載這個函數,我們可以改變MFC的訊息控制流程程,甚至可以作一個全新的控制流程出來。只有穿過訊息佇列的訊息才受PreTranslateMessage()影響,採用SendMessage()或其他類似的方式向視窗直接發送的而不經過訊息佇列的訊息根本不會理睬PreTranslateMessage()的存在。
顧名思義,PreTranslateMessage就是訊息發送給視窗之前,提前攔截訊息,然後對訊息進行處理(即,改變了MFC的訊息控制流程程)
要注意一下兩點:
1)是否調用TranslateMessage()和DispatchMessage()是由一個名稱為PreTranslateMessage()函數的傳回值決定的,如果該函數返回TRUE,則不會把該訊息分發給視窗函數處理。
2)傳給PreTranslateMessage()的訊息是未經翻譯過的訊息,它沒有經過TranslateMessage()處理。可以在該函數中使用(pMsg->wParam==VK_RETURN)來攔截斷行符號鍵。
5.OnInitDialog在class wizard中添加如果找不到可以到最後一頁的過濾器(Message filter)中設定為Dialog
6.實現快速鍵的功能
定義快速鍵的就是自訂加速鍵
1)首先在資源檔Accelerator中添加快速鍵資源 ID選擇你要關聯功能表項目的名稱然後再設定你的快速鍵
2)在.h檔案中加入一個HACCEL hAccel;
3)變數然後在OnInitDialog或初始化中加入 hAccel=::LoadAccelerators(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MENU_MAIN)); IDR_MENU_MAIN為加速鍵的資源檔名
4)最後在PreTranslateMessage(MSG* pMsg) 中加入:
[cpp] view plain copy
if(::TranslateAccelerator(GetSafeHwnd(),hAccel,pMsg))
return true;
這樣 以後只要在Accelerator資源檔中添加快速鍵就可以了
7.CFindReplaceDialog()這種非強制回應對話方塊建立“替代”和“替代全部”的映射方法:
方法一:
1.使用PreTranslateMessage()在訊息傳遞之前攔截訊息,提前處理
2.使用ON_BN_CLICKED(0X400,OnReplace)建立函數和控制項的聯絡
方法二:
訊息註冊,訊息映射,對話方塊建立
http://blog.sina.com.cn/s/blog_9cd8465f01010cwe.html
關於NotePad一些功能的實現方法