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
被注释掉了提供的代码示例,会发生什么?感谢您提供了有用的解释感谢您提供了有用的解释