日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁 > > 充電吧
[導(dǎo)讀]1、命令消息(WM_COMMAND所有派生自?CCmdTarget?的類都有資格接受WM_COMMAND。 2、Window消息(WM_xxx) 所有派生自?CWnd?的類都有資格接受?WM_xxx。

1、命令消息(WM_COMMAND

所有派生自?CCmdTarget?的類都有資格接受WM_COMMAND。

2、Window消息(WM_xxx)
所有派生自?CWnd?的類都有資格接受?WM_xxx。

3、控件消息(WM_NOTIFY)
控件向其父窗口通知消息。

消息處理
1、WM_xxx?消息處理
窗口類(自身)處理→基類處理→CWnd∷DefWindowProc()處理;
其所對應(yīng)的宏一般為在消息?WM_?前面加上?ON_。

2、命令消息處理
命令消息來自命令用戶接口對象(菜單、加速鍵或工具欄按鈕)發(fā)出的WM_COMMAND消息;
㈠、WM_COMMAND消息
其所包含的類型和對應(yīng)的宏如下:
①、ON_COMMAND(ID,pfn)
標(biāo)準(zhǔn)的命令消息;

②、ON_COMMAND_EX(ID,pfn)
多個命令?ID?提供相同的處理,每個ID都要單獨(dú)使用一個ON_COMMAND_EX,ID可以不連續(xù)、多個對象對同一個命令?ID?的處理;
其函數(shù)的原型如下:
afx_msg?BOOL?pfn(UINT?nID)
說明:
當(dāng)返回?TRUE?時表示已經(jīng)處理,不用在消息處理鏈中繼續(xù)處理該命令;為?FALSE?時表示繼續(xù)在消息處理鏈中處理該命令。
注意:
其一:在多對象處理中一定要使用該宏;
其二:pfn(UINT?nID)(消息處理函數(shù))返回值將其類型void改成BOOL,而且必須為FALSE;
其三:多個對象的處理是由高層向低層的過程:即視圖類→主框架窗口類→應(yīng)用程序類;

③、ON_COMMAND_RANGE(nID,nLastID,pfn)
多個命令?ID?提供相同的處理、多個對象對同一個命令?ID?的處理;?

注意:
其一:確保nID、nLastID的值在?Resource.h?中是連續(xù)的。
其二:一般在函數(shù)?pfn(UINT?nID)?中加入?yún)?shù),用來確定那一個按鈕點(diǎn)擊。

㈡、CN_UPDATE_COMMAND_UI消息
當(dāng)菜單項(xiàng)、工具欄按鈕等[命令用戶接口對象]要更新其狀態(tài)時所對應(yīng)的消息,它所包含的類型和對應(yīng)的宏如下:
①、ON_UPDATE_COMMAND_UI(ID,pfn)
其中函數(shù)的原型如下:
afx_msg?void?pfn(CCmdUI*?pCmdUI)

②、ON_UPDATE_COMMAND_UI_RANGE(nID,nLastID,pfn)
該函數(shù)可以處理一組[命令用戶接口對象]的外觀;
其中函數(shù)的原型如下:
afx_msg?void?pfn(CCmdUI*?pCmdUI)
重要:
CCmdUI?中的?m_nID?成員表示不同的?ID,因此可以利用它來進(jìn)行區(qū)別處理。

3、控件的通知消息
從控件和子窗口發(fā)送到父窗口的WM_COMMAND通知消息(即在發(fā)送命令消息中加入控件的通知碼)。
注意:在?Window9x?新控件中不再傳送WM_COMMAND通知消息,而是發(fā)送?WM_NOTIFY?消息,但為了兼容,舊有的控件還是傳送WM_COMMAND消息。
例如:
CEdit控件向父窗口發(fā)送?EN_CHANGE?通知代碼的WM_COMMAND消息。
注意:框架像傳送其它?WM_?消息一樣傳送通知消息,但有一個例外,即由?[按鈕]?控件發(fā)送的?BN_CLICKED?通知消息,被作為命令消息特別處理。
㈠、WM_COMMAND?其所對應(yīng)的宏如下:
①、ON_CONTROL(通知碼,?nID,fn)
②、ON_CONTROL_RANGE(通知碼,?nFirstID,nEndID,fn)
注意:
這兩個宏的應(yīng)用和?ON_COMMAND、ON_COMMAND_RANGE相同,所不同的是在宏前面加入[通知碼]。
注意:可以根據(jù)不同的控件的[通知碼]派生出特定的宏,其所派生的宏一般為在?[通知碼]?前面加上?ON_。
㈡、WM_NOTIFY?其所對應(yīng)的宏如下:
①、ON_NOTIFY(通知碼,?nID,fn)
其中函數(shù)的原型如下:
afx_msg?void?fn(NMHDR*?pNotifyStruct,LRESULT*?result)
其中結(jié)構(gòu):
typedef?struct?tagNMHDR?{?
HWND?hwndFrom;?//發(fā)送通知消息的控件的句柄;
UINT?idFrom;?//發(fā)送通知消息的控件的?ID;
UINT?code;?//通知碼;
}?NMHDR;?

