以下是 CDialog 类的 SetDefID 方法的声明:
void SetDefID(UINT nID);
SetDefID 方法接受一个 UINT 类型的参数 nID,表示对话框的默认按钮的 ID。设置默认按钮后,当用户按下 "Enter" 键时,与该 ID 相关联的按钮将被模拟点击。
以下是一个简单的示例,演示了如何使用 SetDefID 方法:
// 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();
afx_msg void OnSetDefaultButton();
};
// 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)
ON_BN_CLICKED(IDC_BUTTON_SET_DEFAULT, &CMyDialog::OnSetDefaultButton)
END_MESSAGE_MAP()
BOOL CMyDialog::OnInitDialog()
{
// 调用基类方法
CDialog::OnInitDialog();
// 设置默认按钮为 "OK" 按钮
SetDefID(IDOK);
return TRUE; // 除非将焦点设置到控件上,否则返回 TRUE
}
void CMyDialog::OnBnClickedOk()
{
// TODO: 在此添加控件通知处理程序代码
OnOK();
}
void CMyDialog::OnBnClickedCancel()
{
// TODO: 在此添加控件通知处理程序代码
OnCancel();
}
void CMyDialog::OnSetDefaultButton()
{
// 设置默认按钮为 "Cancel" 按钮
SetDefID(IDCANCEL);
}
在这个示例中,OnInitDialog 方法被覆盖,通过调用 SetDefID 方法将 "OK" 按钮设置为默认按钮。在按钮 "Set Default" 被点击时,OnSetDefaultButton 函数调用 SetDefID 方法将 "Cancel" 按钮设置为默认按钮。这样,用户按下 "Enter" 键时会触发相应的按钮点击事件。
转载请注明出处:http://www.zyzy.cn/article/detail/17327/MFC/CDialog