在运行时更改对话框中的静态文本

Posted

技术标签:

【中文标题】在运行时更改对话框中的静态文本【英文标题】:Changing static text in dialog box at runtime 【发布时间】:2014-02-08 04:49:26 【问题描述】:

我创建了一个对话框并将其链接到菜单项。在这种情况下,菜单项是Help -> Statistics。这一切都有效。所以当我运行程序时,点击菜单Help,然后Statistics,弹出一个对话框。

我在对话框中还有一个静态文本框。如何在运行时更改这个静态文本框的文本?

P.S:虽然我有一个对话框正在运行,但我没有对话框的句柄。如果您的任何解决方案涉及知道对话框的句柄,请告诉我如何检索它。谢谢。

编辑:

class CStatisticsDlg : public CDialogEx

public:
        CStatisticsDlg();

// Dialog Data
    enum  IDD = IDD_STATISTICS ;

protected:
    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support

// Implementation
protected:
    DECLARE_MESSAGE_MAP()
public:
;

CStatisticsDlg::CStatisticsDlg() : CDialogEx(CStatisticsDlg::IDD)



void CStatisticsDlg::DoDataExchange(CDataExchange* pDX)

    CDialogEx::DoDataExchange(pDX);


BEGIN_MESSAGE_MAP(CStatisticsDlg, CDialogEx)
END_MESSAGE_MAP()

【问题讨论】:

如果您提供了用于对话框的代码,这可能会有所帮助。 刚刚添加了负责创建对话框的代码。 【参考方案1】:
    在类向导中,为标签创建一个 CString 成员变量。注意:默认情况下,标签没有自定义 id,所以你必须给它一个像 IDC_MY_LABEL 这样​​的。 在显示对话框调用之前的某处m_strMyLabel.SetWindowText("blah");

如果您需要在对话框打开时执行此操作,您必须致电 UpdateData(FALSE)

编辑:如果您不想创建成员变量,您可以 **已更正 - 从记忆中输入....

// Find the label
// if called from within CStatusDlg class
CWnd *label = GetDlgItem(IDC_MY_LABEL);
label->SetWindowText("blah");

// If called from elsewhere
CStatusDlg dlg.....  // create the dialog
CWnd *label = dlg.GetDlgItem(IDC_MY_LABEL);
label->SetWindowText("blah");

【讨论】:

感谢您的回复。您将如何以编程方式执行此操作(即没有类向导)? @user3126297 更新了我的答案。

以上是关于在运行时更改对话框中的静态文本的主要内容,如果未能解决你的问题,请参考以下文章

静态 UIView 在本地化为法语时更改宽度

如何更改静态文本控件(winapi)的字体?

在运行时更改对话框字体

当表单中的任何文本框发生更改时运行函数?微软访问

如何在运行时更改列表框中的选定项目文本?

当我按下对话框窗口中的按钮时,如何在该对话框中更改/附加编辑控件框的文本