②、ON_NOTIFY_EX(通知碼,?nID,fn)
表示一個消息在多個對象的成員函數(shù)中進(jìn)行處理。
其中函數(shù)的原型如下:
afx_msg?BOOL?fn(UINT?nID,NMHDR*?pNotifyStruct,LRESULT*?result)
說明:
它必須返回?BOOL?類型的數(shù)值,其意義和?ON_COMMAND_EX?相同。

③、ON_NOTIFY_RANGE(通知碼,?nFirstID,nEnd,fn)
表示多個控件的通知消息在同一個函數(shù)中進(jìn)行處理。
其中函數(shù)的原型如下:
afx_msg?void?fn(UINT?nID,NMHDR*?pNotifyStruct,LRESULT*?result)
說明:
其意義和ON_COMMAND_RANGE相同。

4、反射消息處理
父窗口在處理控件窗口的通知消息WM_CTLCOLOR、WM_COMMAND、WM_NOTIFY時,會把該消息轉(zhuǎn)化為反射消息,并轉(zhuǎn)交給控件子窗口處理,只有在控件子窗體不處理該消息時,父窗口才有機(jī)會處理。
注意:在類的屬性對話框中的消息頁面可查反射消息(前面有"="標(biāo)志)
①、WM_CTLCOLOR_REFLECT反射消息
其所對應(yīng)的宏如下:
ON_WM_CTLCOLOR_REFLECT()
反射消息函數(shù)的原型:
HBRUSH?class_name∷CtlColor(CDC*?pDC,UINT?nCtlColor)
{
return?NULL;
}
該函數(shù)用來重置控件的顔色;注意:必須?return?CBrush才有效。


5、自定義的窗口消息
自定義窗口消息的消息標(biāo)志都大于WM_USER(至少是WM_USER+100,因?yàn)樵S多控件都使用這一范圍的WM_USER消息)
使用自定義的消息分為二步:
①、在?Resource.h?中定義消息標(biāo)記
#define?WM_MYMSG?(WM_USER+1000)

②、在消息映射表中加入消息映射宏
BEGIN_MESSAGE_MAP()

ON_MESSAGE(WM_MYMSG,fn)
END_MESSAGE_MAP()
說明:
其對應(yīng)的宏為?ON_MESSAGE(),其成員函數(shù)的原型為:
afx_msg?LRESULT?fn(WPARAM,LPARAM)

6、登記消息
①、在系統(tǒng)中注冊并獲取一個登記消息的消息標(biāo)記
UINT?RegisterWindowMessage(LPCTSTR)
說明:
通過?API?函數(shù)來注冊消息標(biāo)記,其中?LPCTSTR?為用戶的任意字符串。例如:
UINT?WM_MYMSG=RegisterWindowMessage("MYMSG");
其中?WM_MYMSG?是自定義無符號整型的消息標(biāo)記。

②、在消息映射表中加入消息映射宏
BEGIN_MESSAGE_MAP()

ON_REGISTERED_MESSAGE(WM_MYMSG,fn)
END_MESSAGE_MAP()
說明:
其對應(yīng)的宏為?ON_REGISTERED_MESSAGE(),其成員函數(shù)的原型為:
afx_msg?LRESULT?fn(WPARAM,LPARAM)
注意:登記消息可以實(shí)現(xiàn)跨進(jìn)程的數(shù)據(jù)通訊。

7、線程消息
只有繼承自CWinThread類才能允許處理線程消息。
①、定義線程的消息標(biāo)記
有兩種方法:
(1)、使用自定義的消息標(biāo)記,即:WM_USER;
(2)、使用登記的消息標(biāo)記,即:RegisterWindowMessage;

②、在CWinThread繼承類的消息映射表中添加宏
ON_THREAD_MESSAGE(消息標(biāo)記,fn)?//自定義的消息;
ON_REGISTERED_THREAD_MESSAGE(消息標(biāo)記,fn)?//登記的?//消息
③、其函數(shù)的原型如下:
afx_msg?void?fn(WPARAM?wPARAM,LPARAM?lParam)

