C++ 是否可以向Win32 GUI中的WindowProcedure发送自定义消息?
如果我问了一些可笑的问题(我是win32 noob),我很抱歉,但我想知道这是否会发生。我们是否可以根据自己的情况更改消息,并在开关(消息)中按照代码处理它C++ 是否可以向Win32 GUI中的WindowProcedure发送自定义消息?,c++,winapi,win32gui,C++,Winapi,Win32gui,如果我问了一些可笑的问题(我是win32 noob),我很抱歉,但我想知道这是否会发生。我们是否可以根据自己的情况更改消息,并在开关(消息)中按照代码处理它 LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { switch (message){ case WM_DESTROY: PostQui
LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message){
case WM_DESTROY:
PostQuitMessage(0);
break;
case FindWindowA(NULL,"Task Manager"): // like this
//do something
break;
default:
return DefWindowProc(hwnd,message,wParam,lParam);
}
return 0;
}
您可以定义新消息:
#define WM_MY_MSG (WM_USER+0)
或
注意,WM_USER+x范围内的消息对于窗口类是私有的,而应用程序私有消息则需要位于WM_APP+x范围内。
然后使用SendMessage
或PostMessage
API函数将此消息发送到具有已知处理程序(hwnd)的窗口。
并进一步处理它:
LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message){
case WM_DESTROY:
PostQuitMessage(0);
break;
case WM_MY_MSG: // like this
// Do something, for example FindWindowA(NULL,"Task Manager")
break;
default:
return DefWindowProc(hwnd,message,wParam,lParam);
}
return 0;
}
案例FindWindowA
没有意义。尽管您可以对自定义消息使用WM_用户消息或类似消息。switch语句中的大小写值必须是常量表达式。函数的返回值不是。因此,不,您不能使用类似此代码的任何内容(即使您将FindWindowA(…)
替换为返回消息标识符的内容)。WM\u USER+x
范围内的消息对window类是私有的。应用程序私人消息需要在WM_APP+x
范围内。注册的消息是公共应用程序消息。@IInspectable是,它是正确的。已经在帖子中添加了更新。这没有多大帮助。窗口类私有消息只有在它们是窗口类公共接口(如Windows的公共控件)的一部分时才能安全地发送。另一方面,应用程序私有消息是真正私有的。向既没有记录顶层窗口类也没有记录应用程序私有消息的应用程序(如tastmanager)发送任何一种类型都将失败。在某种程度上,这通常是不可诊断的。那么,我如何才能持续地将信息发送到窗口?什么是“持续”呢?循环?您可以随时向窗口发送消息(使用SendMessage
或PostMessage
功能)。
LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message){
case WM_DESTROY:
PostQuitMessage(0);
break;
case WM_MY_MSG: // like this
// Do something, for example FindWindowA(NULL,"Task Manager")
break;
default:
return DefWindowProc(hwnd,message,wParam,lParam);
}
return 0;
}