设计窗口过程

【勇芳软件工作室】汉化HomePreviousNext

以下示例显示了典型窗口过程的结构。窗口过程使用开关语句中的消息参数,其中各个消息由单独的案件语句处理。请注意,每个案例都会为每封邮件返回一个特定的值。对于不处理的消息,窗口过程调用DefWindowProc功能。

LRESULT CALLBACK MainWndProc(

HWND hwnd, //窗口的句柄

UINT uMsg, //消息标识符fr

WPARAM wParam, //第一个消息参数

LPARAM lParam) //第二个消息参数

{

开关(uMsg)

{

case WM_CREATE:

//初始化窗口。

return 0;

case WM_PAINT:

//绘制窗口的客户区。

return 0;

case WM_SIZE:

//设置窗口的大小和位置。

return 0;

case WM_DESTROY:

//清理窗口特定的数据对象。

return 0;

//

//处理其他消息。

//

默认:

return DefWindowProc(hwnd, uMsg, wParam, lParam);

}

return 0;

}

创建窗口之后发送WM_NCCREATE message,但是如果应用程序通过返回FALSE来响应此消息,则CreateWindowEx功能失败。您的窗口已经创建后发送WM_CREATE消息。

当您的窗口即将被销毁时,将发送WM_DESTROY消息。DestroyWindow函数负责销毁正在销毁的窗口的任何子窗口。WM_NCDESTROY消息在窗口销毁之前发送。

至少,窗口过程应该处理WM_PAINT消息来绘制自己。通常,它也应该处理鼠标和键盘消息。请参阅各个消息的描述,以确定您的窗口过程是否应该处理它们。

您的应用程序可以调用DefWindowProc功能作为处理消息的一部分。在这种情况下,应用程序可以在将消息传递给DefWindowProc之前修改消息参数,也可以在执行自己的操作后继续执行默认处理。

对话框过程接收WM_INITDIALOG消息而不是WM_CREATE消息,并且未将未处理的消息传递给DefDlgProc功能。否则,对话框过程与窗口过程完全相同。