为什么WNDCLASS(Windows-C)设置和使用如此?

时间:2011-02-06 00:05:49

标签: c++ winapi visual-c++

在创建窗口时:

1)我们为什么要注册窗口类?CreateWindow如何理解我们想要的类?

WNDCLASS wc;
RegisterClass(&wc)

2)我们为什么要使用这个循环:

MSG msg;
While(GetMessage(&msg,0,0,0))
{
    TranslateMessage(&msg);
    DispathMessage(&msg);
}

开始时没有消息,所以我们不会进入循环,我们将退出WinMain函数。

3 个答案:

答案 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将控制权返回给您的代码。