VS2017C++MFC复选框CheckBox记住上一次的选择
在欢乐连连看基本模式点击“设置”后启动了“设置对话框”
void CGameDlg::OnBnClickedButtonSet()
{
// TODO: 在此添加控件通知处理程序代码
m_bPause = true;
m_gameset.DoModal();
bPause = false;
}
其中m_Pause标志游戏是否暂停,m_bPause = true;就是改为暂停。
m_gameset.DoModal();启动新的对话框。
首先是第一个问题:我默认设置里面的复选框是“选中的”
下面的是CSetDlg.h文件,定义两个bool型变量music和sound,同时赋初值为true。
class CSetDlg : public CDialogEx
{
//这里省略一堆系统自己生成的代码
public:
virtual BOOL OnInitDialog();
bool music=true;
bool sound=true;
afx_msg void OnClose();
};
那么这有什么意义呢?
在启用该对话框的时候,在OnInitDialog函数中去设定复选框状态。如下所示:
BOOL CSetDlg::OnInitDialog()
{
CDialogEx::OnInitDialog();
// TODO: 在此添加额外的初始化
SetIcon(m_hIcon, TRUE); // 设置大图标
SetIcon(m_hIcon, FALSE); // 设置小图标
if(music)
((CButton*)GetDlgItem(IDC_CHECK_MUSIC))->SetCheck(BST_CHECKED);
if(sound)
((CButton*)GetDlgItem(IDC_CHECK_SOUND))->SetCheck(BST_CHECKED);
return TRUE; // return TRUE unless you set the focus to a control
// 异常: OCX 属性页应返回 FALSE
}
如上所见,第一次打开“设置框”,就可以根据两个bool型变量的情况,将两个框设为选中。
如果我修改了复选框的值呢,第二次打开怎么办?
void CSetDlg::OnClose()
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
music = ((CButton*)GetDlgItem(IDC_CHECK_MUSIC))->GetCheck();
sound = ((CButton*)GetDlgItem(IDC_CHECK_SOUND))->GetCheck();
CDialogEx::OnClose();
}
在对话框关闭的时候,获取复选框的状态,并将之保存到bool变量里面,覆盖了之前的默认值true,同时在下次启用设置框的时候调用“OnInitDialog函数”完成再次配置。