④、引發(fā)線程消息
線程消息的引發(fā)必須調(diào)用?CWinThread?類的PostThreadMessage將消息投遞到線程消息隊(duì)列中。
注意:可以通過?AfxGetApp()?函數(shù)獲取一個全局的應(yīng)用對象。
PostThreadMessage(UINT,WPARAM,LPARAM)

8、WM_COPYDATA
操作系統(tǒng)維護(hù)一塊內(nèi)存來管理?WM_COPYDATA?消息,該消息主要用于跨進(jìn)程傳遞數(shù)據(jù),傳遞的數(shù)據(jù)量達(dá)到?232。
①、定義一個?COPYDATASTRUCT?數(shù)據(jù)結(jié)構(gòu)
typedef?struct?tagCOPYDATASTRUCT?{?
DWORD?dwData;?//自定義的特殊數(shù)據(jù);
DWORD?cbData;?//以字節(jié)為單位的?lpData?的大?。?
PVOID?lpData;?//傳送的數(shù)據(jù)內(nèi)存塊的指針;
}?COPYDATASTRUCT;?

②、其所對應(yīng)的宏
ON_WM_COPYDATA()

③、其所對應(yīng)的函數(shù)的原型
afx_msg?BOOL?OnCopyData(CWnd*,COPYDATASTRUCT*)
說明:
CWnd*:發(fā)送該消息的窗口的指針;


9、投遞和發(fā)送消息
通過向一個窗體投遞或發(fā)送消息,可以間接地驅(qū)動窗體的消息過程。
投遞(PostMessage):將消息放到線程的消息隊(duì)列中,然后不等線程處理該消息就直接返回到調(diào)用方。
發(fā)送(SendMessage):當(dāng)一個線程向目標(biāo)線程發(fā)送消息時,該線程要一直等待,直到目標(biāo)線程處理了該消息為止。
①、投遞消息
BOOL?CWnd∷PostMessage(UINT,WPARAM=0,LPARAM=0)
說明:
CWnd:目標(biāo)窗口;
該函數(shù)將一條消息放入到應(yīng)用程序的消息隊(duì)列,然后不等窗口處理就直接返回。

②、發(fā)送消息
LRESULT?CWnd∷SendMessage(UINT,WPARAM=0,LPARAM=0)
說明:
CWnd:目標(biāo)窗口;
該函數(shù)將一條消息放入到應(yīng)用程序的消息隊(duì)列,等待窗口處理后才返回。
為了避免線程陷入永久等待狀態(tài),可以用SendMessageTimeout代替SendMessage:
LRESULT?SendMessageTimeout(HWND,UINT,WPARAM,LPARAM,UINT,UINT,PDWORD_PTR)
說明:
HWND:窗口句柄;
UINT:消息發(fā)送的選項(xiàng),為SMTO_BLOCK時,可以防止線程無?限等待,即根據(jù)一定的超時值返回。
UINT:超時,以毫秒為單位;
PDWORD_PTR:返回值;
注意:CWnd沒有對該函數(shù)的包裝。

③、投遞和發(fā)送消息
BOOL?CWnd∷SendNotifyMessage(UINT,WPARAM,LPARAM)
說明:
CWnd:目標(biāo)窗口;
該消息具有SendMessage和PostMessage兩種功能:
當(dāng)目標(biāo)窗口和發(fā)送窗口為同一個線程時,則相當(dāng)于SendMessage的功能;否則當(dāng)不為同一個線程時,則為PostMessage的功能。

6-1、投遞和發(fā)送?WM_XXX?消息
在發(fā)送標(biāo)準(zhǔn)的?WINDOW?消息時,只要將該消息的?ID、wParam、lParam參數(shù)放在?SendMessage()和PostMessage()函數(shù)的相應(yīng)位置即可。

6-2、投遞和發(fā)送命令消息和控件的通知消息
在投遞和發(fā)送命令消息時,消息的?ID為?WM_COMMADN,而對于不同的菜單項(xiàng)、加速鍵、控件則wParam、lParam的取值不同。
wParam分成低、高兩部分,

低部分為菜單項(xiàng)、加速鍵、控件的ID。 高部分則: 菜單項(xiàng):0;加速鍵:1;控件:通知碼
lParam:當(dāng)控件時是控件的句柄,否則為?NULL。

對于wParam參數(shù)可以采用自定義宏:
WPARAM?MAKEWPARAM(WORD?wLow,WORD?wHigh) SendMessage (?WM_COMMAND, MAKEWPARAM (GetDlgCtrlID (), BN_CLICKED),?(LPARAM) m_hWnd);

