C++ WinAPI如果我没有';t翻译和发送未经处理的消息
关于下一个示例:C++ WinAPI如果我没有';t翻译和发送未经处理的消息,c++,winapi,C++,Winapi,关于下一个示例: BOOL bRet; while( (bRet = GetMessage( &msg, hWnd, 0, 0 )) != 0) { if (bRet == -1) { // handle the error and possibly exit } else { TranslateMessage(&msg); DispatchMessage(&msg);
BOOL bRet;
while( (bRet = GetMessage( &msg, hWnd, 0, 0 )) != 0)
{
if (bRet == -1)
{
// handle the error and possibly exit
}
else
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
如果我只是忽略程序主循环中未处理的消息,然后继续呢
有什么风险吗?如果我不翻译,Windows会抱怨/泄漏内存/占用资源的时间过长吗?如果我不需要/不想处理此消息,Windows会发送此消息吗
TranslateMessage功能与键盘输入相关。信息技术
将击键(向下键、向上键)转换为字符。你没有
真的必须知道这个函数是如何工作的;别忘了打电话
在发送消息之前。指向MSDN文档的链接将提供
如果你好奇的话,你可以提供更多的信息
DispatchMessage函数告诉操作系统调用
作为消息目标的窗口的窗口过程。在里面
换言之,操作系统在其窗口中查找窗口句柄
窗口的表,查找与
窗口,并调用该函数
如果我不翻译+分派,loop将无法处理键盘输入和窗口消息。例如,无法移动、重新绘制或关闭窗口。这与内存泄漏无关
话虽如此,标准消息循环应该是:
while (GetMessage(&msg, NULL, 0, 0))
{
if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
加速器在这里很重要,也被称为“快捷键”。无论哪个窗口具有焦点,您的程序都希望响应它们。Like F1显示程序的帮助文件,无论哪个控件具有焦点。您不希望必须编写将每个控件窗口子类化以识别F1的代码
参考:根据
TranslateMessage功能与键盘输入相关。信息技术
将击键(向下键、向上键)转换为字符。你没有
真的必须知道这个函数是如何工作的;别忘了打电话
在发送消息之前。指向MSDN文档的链接将提供
如果你好奇的话,你可以提供更多的信息
DispatchMessage函数告诉操作系统调用
作为消息目标的窗口的窗口过程。在里面
换言之,操作系统在其窗口中查找窗口句柄
窗口的表,查找与
窗口,并调用该函数
如果我不翻译+分派,loop将无法处理键盘输入和窗口消息。例如,无法移动、重新绘制或关闭窗口。这与内存泄漏无关
话虽如此,标准消息循环应该是:
while (GetMessage(&msg, NULL, 0, 0))
{
if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
加速器在这里很重要,也被称为“快捷键”。无论哪个窗口具有焦点,您的程序都希望响应它们。Like F1显示程序的帮助文件,无论哪个控件具有焦点。您不希望必须编写将每个控件窗口子类化以识别F1的代码
请参阅:整个UI(和其他功能)都是基于消息的-如果不处理消息,将不会发生任何事情;如果你不想处理消息,为什么还要运行消息循环?我现在在这个循环中处理2-3个按钮,我只是想知道其他人会发生什么,我会通过“触摸”这些消息来干扰其他程序吗?…其他程序不,这是您的消息循环。@IInspectable我将“未处理的消息”解释为“程序未提供处理程序的消息”,将“忽略”解释为“不调用
TranslateMessage
和DispatchMessage
”。所以真正的问题是,如果TranslateMessage
和DispatchMessage
被注释掉了提供的代码示例,会发生什么?整个UI(和其他功能)都是基于消息的-如果不处理消息,什么都不会发生;如果你不想处理消息,为什么还要运行消息循环?我现在在这个循环中处理2-3个按钮,我只是想知道其他人会发生什么,我会通过“触摸”这些消息来干扰其他程序吗?…其他程序不,这是您的消息循环。@IInspectable我将“未处理的消息”解释为“程序未提供处理程序的消息”,将“忽略”解释为“不调用TranslateMessage
和DispatchMessage
”。因此,真正的问题是,如果TranslateMessage
和DispatchMessage
被注释掉了提供的代码示例,会发生什么?感谢您提供了有用的解释感谢您提供了有用的解释