MFC 对话框中的 Visual C++ 数据不显示

Posted

技术标签:

【中文标题】MFC 对话框中的 Visual C++ 数据不显示【英文标题】:Visual C++ Data in MFC Dialog Box not Displaying 【发布时间】:2015-07-23 06:56:04 【问题描述】:

我是 C++ 新手,我正在玩 MFC 中的 GUI。我有一个对话框,当您连接它时会显示相机的信息。

这是该对话框的资源代码

IDD_PVSIMPLEUISAMPLE DIALOGEX 0, 0, 575, 284
STYLE DS_SETFONT | DS_FIXEDSYS | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME
EXSTYLE WS_EX_APPWINDOW
CAPTION "PvSimpleUISample"
FONT 8, "MS Shell Dlg", 0, 0, 0x1
BEGIN
    PUSHBUTTON      "Select / Connect",IDC_CONNECT_BUTTON,10,16,86,16
    PUSHBUTTON      "Disconnect",IDC_DISCONNECT_BUTTON,97,16,87,16,WS_DISABLED
    LTEXT           "IP address",IDC_STATIC,10,41,45,8
    EDITTEXT        IDC_IP_EDIT,65,37,119,14,ES_AUTOHSCROLL | ES_READONLY | WS_DISABLED
    LTEXT           "MAC address",IDC_STATIC,10,58,50,8
    EDITTEXT        IDC_MAC_EDIT,65,55,119,14,ES_AUTOHSCROLL | ES_READONLY | WS_DISABLED
    LTEXT           "Manufacturer",IDC_STATIC,10,75,50,8
    EDITTEXT        IDC_MANUFACTURER_EDIT,65,72,119,14,ES_AUTOHSCROLL | ES_READONLY | WS_DISABLED
    LTEXT           "Model",IDC_STATIC,10,93,44,8
    EDITTEXT        IDC_MODEL_EDIT,65,90,119,14,ES_AUTOHSCROLL | ES_READONLY | WS_DISABLED
    LTEXT           "Name",IDC_STATIC,10,110,44,8
    EDITTEXT        IDC_NAME_EDIT,65,107,119,14,ES_AUTOHSCROLL | ES_READONLY | WS_DISABLED
    GROUPBOX        "Connection",IDC_STATIC,4,4,187,123
    LTEXT           "Mode",IDC_STATIC,10,144,55,8
    COMBOBOX        IDC_MODE,66,141,118,30,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP
    LTEXT           "Channel",IDC_STATIC,9,160,56,8
    OMBOBOX        IDC_CHANNEL,66,157,118,30,CBS_DROPDOWNLIST | CBS_SORT | WS_DISABLED | WS_VSCROLL | WS_TABSTOP
    CONTROL         "Play",IDC_START,"Button",BS_OWNERDRAW | WS_TABSTOP,13,171,44,26
    CONTROL         "Stop",IDC_STOP,"Button",BS_OWNERDRAW | WS_TABSTOP,75,172,42,26
    CONTROL         "Settings",IDC_SETTINGS,"Button",BS_OWNERDRAW | WS_TABSTOP,135,172,43,26
    GROUPBOX        "Parameters and Controls",IDC_CONTROL_GROUP,4,206,187,73
    PUSHBUTTON      "Communication control",IDC_LINK_BUTTON,10,218,174,17,WS_DISABLED
    PUSHBUTTON      "Device control",IDC_DEVICE_BUTTON,10,237,174,17,WS_DISABLED
    PUSHBUTTON      "Image stream control",IDC_STREAMPARAMS_BUTTON,10,256,174,17,WS_DISABLED
    GROUPBOX        "Display",IDC_DISPLAY_GROUP,198,4,371,275
    PUSHBUTTON      "Display",IDC_DISPLAYPOS,205,17,355,254,NOT WS_VISIBLE | WS_DISABLED
    GROUPBOX        "Acquisition Control",IDC_CONTROL_GROUP2,4,128,187,77
END

然后我创建了一个新对话框,当您单击设置按钮时会打开该对话框。我将其中几行复制到新对话框中,但未显示从相机传输的实际数据。

这是设置对话框的代码

IDD_SETTINGS DIALOGEX 0, 0, 444, 319
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Settings"
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
    DEFPUSHBUTTON   "OK",IDOK,205,298,50,14
    LTEXT           "IP address",IDC_STATIC,10,41,45,8
    EDITTEXT        IDC_IP_EDIT,65,37,119,14,ES_AUTOHSCROLL | ES_READONLY | WS_DISABLED
    LTEXT           "MAC address",IDC_STATIC,10,58,50,8
    EDITTEXT        IDC_MAC_EDIT,65,55,119,14,ES_AUTOHSCROLL | ES_READONLY | WS_DISABLED
    LTEXT           "Manufacturer",IDC_STATIC,10,75,50,8
    EDITTEXT        IDC_MANUFACTURER_EDIT,65,72,119,14,ES_AUTOHSCROLL | ES_READONLY | WS_DISABLED
    LTEXT           "Model",IDC_STATIC,10,93,44,8
    EDITTEXT        IDC_MODEL_EDIT,65,90,119,14,ES_AUTOHSCROLL | ES_READONLY | WS_DISABLED
    LTEXT           "Name",IDC_STATIC,10,110,44,8
    EDITTEXT        IDC_NAME_EDIT,65,107,119,14,ES_AUTOHSCROLL | ES_READONLY | WS_DISABLED
END

如何让数据出现在对话框中?我需要为它上一堂课吗?任何帮助/建议都将不胜感激。

【问题讨论】:

答案可能在IDD_PVSIMPLEUISAMPLE对话框的C++代码中。在该代码中搜索 IDC_DISPLAYPOS。没有看到该代码,没有人可以给出准确的答案。 MFC 将所有 Win32 资源封装在 C++ 类中。这包括对话框。问你是否“需要为它制作一个完整的课程”没有意义。没有类就不能在 MFC 中有对话框。除非您直接使用 Windows API。但这不是 MFC。 好吧,我不确定,因为主 GUI 在它自己的 .cpp 文件中,我不确定我添加的对话框是否也需要它自己的 .cpp 文件 【参考方案1】:

在第一个对话框中,您可以声明第二个对话框的类对象,使用该对象获取项目控制对象然后设置数据。 所以你可以这样做,在设置按钮的回调函数中,添加这些代码:

CAAADialog::OnXXXButton()

     CBBBDialog dlgb;
     dlgb.DoModal();
     dlgb.GetDlgItem(IDC_IP_EDIT)->SetWindowText(m_strIp);
     dlgb.GetDlgItem(IDC_MAC_EDIT)->SetWindowText(m_strMac);
     dlgb.GetDlgItem(IDC_MANUFACTURER_EDIT)->SetWindowText(m_strManufacture);
     dlgb.GetDlgItem(IDC_NAME_EDIT)->SetWindowText(m_strName);

【讨论】:

以上是关于MFC 对话框中的 Visual C++ 数据不显示的主要内容,如果未能解决你的问题,请参考以下文章

为啥 CDC::LineTo() 不在 Visual C++ 2015 MFC 对话框中绘制?

如何知道与 Visual c++ 2008 中的对话框关联的变量和类?

使用 MFC 在 MS Visual C++ 2008 中处理 .bmp 图像时出现颜色问题

在没有 MFC 的 Visual Studio 中拖放 UI 设计器?

Visual C++/C# 中的 WinForms 编程与 Visual C++(MFC) 中的 Windows 编程有何不同

从Visual Studio C++中另一个项目的对话框访问一个项目的对话框