我正在使用 WIN API 编写一些库。我在从父窗口 WinProc 函数中的 WC_TABCONTROL 类窗口接收 WM_NOTIFY 消息时遇到问题。我通过“调试打印”检查,孩子的父母设置正确。我收到 WM_COMMAND 消息并在某些功能中正确。我不知道这可能是什么原因。窗口中的选项卡控件看起来不错,并通过可视选项卡项选择更改响应鼠标单击。
例如,当我单击未选择的选项卡时,我收到以下消息http://pastie.org/6571509
你可以在这里查看我的 WIN Proc 函数http://goo.gl/knJ4Z,第 346 行。
创建选项卡控件:
ps_ext->d_handle = CreateWindowExW(0, // no extended styles
WC_TABCONTROL, // class name
L"", // default text
WS_CHILD | WS_CLIPSIBLINGS | WS_VISIBLE, // overlapped window
CW_USEDEFAULT, // default horizontal position
CW_USEDEFAULT, // default vertical position
CW_USEDEFAULT, // default width
CW_USEDEFAULT, // default height
HWND_MESSAGE, // no parent or owner window
(HMENU)WINSEM_Window_NextComponentID(), // class menu used
WINSEM_Window_hInstance,// instance handle
(LPVOID)&ps_ext->s_window); // no window creation data
之后,通过 SetParent 函数调用设置正确的父级。选项卡通过以下方式调整大小:
uFlags = SWP_NOOWNERZORDER | SWP_NOZORDER;
if (SetWindowPos(ps_window->d_handle, NULL, s0_x, s0_y, s0_w, s0_h, uFlags)==0)
{
DWORD dErr;
dErr = GetLastError();
HaveWinLastError_Error(ps_pack, WINSEM_WINDOW_fromerror_windowPos+0, dErr, dErr);
break;
}
并且显示窗口和单击选项卡控件不会生成父窗口 winProc 函数接收到的 WM_NOTIFY 消息。
这是我的消息接收代码:
bRet = PeekMessage( &msg, NULL, 0, 0, PM_REMOVE);
if (bRet==FALSE)
{
// no messages received
}
else
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
有人对这个问题有任何想法吗?感谢您的想法和时间。