【问题标题】:win32 resource file helpwin32资源文件帮助
【发布时间】:2010-11-30 08:46:22
【问题描述】:

this 网站上,在“Edit Control”标题下,有几行这样的代码..

case WM_CREATE:
    hwndEdit = CreateWindow(TEXT("Edit"), NULL, WS_CHILD | WS_VISIBLE | WS_BORDER,
                50, 50, 150, 20, hwnd, (HMENU) ID_EDIT,
                NULL, NULL);

    hwndButton = CreateWindow(
        TEXT("button"), TEXT("Set Title"),       
        WS_VISIBLE | WS_CHILD,  
        50, 100, 80, 25,        
        hwnd, (HMENU) ID_BUTTON, NULL, NULL);      

    break;

我知道这种创建按钮等的方法是即时完成的,但我想知道如果不这样做,您将如何做到这一点,而不是使用资源文件? 在 Forgers Win32 tutorial 中,它显示了如何使用资源文件制作菜单,以及如何描述对话框等,但我似乎无法使用资源文件在主(父)窗口上放置任何控件??

例如我有以下 .rc 文件

#include "resource.h"
ID_MENU MENU
BEGIN
    POPUP "&File"
    BEGIN
        MENUITEM "E&xit", ID_FILE_EXIT
    END
    POPUP "&About"
    BEGIN
        MENUITEM "&Information", ID_ABOUT_INFO
    END
END

ID_ABOUT_INFO DIALOG DISCARDABLE  0,0,250,250 
CAPTION "Information"
BEGIN
    CTEXT "some text",ID_BLA,15,15,144,33
END

//this is all fine but how do I decribe the main window?, instead of the menu and dialog boxes?.

如何描述主窗口而不是动态创建内容?有什么关键字吗?

【问题讨论】:

    标签: c++ winapi resource-files


    【解决方案1】:

    您可以创建一个对话框作为主窗口。

    1. 如果您在 Visual Studio 中使用 MFC,请使用项目向导创建基于对话框的应用。

      (文件 -> 新建项目 -> Visual C++ / MFC -> MFC 应用程序 -> 确定 -> 应用程序类型 -> 基于对话框。)

      然后,生成的应用程序将为您创建主对话框,并在关闭时退出。

      这里有一个这样的野兽的简单例子,包括源代码:

      http://www.pretentiousname.com/ICFRanger/index.html

    2. 如果您使用的是直接 Win32,您将使用 CreateDialogParam(或类似的)创建对话框,然后像任何其他窗口一样显示它,并运行消息循环。 (或者您可以使用 DoModal,它运行自己的消息循环,但要注意模式对话框的行为需要稍有不同,尤其是在关闭时。)

      这里有一个简单的例子,包括源代码:

      http://www.pretentiousname.com/setpoint_aon/index.html

    (这两个程序都是我编写的,但是非常简单,所以没有太多可以理解它们的作用。)

    【讨论】:

    • 文件 -> 新建项目 -> Visual C++ / MFC -> MFC 应用程序 -> 确定 -> 应用程序类型 -> 基于对话框。
    • 对,如果 sil3nt 使用 Microsoft Visual Studio。你确定他是?因为我从他身上找不到任何暗示他这样做的东西。
    • 这些天您可以将 MFC 与其他任何东西一起使用吗?我认为“如果您使用 MFC”部分很好地满足了第一个建议,如果他没有使用 MFC,则应用第二个建议。编辑以明确提及 VS,以防万一。
    • 你可能是对的。我也想到了 MFC 和 Visual Studio,但我不知道 sil3nt 是否使用它。 @sil3nt,你能启发我/我们吗?由于我被困在这上面,所以我没有阅读值得一票的第二部分。 :) 我猜资源文件不能包含除对话框之外的窗口。
    • @Leo Davidson,非常有帮助,谢谢。快速提问,我的按钮和窗口的整体风格看起来真的很win98ish,我只在运行你的程序时才看到区别。这和风格有关系吗? (例如,而不是这个 confluence.atlassian.com/download/attachments/92504215/… ,它看起来像这样
    【解决方案2】:

    TheForger 已将他的所有示例代码添加到一个 zip 文件中,您可以download them 并查看。

    您仍然需要创建窗口,TheForger 也这样做了,但是他将图标和菜单包含在 WNDCLASSEX 结构中 传递给要创建的窗口。然后通过 resouce.h 文件从资源文件(.rc 文件)中收集。

    MSDN 也有关于资源文件的部分,如您所见

    资源可以由广泛的 元素范围,包括界面 提供信息的元素 用户(例如位图、图标、 或光标);自定义资源 包含应用程序需要的数据; 使用的版本资源 设置 API;和菜单和对话框 资源。

    没有提到主窗口。

    【讨论】:

      【解决方案3】:

      在 API 级别,考虑像 CreateDialog 这样的函数。

      没有比这更复杂的了。

      虽然作为主窗口的对话框存在一些问题,尤其是在 MFC 中(对它进行了特殊处理)。

      干杯,

      【讨论】:

      • +1,虽然这会将其限制为对话框。它们的处理方式与CreateWindow[Ex] 创建的窗口不同吗?
      • @Default:如果您要在 API 级别执行此操作,请获取 Petzold 的“Programming Windows”的副本。重新不​​同的处理取决于你的意思。在 API 级别,对话框只是可以实现的一种窗口(类),您可以覆盖任何您想要的默认功能。
      • 酷。谢谢你的提示。最新版本是什么? (books.google.com 给了我一些 1999 年的东西)
      • 我想到的不同之处是,我认为他们需要以特殊方式编写 GetMessage() 循环(包括isdialogmessage
      【解决方案4】:

      你可以设计一个像对话框一样的窗口,然后把它放在你的资源文件中。然后使用 FindResource 和 LoadResource 函数来获取一个指向 DLGTEMPLATE 的指针,它包含你可以用来调整你自己窗口大小的所有对话框布局并将控件放置在您在对话框中定义的位置(尽管解释 DLGTEMPLATE 并不容易)。不要忘记释放指向 DLGTEMPLATE 的指针。

      【讨论】:

        【解决方案5】:

        使用 CreateWindow 和各种预定义的类。如果您要创建一个按钮,您将使用类“BUTTON”设置样式 WS_CHILD|WS_VISIBLE 并将窗口过程设置为 NULL。

        【讨论】:

          猜你喜欢
          • 2016-07-07
          • 1970-01-01
          • 2015-03-14
          • 1970-01-01
          • 1970-01-01
          • 2016-08-22
          • 1970-01-01
          • 2021-08-10
          • 1970-01-01
          相关资源
          最近更新 更多