Pos*_*ger 0 c c++ windows getch createwindow
当我使用该CreateWindow()函数在 C 中创建一个窗口时 ,它运行良好,它会立即消失,所以我使用该getch()函数尝试解决问题,但它不起作用。窗口不显示按钮,并崩溃。
但是当我使用MessageBox()而不是 时getch(),它会保持正常运行。我试图弄清楚为什么会发生这种情况。
我尝试了很多东西,比如一起使用MessageBox()和getch()一起使用,使用getch()before 和 after ShowWindow(),但每次它都会给我一些有趣的结果,但不是窗口的正常功能。
有效的代码:
#include <windows.h>
int _stdcall WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdLine, int nCmdShow)
{
HWND h;
HINSTANCE i;
h = CreateWindow("Button", "XYZ", WS_OVERLAPPEDWINDOW, 15, 20, 250, 200, 0, 0, i, 0);
ShowWindow(h, nCmdShow);
MessageBox(0, "Stop", "Wait", MB_OK);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
不起作用的代码:
#include <windows.h>
int _stdcall WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdLine, int nCmdShow)
{
HWND h;
HINSTANCE i;
h = CreateWindow("Button", "XYZ", WS_OVERLAPPEDWINDOW, 15, 20, 250, 200, 0, 0, i, 0);
ShowWindow(h, nCmdShow);
getch();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我想知道这个错误的原因。我认为这是因为getch()是 DOS 功能,但编译器至少应该显示警告。
这段代码没有崩溃。
您的getch()示例只是缺少为窗口提供服务所需的消息循环,并且getch()在非控制台应用程序中也毫无意义。所以你WinMain()在显示按钮窗口后立即退出。
而您的MessageBox()示例有一个MessageBox()持续WinMain()运行的消息循环(在其内部),以及按钮窗口处理 UI 消息,直到MessageBox对话框关闭。
此外,尝试将按钮显示为它自己的重叠窗口是没有意义的。您应该注册并创建一个单独的重叠窗口,然后将按钮创建为子项。按钮上的用户操作会发送到按钮的父窗口,因此您需要为其创建一个父窗口。