如何获取对话框的句柄(HWND)?

4

嗨,我创建了一个对话框并且它能正常工作。

我的问题是:如何检索它的句柄?

此外,如果你得到了句柄,如何更改其中的静态文本控件文本?

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
发布你的代码。即使问题很简单,也没有心灵感应来理解你想做什么。你需要特别注意的是在哪里需要处理。 - Roman R.
2个回答

11

假设您正在使用MFC(如标签所示),那么您可能有一个CDialog类实例。 CDialogCWnd的子类,因此您可以通过以下3种方式之一检索窗口句柄:


谢谢回复。一个相关的问题...假设您有对话框的句柄...并且其中有静态文本控件...如何在运行时更改控件中的文本...我尝试了SetDlgItemText,但似乎没有任何效果。 - user3126297
1
在资源编辑器中,请确保为您的静态文本提供唯一的ID。然后,我建议您将控件映射到CStatic变量或CString。无论哪种方式,您都可以更新变量内容。请记住,默认情况下,静态标签具有相同的ID IDC_STATIC,因此如果要在运行时编辑它们的值,则必须为它们提供唯一的ID值。 - Andrew Truckle

0

以下是如何操作的步骤。 首先,在主应用程序类中创建一个成员函数。 然后使用以下代码(假设类名为CGenericApp,对话框类为CGenericDlg)。

CWnd* CGenericApp::GetDlg()
{
    return m_pMainWnd;
}

然后当您想要获取主对话框的处理程序时,请使用:

CGenericApp* app = (CGenericApp*)AfxGetApp();
CGenericDlg* pDlg = (CGenericDlg*)(app->GetDlg());
HWND win = pDlg->GetSafeHwnd();

'win' 将持有你正在寻找的 HWND 句柄。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接