国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
消息的一些知識【轉】
1. 發(fā)送一個消息:
發(fā)送一個消息,直接調用窗口的進程函數,直到函數執(zhí)行完之后返回,發(fā)送一個消息時即
時的。
LRESULT ret = pWnd->SendMessage(UINT Msg,WPARAM wParam,LPARAM lParam);
LRESULT ret = ::SendMessage(HWND hWnd,UINT Msg,WPARAM wPara,LPARAM lParam);
2. 寄送一個消息:
寄送一個消息是把消息發(fā)送到那個擁有窗口的應用程序的消息隊列里面,一有空閑應用程
序就收搜隊列,刪除消息,并發(fā)送到指定的窗口中,鍵盤和鼠標消息是寄送的,其他消息
是發(fā)送的,
BOOL ret = ::PostMessage(HWND hWnd,UINT Msg,WPARAM wPara,LPARAM lParam)
BOOL ret = pWnd-> PostMessage (UINT Msg,WPARAM wParam,LPARAM lParam);
MFC處理一個寄送和發(fā)送消息的唯一明顯不同是寄送的消息要在應用程序的消息隊列中花費
一些時間。在消息泵(message pump)彈出它之前,它要一直在隊列中。
MFC 應用程序中的消息泵在CWi nA pp的成員函數Run( )中。應用程序開始運行時, Run(
)就被調用,Run( )把時間分割成兩部分。一部分用來執(zhí)行后臺處理,如取消臨時C W n
d對象;另一部分用來檢查消息隊列。當一個新的消息進來時,Run( )抽取它—即用GetMe
ssage( )從隊列中取出該消息,運行兩個消息翻譯函數,然后用DispatchMessage( )函數
調用該消息預期的目標窗口進程
消息泵調用的兩個翻譯函數是Pre TranslateMessage( )和::TranslateMessage( )。目標
窗口的,MFC類可調用PreTranslateMessage在發(fā)送消息給它之前進行消息翻譯,例如, C
FrameWnd用PreTranslateMessage( )將加速鍵(如,C t r l + S存儲文件)轉換為命令消息
。翻譯前的消息通常被處理掉,而翻譯后的消息(如果有的話)將被重新寄送到隊列里。::
TranslateMessage是一個窗口函數,將原始鍵碼轉換為鍵字符。消息一旦被DispatchMess
age( )發(fā)送, M F C處理它就像處理SendMessage( )發(fā)送的消息一樣。

3. 從消息隊列中刪除一個消息
BOOL ret = ::PeekMessage(LPMSG lpMsg,HWND hWnd,UINT wMsFiterMin,UINT wRemoveMs
g);
變量hWnd指定要截獲消息的窗口,如果該變量設為NULL,所有窗口消息將被截獲。wMsg F
ilterMin和wMsgFilterMax變量與SendMessage( )中的變量Msg相對應,指定查看消息的范
圍。如果用“ 0,0”,則所有的消息都將被截獲。如果用WM _KEYFIRST,WM_KEYLAST或WM
_M OUSEFIRST, WM_MOUSELAST,則所有鍵盤或鼠標的消息將被截獲。
WRemoveMsg的取值可以是:
PM_NOREMOVE,PeekMessage( )將把消息留在隊列里,并返回它的一個拷貝。
PM_REMOVE,PeekMessage( )將刪除消息

BOOL ret = ::GetMessage(LPMSG lpMsg,HWND hWnd,UINT wMsFiterMin,UIINT wMsgFilte
rMax);
    GetMessage()總是刪除消息。
4. 消息結構體:
typedef struct tagMSG {
HWND hwnd ;
UINT messaage ;
WPARAM wParam ;
LPARAM lParam ;
DWORD time ;
POINT pt ;
} MSG;
5. 消息類型:
窗口消息,命令消息,控件消息
6. 窗口消息:
窗口消息一般與窗口的內部運作有關,如創(chuàng)建窗口,繪制窗口,銷毀窗口,可以用SengMe
ssage或PeekMessage發(fā)送消息,可以由系統(tǒng)象窗口發(fā)送,也可以由窗口向窗口發(fā)送。
Message wParam                 lParam
WM_******     定義的命令            定義的命令
7. 命令消息
命令消息一般與處理用戶請求相關,當用戶單擊一個菜單項或工具欄時,命令消息產生,

