Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 使用CFileDialog::AddCheckButton失败_Windows_Mfc_Common Dialog - Fatal编程技术网

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;
}

非常感谢您的精彩解释性回复:-)