您好我正在尝试在 Win32 环境中创建一个包含多个窗口的应用程序。我怎么做?我在网上找到的所有 Win32 教程都只展示了如何管理一个窗口。如何创建第二个窗口,以及如何一起处理它们的消息?(我知道我应该只有一个消息循环)
谢谢!
担
您的消息循环为在当前线程上创建的所有窗口获取并分派消息。
像这样一个简单的消息循环就足够了。
MSG msg;
while(GetMessage(&msg,0,0,0,0)>0)
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
否则,要在线程上创建窗口,您只需根据需要/需要多次调用 CreateWindow(...) 来构建您的 UI。
警告:在许多简单程序中看到的常见模式是WM_DESTROY
在 WindowProc 中处理调用 PostQuitMessage()。PostQuitMessage() 向线程发送一条消息,告诉消息循环退出。这将终止应用程序,破坏线程上的所有窗口。如果您有一个主应用程序窗口,如果关闭,应该退出应用程序,那么只有该窗口应该调用 PostQuitMessage。如果您有两个(或更多)可以按任意顺序关闭的窗口,那么您需要保持打开窗口的计数,并且仅在用户关闭最后一个窗口时才调用 PostQuitMessage。
实际上,任何演示对话框的示例程序也演示了如何在线程上创建多个窗口,因为对话框上的每个控件也是具有 windowproc 的窗口。
许多新的 Windows 开发人员陷入了试图为特定窗口过滤消息的陷阱:
while(GetMessage(&msg,hwnd,0,0,0)...
这是错误的,因为它会阻止任何子窗口获取它们的消息。许多实用程序库将在线程上创建隐藏窗口并使用它们从其他进程/线程接收消息 - 仅过滤应用程序窗口的消息会导致消息队列增长,并且其他事情会以奇怪的不寻常方式失败. 将 NULL 传递给 hwnd,直到您完全理解为什么您可能希望暂时过滤特定窗口的消息。
所以你要创建一个子窗口对吗?您必须决定要创建哪种类型的窗口——它们有两种类型:模态(也称为对话框)和非模态。
只需寻找 CreateDialog、DialogBox 和 CreateWindow 函数
您必须为新的模式窗口提供一个 wndproc,而无模式窗口使用与主窗口相同的 wndproc。
抱歉,如果我弄错了什么,很久以前我编写了原始 WinAPI ..