0

这个网站上,在“编辑控件”标题下,有几行这样的代码..

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教程中,它展示了如何使用资源文件制作菜单,以及如何描述对话框等,但我似乎无法使用资源文件在主(父)窗口上放置任何控件??

例如我有以下 .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?.

我如何描述主窗口而不是动态创建东西?有没有某种关键字?

4

5 回答 5

3

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

  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

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

于 2010-11-30T10:07:10.247 回答
2

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

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

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

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

未提及主窗口。

于 2010-11-30T10:15:43.070 回答
2

在 API 级别,考虑像CreateDialog.

它并不比这更复杂。

虽然作为主窗口的对话框有一些问题,尤其是在 MFC 中(它特别对待它)。

干杯&hth.,

于 2010-11-30T10:17:24.880 回答
1

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

于 2010-11-30T10:47:08.840 回答
1

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

于 2011-02-27T14:24:22.170 回答