2、DaDataExchange()函数用于进行对话框数据交换和验证。但是在控件和类的连接时,该函数执行的并不是这一任务,而只是实现了控件与类的连接。
void Cdialog_tsetDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_EDIT1, m_Cedit);//实现了控件与类的连接
}
DaDataExchange()函数的执行时机是在OnInitDialog()函数中的CDialog::OnInitDialog();语句执行之后。
3、MFC提供了类CDataExchange实现对话框类与控件之间的数据交换(DDX),该类还提供了数据有效机制(DDV)(这个目前还不知道有什么作用),数据交换和数据有效机制适用与编辑框、检查框、单选按钮、列表框和组合框等。
我们举一个很简单的例子:就拿编辑框来说:编辑框有控制变量和值变量两种,控制变量是和对象相关联的,而值变量则是和控件中的数据进行交换的。
当程序需要交换数据时,不要直接调用DoDataExchange函数,而应该调用CWnd::UpdateData函数。因为UpdateData函数内部调用了DoDataExchange,同时决定了数据交换的方向。
函数原型:BOOL UpdateData( BOOL bSaveAndValidate = TRUE );
但是方向什么时候,怎么流向的呢?
当参数为FALSE时,数据从对话框的数据成员流向控件;当参数为TRUE时,数据从控件流向对话框的数据成员。
ps:当单击“确定”按钮关闭对话框时,参数为TRUE;当系统调用OninitDialog()函数初始化对话框时,参数为FALSE。
颜色对话框:CColorDialog
使用方法:
CColorDialog dlg(RGB(255,0,0),CC_FULLOPEN,this);//集体参数意思可以自己查
得到所选的颜色的两种方法:
1:COLORFREF cr = dlg.GetColor();
m_cc的类型是一个结构体,详细的可以自己查
2:1:COLORFREF cr = dlg.m_cc.rgbResult();
字体对话框:
字体对话框及其使用的典型代码如下:
LOGFONT lf;
memset(&lf, 0,sizeof(LOGFONT));
strcpy(lf.lfFaceName,"宋体");//设置初始字体名称
CFontDialog dlg(&lf,CF_EFFECTS | CF_SCREENFONTS,0,this);
if(dlg.DoModal() == IDOK)
{
CClientDC dc(this);
dlg.GetCurrentFont(&lf);//获取字体对话框设置的字体信息
CFont myfont;
myfont.CreateFontIndirect(&lf);
dc.SelectObject(&myfont);
dc.TextOut(100,100,"Hello");
}
文件对话框:
CFileDialog(BOOL bOpenFileDialog,剩下的都有默认参数,详细的请参看MSDN)
bOpenFileDialog:为TRUE,则显示打开对话框,为FALSE则显示保存对话框。
CFileDialog类提供了一些成员函数:
GetPathName:得到完整的文件名,包括目录名和扩展名,如:“c:\test1.txt”
GetFileName:得到完整的文件名,如"test1.txt"
GetExtName:得到完整的文件扩展名,如:".txt"
GetFileTitle:得到完整的文件名,不包括目录名和扩展名,如"test1"
GetStartPosition:对于选择的多个文件的情况得到第一个文件的位置
GetNextPathName:对于选择了多个文件的情况得到下一个文件的位置,并同时返回当前文件名
例子:
//定义文件过滤器
CString szFilters = "MyType Files (*.my)|*.my |All Files (*.*)|*.*||";
CFileDialog file(TRUE,"txt","*.txt",OFN_FILEMUSTEXIST|OFN_HIDEREADONLY,szFilters,this);
if ( IDOK == file.DoModal() )
{
CString str1,str2,str3,str4;
str1 = file.GetPathName();
str2 = file.GetFileName();
str3 = file.GetFileTitle();
::SetWindowText(GetParent()->m_hWnd,str3);//将文本框的标题设置成所选的文件名
}
还有查找替换对话框,这里就不详细说了,有需要的可以查
类为:CFindReplaceDialog,这个对话框是一个非模态对话框,先new,在create,在showwindow();