WM_NOTIFY - сообщение

Отправляется общим элементом управления в его родительское окно, когда произошло событие или элементу управления требуется некоторая информация.

Параметры

wParam

Идентификатор общего элемента управления, отправляющего сообщение. Этот идентификатор не гарантируется как уникальный. Приложение должно использовать элемент hwndFrom или idFrom структуры NMHDR (переданный в качестве параметра lParam ) для идентификации элемента управления.

lParam

Указатель на структуру NMHDR , содержащую код уведомления и дополнительные сведения. Для некоторых сообщений уведомлений этот параметр указывает на более крупную структуру, которая имеет структуру NMHDR в качестве первого элемента.

Возвращаемое значение

Возвращаемое значение игнорируется, за исключением сообщений с уведомлениями, в которые указано иное.

Комментарии

Назначением сообщения должен быть HWND родительского элемента управления. Это значение можно получить с помощью GetParent, как показано в следующем примере, где m_controlHwnd — это HWND самого элемента управления.

NMHDR nmh;
nmh.code = CUSTOM_SELCHANGE;    // Message type defined by control.
nmh.idFrom = GetDlgCtrlID(m_controlHwnd);
nmh.hwndFrom = m_controlHwnd;
SendMessage(GetParent(m_controlHwnd), 
    WM_NOTIFY, 
    nmh.idFrom, 
    (LPARAM)&nmh);

Приложения обрабатывают сообщение в процедуре окна родительского окна, как показано в следующем примере, который обрабатывает сообщение уведомления, отправленное пользовательским элементом управления в предыдущем примере.

INT_PTR CALLBACK DlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)
    {
    case WM_NOTIFY:
        switch (((LPNMHDR)lParam)->code)
        {
        case CUSTOM_SELCHANGE:
            if (((LPNMHDR)lParam)->idFrom == IDC_CUSTOMLISTBOX1)
            {
                ...   // Respond to message.
                return TRUE;
            }
            break; 
        ... // More cases on WM_NOTIFY switch.
        break;
        }
    ...  // More cases on message switch.
    }
    return FALSE;
}

Некоторые уведомления, в основном те, которые находятся в API в течение длительного времени, отправляются в виде WM_COMMAND сообщений. Дополнительные сведения см. в разделе Управление сообщениями.

Если обработчик сообщений находится в процедуре диалогового окна, необходимо использовать функцию SetWindowLong с DWL_MSGRESULT, чтобы задать возвращаемое значение.

В системах Windows Vista и более поздних версий сообщение WM_NOTIFY не может быть отправлено между процессами.

Многие уведомления доступны как в формате ANSI, так и в Юникоде. Окно, отправляющее WM_NOTIFY сообщение, использует WM_NOTIFYFORMAT сообщение, чтобы определить, какой формат следует использовать. Дополнительные сведения см. в разделе WM_NOTIFYFORMAT .

Требования

Требование Значение
Минимальная версия клиента
Windows Vista [только классические приложения]
Минимальная версия сервера
Windows Server 2003 [только классические приложения]
Заголовок
Winuser.h

См. также раздел

WM_NOTIFYFORMAT