gpt4 book ai didi

c++ - WndProc 从未收到任何 WM_COMMAND 消息?

转载 作者:行者123 更新时间:2023-11-28 00:50:49 27 4
gpt4 key购买 nike

我正在 Win32 上创建一个简单的框架,但我似乎无法捕获任何 WM_COMMAND 消息。我将所有通过我的 WndProc 的消息打印到输出控制台,并且没有 WM_COMMAND 消息。我的程序由一个窗口和一个编辑框(带有“EDIT”类)组成。

这是我的临时消息循环(仅用于测试):

MSG msg;
BOOL ret;
while( ( ret = ::GetMessage( &msg, NULL, 0, 0 ) ) > 0 )
{
if(msg.hwnd == NULL)
continue;
else if(ret == -1)
break;
else {
::TranslateMessage( &msg );
::DispatchMessage( &msg );
}
}

这是 WndProc:

LRESULT CALLBACK Win32Base::GlobalWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
Win32Base *pWindow;

pWindow = reinterpret_cast<Win32Base*>( GetWindowLong( hWnd, GWL_USERDATA ) );
if( pWindow ) {
MSG msgdata;
msgdata.hwnd = hWnd;
msgdata.message = msg;
msgdata.wParam = wParam;
msgdata.lParam = lParam;

return pWindow->OnMessage( msgdata );
}

return DefWindowProc(hWnd, msg, wParam, lParam);
}

我也在继承编辑框。我可以捕获它的 WM_CHAR 消息等,但是没有 WM_COMMAND 消息(但是,我认为它们不应该存在)。

我觉得问题可能出在我处理育儿问题的方式上。我已经添加了 Windows 父级的动态更改,并且在创建控件时,它可能还没有父级。因此,如果我使用 WS_CHILD 创建控件,它将导致错误,因为没有父控件。因此,当我分配父级时,我还附加了 WS_CHILD 样式(或者删除它,如果我要删除父级)。这是一个好习惯吗?也许它会阻止主窗口接收编辑框的 WM_COMMAND 消息?

此外,编辑框在我输入时不会自行重绘,我必须强制它重绘,这非常慢......

最佳答案

编辑控件在创建时缓存其父窗口并且从不更新它,因此即使您重新设置编辑控件的父级,它仍会向原始父级发送通知消息。

一种解决方案是创建一个托管编辑控件的虚拟“包装器”窗口类,并将从编辑控件发送到其父级的通知消息转发。

关于c++ - WndProc 从未收到任何 WM_COMMAND 消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14176568/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com