NMHDR

NMHDR,是一種程式。

基本介紹

  • 中文名:NMHDR
  • NMHDR  : Notify   Message   Handler
  • 成員:typedef   struct   tagNMHDR
  • 識符代碼:TBN_BEGINADJUST
程式定義,結構來歷,

程式定義

NMHDR = Notify Message Handler
NMHDR 結構包含下列成員:
typedefstructtagNMHDR{HWNDhwndFrom;//handle of control sending messageUINTidFrom;//identifier of control sendingmessageUINTcode;//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結構是很值得一提的,該結構包括有關製作該通知的控制項的任何內容,而不受空間和類型的限制,他的來歷也是很有意思的。
在最初的windows3.x中,根本就不存在什麼WM_NOTIFY,控制項通知它們父視窗,如滑鼠點擊,控制項背景繪製事件,通過傳送一個訊息到父視窗。簡單的通知僅傳送一個WM_COMMAND訊息,包含一個通知碼和一個在wParam中的控制項ID及一個在lPraram中的控制項句柄。這樣一來,wParam和lParam就都被充了,沒有額外的空間來傳遞一些其它的訊息,例如滑鼠按下的位置和時間。
為了克服這個困難,windows3.x就提出了一個比較低級的解決策略,那就是給一些訊息添加一些附加訊息,最為明顯的就是控制項自畫用到的DRAWITEMSTRUCT。不知道大家對這個結構熟悉不,不過,如果你是老手,你應該非常清楚這個結構,這個結構包含了9個內容,幾乎你需要控制的信息都給你提供了。為什麼說它比較低級呢?因為不同的訊息附加的內容不同,結果就是一盤散沙,非常混亂。
在win32中,MS又提出了一個更好的解決方案:引進NMHDR結構。這個結構的引進就是訊息統一起來,利用它可以傳遞複雜的信息。這個結構的布局如下:
NMHDR{HWndhWndFrom;相當於原WM_COMMAND傳遞方式的lParamUINTidFrom;相當於原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;}

相關詞條

熱門詞條

聯絡我們