在VC++中,窗口過程函數是應用程序定義的一個函數,主要功能是處理發送給窗口的消息。窗口過程函數的定義是:virtual LRESULT WindowProc( UINT message, WPARAM wParam,LPARAM lParam ); 其中,message指定消息類型,wParam和lParam指定其余的消息特定信息,內容與message參數值有關。
在應用程序中窗口過程函數及其消息發送、響應機制的使用,能夠方便程序集中處理各類消息,使得整個程序的架構更加合理、清晰。
下面結合實例詳細講述窗口過程函數及其消息發送、響應機制的使用方法。(完整的實例可在我的CSDN資源中下載:[http://download.csdn.net/detail/margin1988/4570359](http://download.csdn.net/detail/margin1988/4570359))
(1)自定義消息:
在Resource.h文件中自定義消息:
~~~
#define WM_MYMSG 2000
~~~
(2)添加窗口過程函數的聲明和實現體:
1)在.h文件中添加窗口過程函數聲明:
~~~
virtual LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam);
~~~
2)在.cpp文件中添加窗口過程函數實現體:
~~~
LRESULT CPoint18Dlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam){
switch (message){
case WM_MYMSG:
MessageBox("WindowProc收到并處理了自定義的WM_MYMSG消息");
break;
}
return CDialog::WindowProc(message,wParam,lParam);
}
~~~
(3)發送消息的方式比較:
~~~
this->SendMessage(WM_MYMSG,0,0);
//this->PostMessage(WM_MYMSG,0,0);
//this->SendNotifyMessage(WM_MYMSG,0,0);
~~~
注:這三個函數都可以將指定的消息發送到某個窗口,但是這三種消息的發送方式存在如下的區別:**SendMessage**立即調用窗口過程函數,而且直到窗口過程函數處理完消息后才返回。**PostMessage**則是將指定的消息寄送到窗口消息隊列后立即返回。對于**SendNotifyMessage**來說**,**如果窗口是調用線程創建的,**SendNotifyMessage**為該窗口調用窗口過程函數,并且等待窗口過程函數處理完消息后才返回;如果窗口是由不同的線程創建的,**SendNotifyMessage**將指定的消息傳給窗口過程函數后立即返回。
- 前言
- VC++中自定義熱鍵及響應
- CFileDialog文件對話框
- VC++中客戶區保存為BMP圖片
- VC++讀、寫注冊表
- VC++播放音頻文件和音頻數據的方法
- VC++調用Matlab編寫的DLL(混合編程)
- VC++中文件讀、寫和其他相關操作匯總
- VC++獲取系統當前時間
- VC++按鈕控件字體設置
- VC++軟件界面風格簡單美化
- VC++中一些常用的數據類型之間的相互轉化
- VC++中截取字符串的方法
- VC++中vector矢量的使用方法及隨機相關
- VC++中結構體的定義及使用
- VC++中List Control控件的使用方法介紹
- VC++中窗口過程函數及其消息發送、響應機制介紹
- VC++中Ribbon編程架構及SDI架構多視圖切換介紹
- 串口通信基礎知識及VC++實現
- VC++中單個鍵盤按鍵的響應
- VC++中的計時器及多媒體高精度計時器
- VC++編寫DLL導出函數及其調用方法
- VC++對話框(CDialog)的全屏顯示及控件居中顯示
- VC++對話框(CDialog)添加背景圖片
- VC++圖片控件(Picture Control)顯示資源位圖(BMP)、文件位圖(BMP)、其它格式文件圖片(JPG\PNG\BMP)的方法
- VC++對Access數據庫的操作(查詢、插入、更新、刪除等)