6-3、投遞和發(fā)送自定義的窗口消息
在投遞和發(fā)送自定義的窗口消息時,參數(shù)?wParam、lParam?沒有特別的涵義,只和普通函數(shù)的形參一樣進(jìn)行數(shù)據(jù)的傳遞。
注意:
PostMessage?和?SendMessage?是不同的,前者投遞后就返回,而后者必須等到消息處理后再返回;所以在參數(shù)是?[局部]?或?[臨時]時,使用PostMessage函數(shù)會引發(fā)錯誤(除非參數(shù)使用?指針,則可避免錯誤),而必須使用SendMessage函數(shù)。
6-4、投遞和發(fā)送注冊的窗口消息
和?6-3?基本一樣,但它要特別注意的問題是:在跨進(jìn)程的處理消息時,如果將消息PostMessage、SendMessage到某個進(jìn)程?A,則必須在進(jìn)程?B?中獲取進(jìn)程?A?的窗口類名,并通過窗口類名獲取窗口的指針,最后再根據(jù)指針調(diào)用?PostMessage、SendMessage?函數(shù)。
注意:在獲取窗口的指針時,可以根據(jù)窗口類名或窗口的標(biāo)題。


6-5、投遞和發(fā)送WM_COPYDATA消息
SendMessage(消息標(biāo)記,WPARAM,LPARAM)
其中:
消息標(biāo)記:WM_COPYDATA;
WPARAM:發(fā)送該消息的窗口句柄;
LPARAM:COPYDATASTRUCT結(jié)構(gòu)的指針,先通過(LPVOID)進(jìn)行轉(zhuǎn)換,再通過(LPARAM)進(jìn)行轉(zhuǎn)換,如下形式:
(LPARAM)(LPVOID)&cds

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: 驅(qū)動電源

在工業(yè)自動化蓬勃發(fā)展的當(dāng)下,工業(yè)電機(jī)作為核心動力設(shè)備,其驅(qū)動電源的性能直接關(guān)系到整個系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動勢抑制與過流保護(hù)是驅(qū)動電源設(shè)計中至關(guān)重要的兩個環(huán)節(jié),集成化方案的設(shè)計成為提升電機(jī)驅(qū)動性能的關(guān)鍵。

關(guān)鍵字: 工業(yè)電機(jī) 驅(qū)動電源

LED 驅(qū)動電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個照明設(shè)備的使用壽命。然而,在實(shí)際應(yīng)用中,LED 驅(qū)動電源易損壞的問題卻十分常見,不僅增加了維護(hù)成本,還影響了用戶體驗(yàn)。要解決這一問題,需從設(shè)計、生...

關(guān)鍵字: 驅(qū)動電源 照明系統(tǒng) 散熱

根據(jù)LED驅(qū)動電源的公式,電感內(nèi)電流波動大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關(guān)鍵字: LED 設(shè)計 驅(qū)動電源

電動汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產(chǎn)業(yè)的重要發(fā)展方向。電動汽車的核心技術(shù)之一是電機(jī)驅(qū)動控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機(jī)驅(qū)動系統(tǒng)中的關(guān)鍵元件,其性能直接影響到電動汽車的動力性能和...

關(guān)鍵字: 電動汽車 新能源 驅(qū)動電源

在現(xiàn)代城市建設(shè)中,街道及停車場照明作為基礎(chǔ)設(shè)施的重要組成部分,其質(zhì)量和效率直接關(guān)系到城市的公共安全、居民生活質(zhì)量和能源利用效率。隨著科技的進(jìn)步,高亮度白光發(fā)光二極管(LED)因其獨(dú)特的優(yōu)勢逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關(guān)鍵字: 發(fā)光二極管 驅(qū)動電源 LED

LED通用照明設(shè)計工程師會遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關(guān)鍵字: LED 驅(qū)動電源 功率因數(shù)校正

在LED照明技術(shù)日益普及的今天,LED驅(qū)動電源的電磁干擾(EMI)問題成為了一個不可忽視的挑戰(zhàn)。電磁干擾不僅會影響LED燈具的正常工作,還可能對周圍電子設(shè)備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來解決L...

關(guān)鍵字: LED照明技術(shù) 電磁干擾 驅(qū)動電源

開關(guān)電源具有效率高的特性,而且開關(guān)電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機(jī)重量也有所下降,所以,現(xiàn)在的LED驅(qū)動電源

關(guān)鍵字: LED 驅(qū)動電源 開關(guān)電源

LED驅(qū)動電源是把電源供應(yīng)轉(zhuǎn)換為特定的電壓電流以驅(qū)動LED發(fā)光的電壓轉(zhuǎn)換器,通常情況下:LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: LED 隧道燈 驅(qū)動電源
關(guān)閉