一、概述
控制項的訊息處理函式是由系統定義好了的,通常情況下,不需要自己提供。
但當需要對控制項進行特殊控制時,可以提供乙個訊息處理函式,替換原來的訊息處理函式。
自己的處理完成後,再呼叫控制項的預設訊息處理。
二、相關函式
1.視窗類的屬性可以通過getwindowlong和setwindowlong進行讀取和設定
long getwindowlong(
hwnd hwnd, // handle to window
int nindex // offset of value to retrieve
); long setwindowlong(
hwnd hwnd, // handle to window
int nindex, // offset of value to set
long dwnewlong // new value
);
可以返回或設定以下內容:
nindex值 意義
gwl_exstyle 擴充套件風格
gwl_style 風格
gwl_wndproc 訊息處理函式
gwl_hinstance 例項
gwl_id 視窗id
gwl_userdata 使用者資料
dwl_dlgproc 對話方塊訊息處理函式
dwl_msgresult
dwl_user
所以使用
oldmsgproc = (wndproc)setwindowlong (hcontrolwnd, gwl_wndproc, (long)mymsgproc);將控制項訊息處理函式替換成mymsgproc,原處理函式被oldmsgproc記錄。
2.呼叫訊息處理函式
lresult callwindowproc(
wndproc lpprevwndfunc, // pointer to previous procedure
hwnd hwnd, // handle to window
uint msg, // message
wparam wparam, // first message parameter
lparam lparam // second message parameter
);
三、示例
1.提供新處理函式
//記錄原來處理函式的全域性變數
wndproc oldmsgproc;
//新訊息處理函式
lresult mymsgproc(hwnd hwnd,uint message, wparam wparam, lparam lparam)
//呼叫控制項原來的訊息處理函式
return callwindowproc(oldmsgproc,hwnd,message,wparam,lparam);
}
2.建立視窗後,更改訊息處理函式
case wm_create:
return 0;
Windows訊息處理
這裡簡述一下關於window訊息處理,主要在實際應用中 在乙個windows程式中,乙個程式的的訊息是通過乙個大迴圈來實現接收處理的 這個可以檢視win32程式的編寫,具體可以詳細查詢相關資料 在windows程式設計中,尤其是mfc程式中,關於視窗訊息是非常重要的 視窗過程函式 接收處理視窗訊息的...
Windows鍵盤訊息處理
本文大部分來自msdn和的部落格,我在實踐的基礎上再作了一些總結。1,虛擬鍵 vk 鍵盤上每乙個鍵對應乙個掃瞄碼,掃瞄碼是oem廠商制定的,不同的廠商生產的鍵盤同樣乙個按鍵的掃瞄碼都有可能出現不一致的情況,為了擺脫由於系統裝置不一致的情況,通過鍵盤驅動程式將掃瞄碼對映為統一的虛擬鍵碼表示,從而達到所...
WPF處理Windows訊息
wpf中處理訊息首先要獲取視窗控制代碼,建立hwndsource物件 通過hwndsource物件新增訊息處理 函式.hwndsource類 hwndsource class implements its own window procedure.實現其自己的視窗過程。建立視窗之後使用 addhoo...