在创建窗口时:
1)我们为什么要注册窗口类?CreateWindow
如何理解我们想要的类?
WNDCLASS wc;
RegisterClass(&wc)
2)我们为什么要使用这个循环:
MSG msg;
While(GetMessage(&msg,0,0,0))
{
TranslateMessage(&msg);
DispathMessage(&msg);
}
开始时没有消息,所以我们不会进入循环,我们将退出WinMain
函数。
答案 0 :(得分:7)
您注册窗口类,因为这是系统的工作方式。将其视为定义类型。 GetMessage阻塞,直到消息到达队列。
你真的需要阅读Charles Petzold的书Programming Windows
答案 1 :(得分:2)
原则上,当您的程序启动时,您告诉Windows您的窗口/程序已准备好接受消息 - 正在注册它。此后的消息循环是与用户(和系统)的交互发生的地方。每当需要一些交互时,它就通过消息(或事件)传递给应用程序。在消息循环中,您可以定义如何对不同消息做出反应的行为。
除了UI消息之外,还有其他消息,如计时器事件或消息系统相关消息。这些也可以处理。
答案 2 :(得分:1)
您对GetMessage
做出了错误的假设。你声明如果没有消息,“我们将不会进入循环”。这意味着如果没有消息,则假设GetMessage
返回false。
事实上,GetMessage
仅在有WM_QUIT
消息时才返回false。如果没有消息,则GetMessage
不会返回。它只是等待消息到达。这对许多程序来说都很有意义。如果没有输入,则无需执行任何操作,程序也不需要CPU时间。
某些程序需要一些CPU时间。这就是为什么他们使用WM_TIMER
:以便GetMessage
将控制权返回给您的代码。