Windows 定製控制項訊息處理函式

2021-10-02 10:02:15 字數 1675 閱讀 8183

一、概述

控制項的訊息處理函式是由系統定義好了的,通常情況下,不需要自己提供。

但當需要對控制項進行特殊控制時,可以提供乙個訊息處理函式,替換原來的訊息處理函式。

自己的處理完成後,再呼叫控制項的預設訊息處理。

二、相關函式

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...