【问题标题】:MFC control unique identifier at runtimeMFC 控制运行时的唯一标识符
【发布时间】:2017-03-11 01:02:49
【问题描述】:

我有一个 CDialog 与同一组控件重复 10 次。有很多逻辑,所以我将对话框重构为只有 1 个 CDialog 但重复了 10 次。

所以不是有 10 个带有 ID 的编辑框:

    IDD_DIALOG DIALOGEX 0, 0, 680, 347
    STYLE DS_SETFONT | WS_CHILD
    FONT 10, "Segoe UI", 0, 0, 0x1
    BEGIN
        EDITTEXT    IDC_EDT_NAME1,34,226,80,14,ES_AUTOHSCROLL|ES_READONLY
        ...
        EDITTEXT    IDC_EDT_NAME10,34,226,80,14,ES_AUTOHSCROLL|ES_READONLY
    END

现在我有了这个:

    IDD_DIALOG DIALOGEX 0, 0, 680, 347
    STYLE DS_SETFONT | WS_CHILD
    FONT 10, "Segoe UI", 0, 0, 0x1
    BEGIN
        EDITTEXT    IDC_EDT_NAME,34,226,80,14,ES_AUTOHSCROLL|ES_READONLY
    END

但我在屏幕上复制了 10 次。到目前为止一切顺利......我现在的问题是我需要识别屏幕中的控件以使用自动化测试工具,并且所有 10 个编辑框的控件 ID 始终相同。除了控件 ID 之外,控件中是否有任何属性可以用来唯一标识控件???

谢谢。

【问题讨论】:

    标签: visual-c++ mfc controls


    【解决方案1】:

    使用单独编号的子对话框,然后将控件放在子对话框中。为它使用 WS_CHILD。

    通过这个技巧,你也可以确定孩子的父母。

    在代码项目中,您可以找到如何在对话框中嵌入子对话框的示例和要求。

    https://www.codeproject.com/Articles/4408/Creating-embedded-dialogs-in-MFC

    另一种方法是在控件创建后设置新的 Id。 CWnd::SetDlgCtrlID 将执行此操作。您可以通过这种方式保持它们的独特性

    【讨论】:

    • 我的问题不在于如何嵌入对话框......这已经实现并且正在工作......我需要单独识别这些嵌入对话框中的每个控件。测试团队正在使用一种工具,通过使用 ControlID 来识别所有控件,现在所有这些 id 都是重复的。
    • 改变了我的答案
    猜你喜欢
    • 2011-11-19
    • 2018-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-08
    • 1970-01-01
    • 1970-01-01
    • 2011-08-17
    相关资源
    最近更新 更多