更換視窗過程就是攔截訊息,專業術語叫做視窗」子類化」技術.
下面用編輯框做例子.如圖:
1.新增乙個c++類
右鍵單擊專案->新增->c++類,如圖所示:
2.在新建類的標頭檔案中新增相關變數和函式
protected:
//新的視窗過程,格式一定得這樣寫.
static lresult apientry neweditproc(hwnd hwnd, uint message, wparam wparam, lparam lparam);
protected:
hwnd m_holdedit;//儲存舊的視窗控制代碼
long m_loldproc;//舊的視窗過程
public:
//更換視窗過程
bool changeproc(hwnd holdedit);
//恢復視窗過程
bool renewproc();``
3.在新建類cpp檔案中實現函式體
bool cnewedit::changeproc(hwnd holdedit)
while (false);
return bret;
}bool cnewedit::renewproc()
while (false);
return bret;
}lresult apientry cnewedit::neweditproc(hwnd hwnd, uint message, wparam wparam, lparam lparam)
break;}}
//處理完需要截獲(改變)的訊息後接著返回舊的視窗過程
return callwindowproc((wndproc)pnewedit->m_loldproc,hwnd,message,wparam,lparam);
}
4.更換視窗過程
//更換視窗過程,傳入的是需要更換的視窗控制代碼
g_newedit.changeproc(getdlgitem(idc_edit)->getsafehwnd());
//g_newedit是全域性變數
5.恢復視窗過程
//恢復視窗過程
g_newedit.renewproc();
6.除了手動恢復,還可以在新建類的析構函式和對話方塊的wm_destroy訊息函式中進行恢復.
現在就可以攔截不是0-9的訊息了,鉤子函式也可用實現訊息攔截.這個以後講.
MFC視窗建立過程
本文針對單文件模式的mfc程式進行分析。一步步說明,如何建立視窗並顯示。首先我們建立乙個單文件的mfc程式 test。csingledoctemplate pdoctemplate pdoctemplate new csingledoctemplate idr mainframe,runtime c...
MFC 使用MFC建立視窗
標頭檔案 mfc是乙個封裝了windowsapi且物件導向的c 類庫,同時也是乙個應用程式的框架結構。另外,並非所有mfc提供的函式都是類的成員,mfc也以 全域性函式的形式,為使用者提供了各類字首為afx的函式,可供使用者在必要時隨時隨地進行呼叫。由mfc建立的應用,我們不能夠直接看到其程式的入口...
MFC視窗訊息
mfc應用程式中處理訊息的順序 1.afxwndproc 該函式負責接收訊息,找到訊息所屬的cwnd物件,然後呼叫afxcallwndproc 2.afxcallwndproc 該函式負責儲存訊息 儲存的內容主要是訊息識別符號和訊息引數 用程式以後使用,然後呼叫windowproc 函式 3.win...