在 class 的构造函数中使用 WinAPI 创建 window?

Creating a window with WinAPI in constructor of class?

我正在关注 this tutorial 如何在 C++ 中使用 WinAPI 创建 window,我想知道我是否可以创建 window 来自 class 的构造函数,而不是使用

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

方法,这样我就可以从程序的主 class 调用自定义 class Window 的构造函数,输入想要的大小、标题等并使用它作为我的 window 的参考,就像 java 中的 JFrame,这样我就可以隐藏它,在上面渲染东西等

如果这不可能,是否有任何其他解决方案可以使它以类似的方式工作?

您的 JFrame 示例告诉我您正在寻找一种通过构建 Window-Object.

来创建 Window 的方法

WinMain 不会创建 Window 它只是 main().

的 Windows' 版本

Window 是通过调用程序中其他地方的 CreateWindow()CreateWindowEx() 创建的。

base-Winapi 只提供了这个功能(它是为了从C 使用),但是有MFC Wrappers。例如。 CWnd 表示一个 Window-Object (msdn)

您的入口点永远不能是成员函数,但您可以编写面向对象的 GUI 代码。只需 WinMain 创建您的 main-window 对象,让其他一切从那里发生。

Raymond Chen 有一个很棒的C++ version of a GUI scratch program,设计为面向对象的 Win32 GUI 的起点。

正如您在他的 WinMain 中看到的那样,UI 小部件的创建委托给了 RootWindow class。

int PASCAL
WinMain(HINSTANCE hinst, HINSTANCE, LPSTR, int nShowCmd)
{
 g_hinst = hinst;

 if (SUCCEEDED(CoInitialize(NULL))) {
  InitCommonControls();

  RootWindow *prw = RootWindow::Create();
  if (prw) {
   ShowWindow(prw->GetHWND(), nShowCmd);
   MSG msg;
   while (GetMessage(&msg, NULL, 0, 0)) {
    TranslateMessage(&msg);
    DispatchMessage(&msg);
   }
  }
  CoUninitialize();
 }
 return 0;
}