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