在 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;
}
我正在关注 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()
.
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;
}