WM

    技术2022-05-20  41

          控件通知消息,是指这样一种消息,一个窗口内的控件发生了一些事情,需要通知父窗口。当用户与控件窗口交互时,控件通知消息就会从控件窗口发送到它的主窗口,这种消息一般不是为了处理用户命令,而是为了让主窗口能够改变控件。WM_COMMANDWM_NOTIFY都是控件通知消息。

         在Win32中,引进了NMHDR结构。这个结构的引进把消息统一起来,利用它可以传递各种复杂的消息。

        SendMessage(WM_NOTIFY, (WPARAM)控件ID, LPARAM&(NMHDR结构))NMHDR结构内容如下:NMHDR{

    HWND hWndFrom;//相当于原WM_COMMAND消息的lParam

    UINT idFrom; //相当于原WM_COMMAND消息的wParam(LOWORD)

    UINT code; //相当于原WM_COMMAND消息的wParam(HIWORD)通知码

     

    }

     

       SendMessage(WM_COMMAND,(WPARAM)控件ID,(LPARAM)消息类型)

     

          WM_NOTIFYWM_COMMAND相比,是一种更灵活的消息格式,lParam中放的是一个称为NMHDR结构的指针。在wParam中放的则是控件的ID。最初Windows 3.x就有的控件,如EditComboListButton等,发送的控件通知消息的格式是WM_COMMAND;而后期的Win32通用控件,如List ViewImage ListIP AddressTree ViewToolbar等,发送的都是WM_NOTIFY控件通知消息。

    举例:WM_NOTIFY消息:对CTabCtrl控件进行处理

           NHMDR nmhdr; nmhdr.hWndForm = GetDlgItem(IDC_TAB1)->m_hWnd; nmhdr.idForm = IDC_TAB1; nmhdr.code = TCN_SELECHANGE; SendMessage(WM_NOTIFY,(WPRARM)IDC_TAB1,(LPARAM)&nmhdr)

    举例:WM_COMMAND消息,IDC_COMBO1

    wParam=IDC_COMBO1; wParam=wParam|(GBN_SELECHANGE<<16); lParam =(WPARAM)(GetDlgItem(IDC_COMBO1)->m_hWnd); SendMessage(WM_COMMAND,wParam,lParam);


    最新回复(0)