【问题标题】:Creating a separate window against each click on push button为每次单击按钮创建一个单独的窗口
【发布时间】:2013-07-11 07:36:38
【问题描述】:

我正在开发 Windows GUI 应用程序。我的窗口上有 20 个按钮。每次单击按钮时,我都想打开一个新窗口来显示一些信息。它可以是任何可以显示一些信息的东西,但由于我对这一切都很陌生,而且我不想尝试任何复杂的东西,所以我决定采用针对每个按钮单击创建一个弹出窗口的想法。

现在我面临的问题是,既然有 20 个不同的窗口,我需要创建 20 个不同的窗口回调函数吗?虽然弹出窗口中只有一个控件,即关闭标志,但即使如此,我也需要一个 CALLBACK 功能。

我一直在尝试这个,但现在这个想法看起来毫无意义。有没有其他选项可以实现所需的功能?

等待帮助。

【问题讨论】:

    标签: windows visual-studio-2010 winapi button window


    【解决方案1】:

    如果所有窗口的行为方式都相同,那么您可以创建一个供所有弹出窗口共享的 window procedure(您调用的 CALLBACK 函数)。

    窗口过程不必对单个窗口是唯一的,但如果多个窗口共享同一个窗口过程,它们将对它们收到的所有消息做出相同的反应。

    例如:

    // Message procedure for all pop-up windows.
    LRESULT CALLBACK MyPopupWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
    { 
        switch (msg)
        { 
            // handle any messages you want here in order to
            //   customize the behavior of your pop-up window
        } 
        return DefWindowProc(hwnd, msg, wParam, lParam);
    }
    

    在为弹出窗口注册窗口类时指定指向MyPopupWndProc函数的指针(使用RegisterClassEx函数),然后在调用@987654328时传递注册窗口类的名称@ 创建/显示一个弹出窗口,只要单击主窗口上的一个按钮。

    当然,如果您只是为了测试目的而想要一些简单的东西,请记住您可以随时调用 MessageBox 函数!无需窗口程序或课程注册。

    【讨论】:

    • +1 为答案。有没有像 MessageBox() 这样简单的方法,我也可以通过它接受输入? (因为我认为我不能使用 MessageBox 接受输入)
    • @Ayesha 不,没有内置的输入方式,MessageBox 只显示静态文本。但是,您可以创建一个对话框资源(指令here),然后使用DialogBox 函数显示它。您仍然必须提供一个窗口过程回调函数(WindowProc,尽管在这种情况下它通常称为 DialogProc),但您不必手动创建所有控制窗口,因为它们是模板的一部分。
    • 真的很有帮助。非常感谢:)
    • 真的很有帮助。非常感谢:)
    猜你喜欢
    • 1970-01-01
    • 2019-10-02
    • 1970-01-01
    • 1970-01-01
    • 2013-08-22
    • 2014-01-26
    • 2014-09-13
    • 1970-01-01
    • 2018-10-29
    相关资源
    最近更新 更多