gpt4 book ai didi

c++ - Windowproc 如何返回到我的 GetMessage() 循环?

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

我一直在学习 directx 编程教程,它从学习如何对窗口进行编程开始。

到目前为止,我已经有了这个,它创建了一个空白窗口:

#if       _WIN32_WINNT < 0x0500
#undef _WIN32_WINNT
#define _WIN32_WINNT 0x0500
#endif

#define _UNICODE
#define UNICODE

#include <windows.h>
#include <windowsx.h>
#include <iostream>

using namespace std;

LRESULT CALLBACK WindowProc(HWND hWnd,
UINT message,
WPARAM wParam,
LPARAM lParam);

int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow){

HWND hWnd;

WNDCLASSEX wc;

ZeroMemory(&wc, sizeof(WNDCLASSEX));

wc.cbSize = sizeof(WNDCLASSEX);
wc.style = CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc = WindowProc;
wc.hInstance = hInstance;
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = (HBRUSH)COLOR_WINDOW;
wc.lpszClassName = L"WindowClass1";

RegisterClassEx(&wc);

hWnd = CreateWindowEx(NULL,
L"WindowCLass1",
L"Window Program",
WS_OVERLAPPEDWINDOW,
300,
300,
500,
400,
NULL,
NULL,
hInstance,
NULL);

ShowWindow(hWnd, nCmdShow);

//ShowWindow( GetConsoleWindow(), SW_HIDE );

MSG msg;

while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);

DispatchMessage(&msg);
}

return msg.wParam;

}

LRESULT CALLBACK WindowProc(HWND hWnd,
UINT message,
WPARAM wParam,
LPARAM lParam)
{
switch(message)
{
case WM_DESTROY:
{
//ShowWindow( GetConsoleWindow(), SW_RESTORE );
PostQuitMessage(0);
return 0;
}break;

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

到目前为止我理解它,直到 getmessage 循环。我知道它接收一个 windows 消息并将其转换为可读消息并将其发送给 window proc 函数进行处理。但是,我不明白 window proc 函数如何不结束程序,以及在输入输入后程序如何不简单地关闭。如果代码是从上到下执行的,winmain在windowproc之前结束,为什么一个command被windowproc处理到be all and end all然后返回getmessage?

最佳答案

您的消息循环调用 DispatchMessage。这会调用您的窗口过程。然后您的窗口过程返回,DispatchMessage 也返回,并且您的循环循环。

好吧,这就是发布消息的工作原理。对于从其他线程发送的消息,调用窗口过程的是 GetMessage(或其他一些未出现在您的代码中但可能在默认消息处理期间使用的等待函数)。它实际上有一个自己的循环,调用窗口过程直到它找到一个发布的消息。然后它返回,以便您可以检查消息并调用 DispatchMessage

此外,GetMessageDispatchMessage 可以调用许多不同的窗口过程,具体取决于消息发送或发布到哪个窗口。与您注册的窗口类关联的窗口会调用您的窗口过程,因此基本上所有消息都会发送到您的主窗口。

关于c++ - Windowproc 如何返回到我的 GetMessage() 循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28621024/

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