字体
第(4/5)页
关灯
   存书签 书架管理 返回目录
和前面提到的传统控件在某些方面存在不同。Win32 控

    件采用新的WM_NOTIFY 消息来实现新控件的消息通知机制。在该消息的wParam 中含有控

    件的ID,lParam 中则有一个指针,这个指针指向一个结构。这个结构要么是NMHDR 结构,

    要么是一个以NMHDR 结构作为第一个成员的扩充结构。通过NMHDR 结构及其扩充结构可

    以传递附加数据。从理论上讲,可以通过扩充结构传送任意多的数据。需要指出的是,由于

    NMHDR 结构是扩充结构的第一个成员,因此lParam 中的指针即可以认为是指向NMHDR

    结构的,也可以认为是指向包含NMHDR 结构的扩充结构的。

    1.NMHDR 结构

    NMHDR 结构如下:

    typedef struct tagNMHDR

    {

    HWND hwndFrom; //控件窗口的句柄

    UINT idFrom; //控件的ID

    UINT code; //控件的通知消息码

    }NMHDR;

    一个典型的扩充结构如下,该结构用于列表视图控件的LVN_KEYDOWN 通知消息。

    typedef struct tagLV_KEYDOWN{

    NMHDR hdr; //NMHDR 结构作为第一个成员

    枫叶文学网www.fywxw.com

    第5 章 常用控件

    ·129·

    WORD wVKey;

    UINT flags;

    }LV_KEYDOWN;

    2.WM_NOTIFY 消息处理

    WM_NOTIFY 的消息映shè由宏ON_NOTIFY 负责,该消息映shè宏具有如下形式:

    ON_NOTIFY(wNotifyCode,idcommberFxn)

    参数wNotifyCode 说明了通知消息码,参数id 是控件的ID,第三个参数则是消息处理

    函数名。消息处理函数应该按下面的形式声明,其中参数pNotifyStruct 指向NMHDR 及其扩

    充结构,参数result 指向一个处理结果:

    afx_msg voidcommberFxn(NMHDR* pNotifyStruct, LRESULT * result);

    利用ClassWizard 可以很方便地加入WM_NOTIFY 消息映shè及其处理函数,一个典型的

    WM_NOTIFY 消息映shè如下,其中LVN_KEYDOWN 是IDC_LIST1 列表视图控件发出的通

    知消息:

    ON_NOTIFY(LVN_KEYDOWN, IDC_LIST1,OnKeydownList1)

    消息处理函数OnKeydownList1 的定义如下:

    void CMyDlg::OnKeydownList1(NMHDR* pNMHDR, LRESULT* pResult)

    {

    LV_KEYDOWN* pLVKeyDow = (LV_KEYDOWN*)pNMHDR;

    // TODO: Add your control notification handler

    // cod
上一页 目录 下一页