资源描述:
《在VC++中定制CFileDialog》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、在VC++中定制CFileDialogMFC为我们提供了OFileDialog的简单易用,但毕竟“千篇一律,没有性格”,在实际应用中往往需要具有个性特色的用户界面和个性化的文件对话框。要定制文件对话框,就必须获得对文件对话框中各个控件的控制。本文将通过一个简单的例子介绍控制文件对话框中控件的方法。把文件对话框的高度比一般情况扩大150个像素,并修改它的标题。通过classwizard生成一个CFileDialog的派生类CCoolFileDialog,然后编辑CoolFileDialog.cpp中处理WM_INI
2、TDIALOG的OnInitDialog函数。在indnde.CPP的开头必须加入#CoolFileDialog<dlgs.h>BOOLCoolFileDialog::OnInitDialog()//iExtraSize将按照你所要的确定对话框的最终尺寸constUINTiExtraSize=150;//要控制的文件对话框中的控件的个数constUINTnControls=8;//获得指向父对话框的指针CWnd*wndDlg=GetParent();//获得对话框的尺寸RECTRect;wndDlg->GetWi
3、ndowRect(&Rect);//修改对话框的尺寸wndDlg->GetWindowRect(&Rect);//修改对话框的尺寸wndDlg->SetWindowPos(NULL,0,0,Rect.right-Rect.left,Rect.bottom-Rect.top+iExtraSize,SWP_NOMOVE);//控件的ID在<dlgs.h>中定义UINTControls[nControls]={stc3,stc2,//两个label控件edt1,cmb1,//edit控件和//drop-downbox控
4、件IDOK,IDCANCEL,chx1,//check按钮lst1//list控件};//获得对文件对话框中各个控件的控制,并把它们移到新的位置for(inti=0;i<nControls;i++){CWnd*wndCtrl=wndDlg->GetDlgItem(Controls[i]);wndCtrl->GetWindowRect(&Rect);wndDlg->ScreenToClient(&Rect);//根据对话框的新的尺寸移动各控件。if(Controls[i]!=lst1)wndCtrl->SetWin
5、dowPos(NULL,Rect.left,Rect.top+iExtraSize,0,0,SWP_NOSIZE);else//文件列表框只改变尺寸,而不移动位置wndCtrl->SetWindowPos(NULL,0,0,Rect.right-Rect.left,Rect.bottom-Rect.top+iExtraSize,SWP_NOMOVE);//设置对话框窗口的标题wndDlg->SetWindowText(“打开——(大家好):-)”);//Remembertocallthebaseclass,ret
6、urnCFileDialog::OnInitDialog();}程序中必须注意的问题是:(1)如果想改变对话框中控件的尺寸、外观等属性,不能直接使用GetDlgItem()函数,因为这些控件属于被继承的父对话框,必须通过CWnd*wndDlg=GetParent()获得父对话框的指针来实现。(2)在头文件〈dlgs.h〉中定义的各控件的ID为:stc3,stc2两个label控件(“文件名”和“文件类型”);edt1,cmb1edit控件和drop-downbox控件;IDOK,IDCANCEL“确定”和“取消”
7、按钮;chx1“以只读方式打开”check按钮;lst1文件列表框。其他控件的ID也都定义在〈dlgs.h〉中。通过wndDlg->GetDlgItem(ID)的方法获得对文件对话框中控件的控制,为文件对话框的定制提供了相当大的自由空间。