Windows 使用CFileDialog::AddCheckButton失败
好的,我正在尝试使用Windows 使用CFileDialog::AddCheckButton失败,windows,mfc,common-dialog,Windows,Mfc,Common Dialog,好的,我正在尝试使用CFileDialog::AddCheckButton。函数调用成功,我可以看到新的复选框。我无法看到任何事件,虽然我可以覆盖OnInitDialog,但覆盖OnOK将被忽略。我不确定我做错了什么: //标题 class-CTPSaveDialog:public-CFileDialog { 声明动态(CTPSaveDialog) 静态常数CTPSaveDialog::m_cstrFilter; 公众: 布尔穆布力; CTPSaveDialog( LPCTSTR lpszDef
CFileDialog::AddCheckButton
。函数调用成功,我可以看到新的复选框。我无法看到任何事件,虽然我可以覆盖OnInitDialog
,但覆盖OnOK
将被忽略。我不确定我做错了什么:
//标题
class-CTPSaveDialog:public-CFileDialog
{
声明动态(CTPSaveDialog)
静态常数CTPSaveDialog::m_cstrFilter;
公众:
布尔穆布力;
CTPSaveDialog(
LPCTSTR lpszDefExt=NULL,
LPCTSTR lpszFileName=NULL,
DWORD dwFlags=of n_hidderadonly | of n_OVERWRITEPROMPT,
CWnd*pParentWnd=NULL,
DWORD dwSize=0);
~CTPSaveDialog();
虚拟BOOL-OnInitDialog();
声明消息映射()
afx_msg void OnBnClickedCheckForce();
虚拟void OnOK();
};
//实施
const CString CTPSaveDialog::m_cstrFilter=“JPEG图像(*.jpg)|*.jpg | TIFF格式(*.tif)|*.tif | Windows位图(*.bmp)|*.bmp |便携式网络图形(*.png)|*.png | GIF(*.GIF)|*.GIF |”;
实现动态(CTPSaveDialog、CFileDialog)
CTPSaveDialog::CTPSaveDialog(LPCTSTR lpszdeext、LPCTSTR lpszFileName、DWORD dwFlags、CWnd*pParentWnd、DWORD dwSize):
CFileDialog(FALSE、lpszdeext、lpszFileName、dwFlags、m_cstrFilter、pParentWnd、dwSize、TRUE)
{
AddCheckButton(IDC_CHK_FORCE,“FORCE”,FALSE);
m_bForce=假;
m_of n.lpstrtite=“将模拟写入文件”;
}
CTPSaveDialog::~CTPSaveDialog()
{
}
BOOL-CTPSaveDialog::OnInitDialog()
{
CFileDialog::OnInitDialog();
if(GetDlgItem(IDC_CHK_FORCE))
发送gitemmessage(IDC_CHK_FORCE、BM_SETCHECK、m_bForce?BST_CHECKED:BST_UNCHECKED);
//TODO:在此处添加额外的初始化
return TRUE;//除非将焦点设置为控件,否则返回TRUE
//异常:OCX属性页应返回FALSE
}
开始消息映射(CTPSaveDialog、CFileDialog)
单击时(IDC\U CHK\U FORCE和CTPSaveDialog::单击时检查FORCE)
结束消息映射()
void CTPSaveDialog::CTPSaveDialog()
{
m_bForce=!m_bForce;
}
void CTPSaveDialog::OnOK()
{
//TODO:在此处添加专用代码和/或调用基类
CFileDialog::OnOK();
}
在带有Vista样式的CFileDialog
中,windows消息不会在消息映射中处理。相反,CFileDialog
使用特定的虚拟函数。您只需要声明和定义这些函数
使用oncheckbuttonoggled
检测是否单击了复选框
使用OnFileNameOK
检测何时选择了文件并单击了Open/Save
按钮
使用SetCheckButtonState
设置/取消设置检查按钮(而不是SendDlgItemMessage
)
有关所有可用方法,请参阅
如文档中所述,OnInitDialog
也不受支持:
某些CFileDialog
方法在Windows Vista或
后来检查单个方法主题以了解是否
支持该方法。此外,还继承了以下内容:
Windows Vista或更高版本不支持以下功能:
CDialog::OnInitDialog
...
只需在构造函数中或调用DoModal()
之前进行初始化,然后重写这些函数:
class-CTPSaveDialog:public-CFileDialog
{
...
勾选按钮时的虚拟无效(DWORD dwIDCtl,BOOL B勾选);
虚拟BOOL OnFileNameOK();
};
void CTPSaveDialog::oncheckbuttonoggled(DWORD dwIDCtl,BOOL bChecked)
{
如果(dwIDCtl==IDC\u CHK\u FORCE)
跟踪(“已检查?%d\n”,b已检查);
}
BOOL CTPSaveDialog::OnFileNameOK()
{
跟踪(“单击打开/保存按钮”);
//返回FALSE关闭对话框
返回FALSE;
}
非常感谢您的精彩解释性回复:-)