65.9K
CodeProject 正在变化。 阅读更多。
Home

无资源对话框

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.90/5 (16投票s)

2004 年 8 月 16 日

CPOL

2分钟阅读

viewsIcon

93166

downloadIcon

1160

如何使用 Trilobyte-Solutions.nl 的无资源对话框工具包在 WTL 中创建无资源对话框。

引言

如果你设计了一个对话框并想与其他人分享,就会出现一个问题。例如:我正在考虑创建一个典型的“每日提示”对话框,能够读取 XML 文件。我想与任何需要它的人分享。问题是:如何在不处理多个资源脚本的情况下分发代码?我在互联网上搜索了一段时间,找到了一些关于 Windows API 的信息。这相当简单,但有一些需要注意的讨厌的地方。例如,所有数据都必须对齐到 DWORD 边界。我发现没有对话框编辑器很难创建对话框,所以我编写了一个小工具,能够解析资源脚本并从中导出对话框。我将这两件事放在一起,无资源对话框工具包就诞生了。

使用代码

我花了几小时创建文档和教程,所以我想向你展示一个演示代码如何工作的类。

class CSampleDlg: public CResourcelessDlg<CSampleDlg>, 
  public CWinDataExchange<CSampleDlg>
{
public:
  BEGIN_MSG_MAP(CSampleDlg)
    MSG_WM_INITDIALOG(OnInitDialog)
    CHAIN_MSG_MAP(CResourcelessDlg<CSampleDlg>)
  END_MSG_MAP()
  BEGIN_DDX_MAP(CSampleDlg)
  END_DDX_MAP()

  // Dialog function

  void CreateDlg()
  {
    CreateDlgTemplate("About", DS_SETFONT|DS_MODALFRAME
      |WS_CAPTION|WS_SYSMENU, 
      0, 0, 0, 186, 138, 8, "MS Sans Serif", "", "");
    AddStatic("Dialog Extractor v1.0", 0, 0, 60, 20, 67, 8, IDC_STATIC);
    AddStatic(IDR_MAINFRAME, SS_ICON, 0, 20, 20, 20, 20, 18);
    AddButton("", 0 | BS_GROUPBOX, 0, 7, 7, 172, 103, IDC_STATIC);
    AddStatic("(c) Copyright 2004", 0, 0, 60, 30, 58, 8, IDC_STATIC);
    AddStatic("By: Trilobyte-Solutions", 0, 0, 60, 41, 70, 8, IDC_STATIC);
    AddStatic("Updates and additional information about"
      " this program can be found at 
      the Trilobyte Solutions website.", 0, 0, 60, 59, 113, 26,  IDC_STATIC);
    AddStatic("www.Trilobyte-Solutions.nl", 0, 0, 60, 94, 84, 8, IDC_STATIC);
    AddButton("OK", 0|BS_DEFPUSHBUTTON, 0, 67, 117, 50, 14, IDOK);
  }
  LRESULT  OnInitDialog(HWND, LPARAM)
  {
    DoDataExchange(false);

    CenterWindow(GetParent());
    return IDOK;
  }
};
正如你所见,使用这段代码非常简单。更多信息可以在工具包内的文档和教程中找到。

如果你想了解其底层技术,请在 MSDN 中查找以下项目:DLGTEMPLATEDLGITEMTEMPLATECreateDialogIndirectParamDialogBoxIndirectParam。如果收到足够多的请求,我会写一篇关于 Windows 对话框 API 的文章。

每日提示对话框

我在本文前面提到的对话框尚未完成。下周末它可能就准备好了。

历史

代码版本为 1.0。工具版本为 1.1,发现了一些错误。

附加信息

有关更多信息、问题和错误报告,请访问我的网站:http://www.trilobyte-solutions.nl/,或通过 bertwillems@trilobyte-solutions.nl 与我联系。

© . All rights reserved.