WM_NOTIFY 消息
当事件发生或控件需要一些信息时,由公共控件发送到其父窗口。
-
wParam
-
发送消息的公共控件的标识符。 不保证此标识符是唯一的。 应用程序应使用 NMHDR 结构的 hwndFrom 或 idFrom 成员 (作为 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 和 Unicode 格式提供。 发送 WM_NOTIFY 消息的窗口使用 WM_NOTIFYFORMAT 消息来确定应使用哪种格式。 有关进一步的讨论 ,请参阅WM_NOTIFYFORMAT 。
要求 | 值 |
---|---|
最低受支持的客户端 |
Windows Vista [仅限桌面应用] |
最低受支持的服务器 |
Windows Server 2003 [仅限桌面应用] |
标头 |
|