-
NMHDR
鎖定
NMHDR,是一種程序。
- 中文名
- NMHDR
- NMHDR
- Notify Message Handler
- 成 員
- typedef struct tagNMHDR
- 識符代碼
- TBN_BEGINADJUST
NMHDR程序定義
NMHDR 結構包含下列成員:
typedefstructtagNMHDR{ HWNDhwndFrom;//handle of control sending message UINTidFrom;//identifier of control sendingmessage UINTcode;//notification code;see below }NMHDR;
消息通過下面的宏定義之:
ON_NOTIFY( wNotifyCode, idControl, memberFxn )
wNotifyCode
通知消息標識符代碼,如 TBN_BEGINADJUST。
idControl
發送通知的控件的標識符。
memberFxn
接收到通知時調用的成員函數。
成員函數將用下列原型聲明:
afx_msg void memberFxn( NMHDR * pNotifyStruct, LRESULT * result );
在WM_NOTIFY中,lParam中放的是一個稱為NMHDR結構的指針。在wParam中放的則是控件的ID。
NMHDR結構來歷
NMHDR結構是很值得一提的,該結構包括有關製作該通知的控件的任何內容,而不受空間和類型的限制,他的來歷也是很有意思的。
在最初的windows3.x中,根本就不存在什麼WM_NOTIFY,控件通知它們父窗口,如鼠標點擊,控件背景繪製事件,通過發送一個消息到父窗口。簡單的通知僅發送一個WM_COMMAND消息,包含一個通知碼和一個在wParam中的控件ID及一個在lPraram中的控件句柄。這樣一來,wParam和lParam就都被充了,沒有額外的空間來傳遞一些其它的消息,例如鼠標按下的位置和時間。
為了克服這個困難,windows3.x就提出了一個比較低級的解決策略,那就是給一些消息添加一些附加消息,最為明顯的就是控件自畫用到的DRAWITEMSTRUCT。不知道大家對這個結構熟悉不,不過,如果你是老手,你應該非常清楚這個結構,這個結構包含了9個內容,幾乎你需要控制的信息都給你提供了。為什麼説它比較低級呢?因為不同的消息附加的內容不同,結果就是一盤散沙,非常混亂。
在win32中,MS又提出了一個更好的解決方案:引進NMHDR結構。這個結構的引進就是消息統一起來,利用它可以傳遞複雜的信息。這個結構的佈局如下:
NMHDR { HWndhWndFrom;相當於原WM_COMMAND傳遞方式的lParam UINTidFrom;相當於原WM_COMMAND傳遞方式的wParam(low-order) UINTcode;相當於原WM_COMMAND傳遞方式的NotifyCode(wParam"shigh-order) };
對於這個結構的應用於WM_NOTIFY信息結構,結果WM_NOTIFY就變成了:
A、無附加信息。結構變得很簡單,就是一個NMHDR結構。
B、有附加信息。定義一個大的結構,它的第一個元素就是NMHDR結構,它的後面放置附加信息。
舉例://得到選中的列
voidCMyView::OnColumnclick(NMHDR*pNMHDR,LRESULT*pResult) { NM_LISTVIEW*pNMListView=(NM_LISTVIEW*)pNMHDR; //得到選中的列 column=pNMListView->iSubItem; }
- 詞條統計
-
- 瀏覽次數:次
- 編輯次數:13次歷史版本
- 最近更新: yz柠栀