win2000下“開啟”對話方塊實現2000的風格綜述 (轉)
本人天大小碩,平時使用MFC處理影像。我生成可的目的不求介面多麼pp,只是覺得很簡單的介面應該可以讓人隨心所欲地為己所用,於是乎網上求知,現總結一下已經得到有關開啟對話方塊的實現方法,希望可以給初學者添點樂趣。
一般而言,在使用VC新建一個工程時可以選擇所要開啟檔案的字尾來過濾出自己想得到的檔案型別,然後在生成的程式中透過點選開啟或者新建這樣的按鈕,在標準的windows對話方塊下實現檔案的開啟。可是我們看到預設的這個對話方塊並不是我們在中所常見的那種左邊也有選擇框的標準對話方塊,而是老式的對話方塊,這一點影響了大家的心情了吧?MFC也有點欺人太甚了,哼哼。
當然這種現象不是不可以解決的,不是有CFileDialog麼?只要自己來實現OnOpenFile,在其中使用CFielDialog不就可以了麼。MSDN上也是這樣來建議你設定自己的開啟對話方塊的。有個很常見的文章講到了這一點。由於MFC在檔案對話方塊中都使用了對話方塊鉤子,所以修改2000對話方塊的風格需要對OPENFILENAME結構中lStructSize的值做改動,變成88就行了。這是一種常見的方法,實際上就是進行了一些表面的工作,改改引數就可以了。
在實際MFC程式中,要是使用OnOpenDocument這個函式了的話,就不能透過簡單的在OnOpenFile函式中使用CFielDialog來處理了。在MSDN上,有一個Q&A,給出了兩個類來欺騙MFC從而實現真正自己改動的開啟檔案對話方塊。下面給出程式碼例子:
“2000形式的開啟!”
原文章:.com/msdnmag/issues/0800/c/default.x">
app.cpp中:
#include "StdAfx.h"
#include "TestFD.h"
#include "MainFrm.h"
#include "View.h"
#include "DocMgrEx.h"
#include "FileDialogEx.h"
#include "TraceWin.h"
BOOL CMyApp::InitInstance()
{
SetRegistryKey("MSJ"); // Save settings in registry, not INI file
LoadStdProfileSettings();
// Load standard INI file options (including MRU)
在這裡哦!Flags和Filter加在CDocManagerEx.cpp中
// use extended CDocManager for new file open dialog
m_pDocManager = new CDocManagerEx;
AddDocTemplate(new CSingleDocTemplate(IDR_MAINFRAME,
RUNTIME_CLASS(CMyDoc),
RUNTIME_CLASS(CMainFrame),
RUNTIME_CLASS(CMyView)));
// Parse command line for standard commands, DDE, file open
CCommandLineInfo cmdInfo;
ParseCommandLine(cmdInfo);
// Dispatch commands specified on the command line
if (!ProcessShellCommand(cmdInfo))
return FALSE;
return TRUE;
}
CDocManagerEx.cpp中:
BOOL CDocManagerEx::DoPromptFileName(CString& fileName, UINT nIDSTitle,
D lFlags, BOOL bOpenFileDialog, CDocTemplate* pTemplate)
{
// modified 5-15-99 PD: call virtual fn to create dialog
CFileDialog* pDlg = OnCreateFileDialog(bOpenFileDialog);
ASSERT(pDlg);
CFileDialog& dlgFile = *pDlg;
CString title;
VERIFY(title.LoadString(nIDSTitle));
這裡改造檔案開啟的屬性
dlgFile.m_ofn.Flags |= OFN_FILEMUSTEXIST|OFN_ALLOWMULTI|OFN_ENABLEHOOK;//lFlags;
CString strFilter;
CString strDefault;
if (pTemplate != NULL)
{
ASSERT_VALID(pTemplate);
_AfxAppendFilterSuffix(strFilter, dlgFile.m_ofn, pTemplate, &strDefault);
}
else
{
// do for all doc template
POSITION p= m_templateList.GetHeadPosition();
BOOL bFirst = TRUE;
while (pos != NULL)
{
CDocTemplate* pTemplate = (CDocTemplate*)m_templateList.GetNext(pos);
_AfxAppendFilterSuffix(strFilter, dlgFile.m_ofn, pTemplate,
bFirst ? &strDefault : NULL);
bFirst = FALSE;
}
}
// append the "*.*" all files filter
CString allFilter;
VERIFY(allFilter.LoadString(AFX_IDS_ALLFILTER));
strFilter += allFilter;
strFilter += (TCHAR)'; // next string please
strFilter += _T("*.*");
strFilter += (TCHAR)'; // last string
dlgFile.m_ofn.nMaxCustFilter++;
檔案加在這裡!哈哈
dlgFile.m_ofn.lpstrFilter = "圖象檔案*.bmp;*.jpg所有檔案*.*";
dlgFile.m_ofn.lpstrTitle = title;
dlgFile.m_ofn.lpstrFile = fileName.GetBuffer(_MAX_PATH);
int nResult = dlgFile.odal();
fileName.ReleaseBuffer();
// modified 5-15-00 PD: delete dialog
delete pDlg;
return nResult == IDOK;
}
好啦,夠用了吧,很簡單了。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-998964/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- VC實現對話方塊上資訊的顯示 (轉)
- 對話系統綜述
- VUE:點選開啟的對話方塊外面時,對話方塊總是被關閉Vue
- Qt標準對話方塊實現QT
- 資料夾選擇對話方塊 JS實現(轉)JS
- Electron 開啟儲存檔案對話方塊
- jQuery模擬實現聊天對話方塊jQuery
- 對話機器人ChatBot綜述機器人
- c++開啟挑選圖片對話方塊C++
- PyQt5開啟檔案對話方塊QFileDialogQT
- 實現element-ui對話方塊可拖拽功能UI
- 用win2000啟動選單實現windows全家福(轉)Windows
- [WPF]用HtmlTextBlock實現訊息對話方塊的內容高亮和跳轉HTMLBloC
- 對話方塊背景色的設定 (轉)
- pyqt-PyQt5開啟檔案對話方塊QFileDialogQT
- 對話方塊中對成批控制元件的操作 (轉)控制元件
- c#中的模態對話方塊和非模態對話方塊C#
- 1分鐘實現Autodesk Vault登入對話方塊
- Wndows外殼程式設計-呼叫"開啟方式..."對話方塊來開啟文件程式設計
- 對話方塊函式函式
- 登入對話方塊
- ASP.NET下載檔案(彈出開啟儲存檔案對話方塊)ASP.NET
- 對話系統任務綜述與基於POMDP的對話系統
- React中的模式對話方塊React模式
- Win2000下Bugzilla安裝實錄(三) (轉)
- JS彈出下載對話方塊以及實現常見檔案型別的下載JS型別
- [MFC]選擇目錄對話方塊和選擇檔案對話方塊
- 進一步學習對話方塊(轉)
- iOS專案開發實戰——彈出提示對話方塊iOS
- Qt下的模態和非模態對話方塊QT
- Win2000開啟網路鄰居慢的解決辦法(轉)
- flutter demo (四):對話方塊Flutter
- Javascript檔案對話方塊JavaScript
- Linux啟動過程綜述(轉)Linux
- 16.讓對話方塊支援拖拽操作/目錄框開啟操作
- 請問在java程式中如何調出“開啟方式”對話方塊?Java
- c# winform窗體之開啟檔案對話方塊openfiledialogC#ORM
- Win2000下總讓網路卡啟用的方法