并被發(fā)送到能處理該請求的類對象
Message wParam                 lParam
W M _ COMMAND      COMMANDID或0            0
Command ID要么是選中菜單項的I D,要么是被單擊的工具欄按鈕。注意Command ID不
能大于一個字長,如果使它大于一個字長,系統(tǒng)就只用0來填充高位字。

某些控件通知也用WM_COMMAND消息,區(qū)別兩種消息的唯一方法是lParam是否為NULL。
8. 控件消息
控件消息可以是窗口消息的子集
Message wParam                 lParam
WM_******            定義的命令              定義的命令
    控件通知消息使用命令格式
Message      wParam                 lParam
W M _ COMMAND       控件ID或XN_XXX          窗口句柄
控件通知消息
Message      wParam                 lParam
W M _ NOTIFY       控件ID                  指向N M H D R的指針

typedef struct tagNMHDR {
HWND hwndFrom;     // Window handle of Control Window
// making the notification.
UINT idFrom;     // Control ID of Control Window
// making the notification.
UINT code;         // notification code ex: the user
// has clicked the Control Window
} NMHDR;
9. 自定義消息
Windows保留了0和WM_USER-1之間的整數范圍,作為系統(tǒng)定義的窗口消息;還有一個從W M
_ USER一直到OX7fff的整數范圍,留給自定義消息用??梢杂靡粋€簡單的#define語句

定義消息:
#define WM_MYMESSAGE WM_USER + 1
然后增加消息映射:
    ON_MESSAGE(WM_MYMESSAGE, Handler)
增加處理函數
    LRESULT Handle(WPARAM ,LPARAM)
可以像其他消息一樣發(fā)送:
SendMessage(WM_MYMESSAGE, wParam, lParam)
或者
PostMessage(WM_MYMESSAGE, wParam, lParam).
動態(tài)分配窗口消息:
為了在應用程序間發(fā)送消息,應該用下面的語句創(chuàng)建一個基于描述性字符串的新的窗口

消息。
UINT WM_MYMESSAGE=::RegisterWindowMessage(LPCSTR Identifier);
Identifier是描述性字符串。
WM_MYMESSAGE是在0xc000和0xffff之間的一個動態(tài)分配的窗口消息
在消息映射中加入:
ON_REGISTERED_MESSAGE (MYMESSAGE , Handler )
增加處理函數
    LRESULT Handle(WPARAM ,LPARAM)
10.             添加命令范圍消息處理函數:
在類中添加處理某個范圍的命令消息或者修改命令接口的處理函數。
手工添加兩個消息映像宏: ON_COMMAND_RANGE和ON_UPDATE_COMMAND_UI_RANG E到用戶類
的消息映像中。
消息映射
ON_COMMAND_RANGE ( ID_TEST _WZD1 , ID_TEST _WZD4 , OnWzdCommandRange )
處理函數
afx_msg void OnWzdCommandRange(UINT nID);
void CWzdView::OnWzdCommandRange(UINT nID)
{
switch (nID)
{
case ID_TEST_WZD1:
break ;
case ID_TEST_WZD2:
break ;
case ID_TEST_WZD3:
break ;
case ID_TEST_WZD4:
break ;
}
}

ON _UPDATE _ COMMAND _ UI _ RANGE ( ID_ TEST_ WD1 , ID_ TEST_WZD4 ,
OnUpdateWzdCommandRange )
void CWzdView::OnUpdateWzdCommandRange(CCmdUI *pCmdUI)
{
switch (pCmdUI->m_nID)
{
case ID_TEST_WZD1:
break ;
case ID_TEST_WZD2:
break ;
case ID_TEST_WZD3:
break ;
case ID_TEST_WZD4:
break ;
}
}

本站僅提供存儲服務,所有內容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權內容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
win32對話框
深度解析VC中的消息(中)
Windows消息編程原理
用Win32 application建立窗體_入門
Windows消息機制 vc
VC/MFC中常用消息總結
更多類似文章 >>
生活服務
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服