模态对话框的父窗口设置
我的畢業(yè)設(shè)計(jì)基本是搞完了,那么最近幾天在做一些測(cè)試和修改。其中就有一個(gè)問題折騰了我好久,今天才發(fā)現(xiàn),原來是這么回事。
我創(chuàng)建了一個(gè)非模態(tài)的子對(duì)話框,然后在這個(gè)子對(duì)話框中又創(chuàng)建了一個(gè)模態(tài)對(duì)話框,結(jié)果意外的是點(diǎn)擊按鈕彈出這個(gè)模態(tài)對(duì)話框時(shí),原父對(duì)話框被至于前臺(tái)了,即父對(duì)話框的父對(duì)話框被置于前臺(tái)了,而不是父對(duì)話框被至于前臺(tái)。具體看圖:
最下面黑色背景的是我的父窗口,前臺(tái)的是一個(gè)非模態(tài)的子對(duì)話框,此時(shí),子對(duì)話框在前臺(tái)
然后我準(zhǔn)備下載文件,即將彈出一個(gè)保存文件的模態(tài)對(duì)話框
點(diǎn)擊下載后彈出的了保存文件模態(tài)對(duì)話框,但是原父窗口被彈出來置于前臺(tái)了。
我所期待的應(yīng)該是彈出了保存對(duì)話框,但是應(yīng)該是在哪個(gè)FTP 客戶端上才對(duì)啊!
其實(shí)原因很簡(jiǎn)單,我們習(xí)慣創(chuàng)建模態(tài)對(duì)話框都是這樣操作的:
CNewDlg * pmydlg=new CNewDlg();
if(pmydlg->DoModal()==IDOK)
{ //如何如何
}
注意上面定義CNewDlg * pmydlg=new CNewDlg();的同時(shí)也是構(gòu)造了該對(duì)象,那么其實(shí)并不完整,因?yàn)闆]有指定它的父對(duì)話框,默認(rèn)就變成了原父對(duì)話框,所以會(huì)出現(xiàn)上面的問題,那么如何解決呢?很簡(jiǎn)單,修改一下就OK了.
CNewDlg * pmydlg=new CNewDlg(this);
執(zhí)行后就是下面的效果:
OK,至此。接下來引用別人的CFileDialog使用總結(jié)。
CFileDialog經(jīng)常用,但經(jīng)常忘,現(xiàn)歸納整理下,方便今后查詢。
例子:
CFileDialog openDlg( TRUE, “Material File(.material)|.material”, NULL,
OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,"Material File(*.material)|*.material||", this);
CFileDialog構(gòu)造函數(shù)原型如下:
CFileDialog::CFileDialog( BOOL bOpenFileDialog, LPCTSTR lpszDefExt = NULL,
LPCTSTR lpszFileName = NULL,DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,LPCTSTR lpszFilter = NULL, CWnd* pParentWnd = NULL );
參數(shù)意義如下:
bOpenFileDialog 為TRUE則顯示打開對(duì)話框,為FALSE則顯示保存對(duì)話文件對(duì)話框。lpszDefExt 指定默認(rèn)的文件擴(kuò)展名。
lpszFileName 指定默認(rèn)的文件名。
dwFlags 指明一些特定風(fēng)格。 (默認(rèn)OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT)
lpszFilter 指明可供選擇的文件類型和相應(yīng)的擴(kuò)展名。
pParentWnd 為父窗口指針。
其中,擴(kuò)展名應(yīng)遵循下面的格式:
“Chart Files (.xlc)|.xlc| Worksheet Files (.xls)|.xls| Data Files (.xlc;.xls)|.xlc ; .xls| All Files (.)|.||”;
文件類型說明和擴(kuò)展名間用 | 分隔,同種類型文件的擴(kuò)展名間可以用 ; 分割,每種文件類型間用 | 分隔,末尾用 || 指明。
CString CFileDialog::GetPathName( ) 得到完整的文件名,包括目錄名和擴(kuò)展名如:c:/test/test1.txt
CString CFileDialog::GetFileName( ) 得到完整的文件名,包括擴(kuò)展名如:test1.txt
CString CFileDialog::GetExtName( ) 得到完整的文件擴(kuò)展名,如:txt
CString CFileDialog::GetFileTitle ( ) 得到完整的文件名,不包括目錄名和擴(kuò)展名如:test1
POSITION CFileDialog::GetStartPosition( ) 對(duì)于選擇了多個(gè)文件的情況得到第一個(gè)文件位置。
CString CFileDialog::GetNextPathName( POSITION& pos ) 對(duì)于選擇了多個(gè)文件的情況得到下一個(gè)文件位置,同時(shí)返回當(dāng)前文件名。但必須已經(jīng)調(diào)用過POSITION CFileDialog::GetStartPosition( )來得到最初的POSITION變量。
需要注意的是,用了CFileDialog之后,會(huì)把程序的當(dāng)前路徑設(shè)置成選中文件的路徑
所以,如果程序里有用到IO訪問或者數(shù)據(jù)庫(kù)訪問之類的本地操作時(shí),需要注意你的當(dāng)前路徑
用相對(duì)路徑的話就不是原來你的程序路徑了,切記!
ok,拙見,小記!
總結(jié)
以上是生活随笔為你收集整理的模态对话框的父窗口设置的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MFC给按钮添加皮肤
- 下一篇: VS2010使用Skin++