MFC Checkbox 样式定制:改变大小、颜色和互斥勾选
以下是使用 MFC 设计 Checkbox 的示例代码,展示如何改变勾选框的大小和打钩的颜色,实现当勾选一个框时,另一个框取消勾选的功能,以及如何在两个框都没有勾选时显示提示信息。
首先,在 CMyDialog 对话框类的头文件中声明两个 Checkbox 控件的成员变量和相应的消息处理函数:
class CMyDialog : public CDialogEx
{
public:
CMyDialog(CWnd* pParent = nullptr);
// Checkbox 控件的成员变量
CButton m_checkBox1;
CButton m_checkBox2;
protected:
afx_msg void OnCheckBox1Clicked();
afx_msg void OnCheckBox2Clicked();
DECLARE_MESSAGE_MAP()
};
然后,在 CMyDialog 类的实现文件中添加消息映射和消息处理函数的定义:
BEGIN_MESSAGE_MAP(CMyDialog, CDialogEx)
ON_BN_CLICKED(IDC_CHECKBOX1, &CMyDialog::OnCheckBox1Clicked)
ON_BN_CLICKED(IDC_CHECKBOX2, &CMyDialog::OnCheckBox2Clicked)
END_MESSAGE_MAP()
CMyDialog::CMyDialog(CWnd* pParent /*=nullptr*/)
: CDialogEx(IDD_MYDIALOG, pParent)
{
}
void CMyDialog::OnCheckBox1Clicked()
{
// 当勾选 Checkbox1 时,取消勾选 Checkbox2
if (m_checkBox1.GetCheck() == BST_CHECKED)
{
m_checkBox2.SetCheck(BST_UNCHECKED);
}
}
void CMyDialog::OnCheckBox2Clicked()
{
// 当勾选 Checkbox2 时,取消勾选 Checkbox1
if (m_checkBox2.GetCheck() == BST_CHECKED)
{
m_checkBox1.SetCheck(BST_UNCHECKED);
}
}
接下来,在资源编辑器中添加两个 Checkbox 控件,并将它们的 ID 分别设置为 IDC_CHECKBOX1 和 IDC_CHECKBOX2。
最后,在 OnInitDialog 函数中初始化 Checkbox 控件的样式,包括改变勾选框的大小和打钩的颜色,并添加必要的提示信息:
BOOL CMyDialog::OnInitDialog()
{
CDialogEx::OnInitDialog();
// 设置 Checkbox1 的样式
m_checkBox1.SubclassDlgItem(IDC_CHECKBOX1, this);
m_checkBox1.SetCheck(BST_UNCHECKED);
m_checkBox1.SetButtonStyle(BS_OWNERDRAW, FALSE);
m_checkBox1.SetCheckColor(RGB(255, 0, 0)); // 设置打钩的颜色为红色
// 设置 Checkbox2 的样式
m_checkBox2.SubclassDlgItem(IDC_CHECKBOX2, this);
m_checkBox2.SetCheck(BST_UNCHECKED);
m_checkBox2.SetButtonStyle(BS_OWNERDRAW, FALSE);
m_checkBox2.SetCheckColor(RGB(255, 0, 0)); // 设置打钩的颜色为红色
// 添加提示信息
CStatic* pPromptLabel = (CStatic*)GetDlgItem(IDC_PROMPT_LABEL);
if (pPromptLabel)
{
pPromptLabel->SetWindowText(_T('请勾选一个框'));
}
return TRUE;
}
通过以上代码,你可以使用 MFC 设计 Checkbox,改变勾选框的大小和打钩的颜色,并实现当勾选一个框时,另一个框取消勾选的功能。当两个框都没有勾选时,会显示一条提示信息要求勾选一个框。
原文地址: https://www.cveoy.top/t/topic/pmOs 著作权归作者所有。请勿转载和采集!