在 MFC(Microsoft Foundation Classes)中,CDialog 类提供了一个名为 OnInitDialog 的公共方法,该方法在对话框初始化时被调用。在 OnInitDialog 方法中,您可以执行对话框的初始化工作,例如设置默认值、加载数据、创建控件等。

以下是 CDialog 类的 OnInitDialog 方法的声明:
virtual BOOL OnInitDialog();

OnInitDialog 方法返回一个布尔值,通常为 TRUE 表示成功执行初始化,而 FALSE 表示初始化失败。

以下是一个简单的示例,演示了如何使用 OnInitDialog 方法:
// MyDialog.h
#pragma once

#include "afxwin.h"

class CMyDialog : public CDialog
{
public:
    CMyDialog(CWnd* pParent = nullptr); // 默认构造函数

    // Dialog Data
    #ifdef AFX_DESIGN_TIME
        enum { IDD = IDD_MYDIALOG };
    #endif

protected:
    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
    virtual BOOL OnInitDialog(); // 覆盖 OnInitDialog 方法

    // Implementation
protected:
    DECLARE_MESSAGE_MAP()
public:
    afx_msg void OnBnClickedOk();
    afx_msg void OnBnClickedCancel();
};

// MyDialog.cpp
#include "stdafx.h"
#include "MyDialog.h"

// CMyDialog 对话框

IMPLEMENT_DYNAMIC(CMyDialog, CDialog)

CMyDialog::CMyDialog(CWnd* pParent /*=nullptr*/)
    : CDialog(IDD_MYDIALOG, pParent)  // 使用对话框模板资源 ID 进行初始化
{
}

void CMyDialog::DoDataExchange(CDataExchange* pDX)
{
    CDialog::DoDataExchange(pDX);
}

BEGIN_MESSAGE_MAP(CMyDialog, CDialog)
    ON_BN_CLICKED(IDOK, &CMyDialog::OnBnClickedOk)
    ON_BN_CLICKED(IDCANCEL, &CMyDialog::OnBnClickedCancel)
END_MESSAGE_MAP()

BOOL CMyDialog::OnInitDialog()
{
    // 在基类方法之前执行额外的初始化

    // 调用基类方法
    CDialog::OnInitDialog();

    // 在此执行对话框的初始化工作
    SetWindowText(_T("My Custom Dialog")); // 设置对话框标题
    GetDlgItem(IDC_EDIT1)->SetWindowText(_T("Default Text")); // 设置编辑框的默认文本

    return TRUE;  // 除非将焦点设置到控件上,否则返回 TRUE
}

void CMyDialog::OnBnClickedOk()
{
    // TODO: 在此添加控件通知处理程序代码
    OnOK();
}

void CMyDialog::OnBnClickedCancel()
{
    // TODO: 在此添加控件通知处理程序代码
    OnCancel();
}

在这个示例中,OnInitDialog 方法被覆盖,它在对话框初始化时被调用。在此方法中,我们执行了一些对话框的初始化工作,例如设置标题和默认文本。通过覆盖 OnInitDialog 方法,您可以在对话框显示之前执行任何必要的初始化。


转载请注明出处:http://www.zyzy.cn/article/detail/17325/MFC/CDialog