【问题标题】:C++ Create popup windowC++ 创建弹出窗口
【发布时间】:2014-08-15 16:03:04
【问题描述】:

我想在我点击位于我的程序主窗口上的按钮时出现一个弹出窗口。我到处寻找弹出窗口示例,大多数答案只是向我展示了如何制作一个窗口,但我的应用程序中已经有一个主窗口。

基本上,我遇到的困难是知道将新窗口类和弹出窗口的代码放在哪里(因为我希望弹出窗口具有与主窗口不同的属性)。它应该也出现在 WinMain 函数中,还是应该出现在 CALLBACK WndProcedure 部分的其中一种情况中?

我的窗口的一些代码是:

WNDCLASSEX wc;
HWND hwnd;
MSG Msg;

wc.cbSize        = sizeof(WNDCLASSEX);
wc.style         = 0;
wc.lpfnWndProc   = WndProc;
wc.cbClsExtra    = 0;
wc.cbWndExtra    = 0;
wc.hInstance     = hInstance;
wc.hIcon         = LoadIcon(NULL, IDI_APPLICATION);
wc.hCursor       = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
wc.lpszMenuName  = NULL;
wc.lpszClassName = g_szClassName;
wc.hIconSm       = LoadIcon(NULL, IDI_APPLICATION);

if(!RegisterClassEx(&wc))
{
    MessageBox(NULL, "Window Registration Failed!", "Error!",
        MB_ICONEXCLAMATION | MB_OK);
    return 0;
}

hwnd = CreateWindowEx(
    WS_EX_CLIENTEDGE,
    g_szClassName,
    "The title of my window",
    WS_OVERLAPPEDWINDOW,
    CW_USEDEFAULT, CW_USEDEFAULT, 240, 120,
    NULL, NULL, hInstance, NULL);

if(hwnd == NULL)
{
    MessageBox(NULL, "Window Creation Failed!", "Error!",
        MB_ICONEXCLAMATION | MB_OK);
    return 0;
}

ShowWindow(hwnd, nCmdShow);
UpdateWindow(hwnd);

我只是不知道该放在哪里...应该放在按下按钮时激活的代码中,还是应该留在WinMain函数中,以及其他窗口的信息?

希望你能理解我的困境,我对编程有点陌生。

【问题讨论】:

    标签: c++ api popup window


    【解决方案1】:

    在 main() 中注册窗口和主窗口。并且在 WndProc 的 case 语句中调用 CreateWindowEx()。

    但我不知道如何制作弹出动画。我可以想象代码应该放在 WM_CREATE 的某个地方,但这我不知道。

    如果您只是指另一个窗口,例如设置窗口,您应该使用 DialogBoxes。

    附:如果你是俄罗斯人,那么我强烈推荐 Yuri Shchupak 的“Win32 API。有效的应用程序开发”一书

    【讨论】:

    • 感谢您的回复,但我不想制作菜单。我只是想制作一个弹出窗口,稍后将显示我需要的任何信息。我遇到的问题是......我不确定我应该在哪里编写代码。就像我理解的那样,我需要将 CreateWindowEx() 放在我的 windProc 的 case 语句中,但是应该在哪里编写弹出窗口的窗口类的代码,以及我应该何时注册它?所有这些都应该发生在 windProc 案例语句中,还是应该在程序开始时就完成?
    • @rsthegreat12 哦 ****!!弹出窗口 xD 是一个复杂的问题:) 我认为您需要在 main() 处注册窗口和主窗口。并且在 WndProc 的 case 语句中调用 CreateWindowEx(),但我不知道如何制作弹出动画。我可以想象代码应该放在 WM_CREATE 的某个地方,但这我不知道。通常对于其他窗口使用 DialogBoxes。
    • 呵呵,好的,感谢您的反馈。我的意思是我不相信它应该那么复杂,因为我总是使用带有弹出窗口的程序,但是我已经有一段时间没有真正在网上找到答案了,所以有点令人困惑:)。
    【解决方案2】:

    应该在处理按钮单击的 wndProc 中的 case 语句中创建新窗口。

    【讨论】:

    • 好的,我会在case语句中调用CreateWindowEx函数,完美。窗口类的创建和窗口类的注册是否也应该发生在那个case语句中,还是应该发生在WinMain函数中? (或其他地方?)
    • 嗨,斯科特,我尝试制作一个弹出窗口,但我正在制作一个新窗口弹出窗口,它是我的主程序窗口的副本。你能看到那里的代码有什么问题吗?这是代码:stackoverflow.com/questions/25331543/…
    猜你喜欢
    • 2021-10-07
    • 2011-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-28
    • 1970-01-01
    • 2014-05-26
    相关资源
    最近更新 更多