當我們雙擊一個txt文件的圖標時,系統就會用記事本打開該文件,這就是程序的關聯。那我們自己編寫的程序如何建立關聯文件呢?
第一步:設置自己程序關聯的文件類型
打開資源下的String Table,找到其中的IDR_MAINFRAME,雙擊該項,修改它的值,設它原來的值是:
TextEditor\n\nTextEd\n\n\nTextEditor.Document\nTextEd Document
若你關聯的文件類型爲.txt,則把它改爲:
TextEditor\n\nTextEd\n\n.txt\nTextEditor.Document\nTextEd Document
第二步:在操作系統中註冊自己的程序
在應用程序類CxxApp的InitInstance()函數中加入一條語句RegisterShellFileTypes();該語句就是可在系統中註冊自己的程序關聯的文件。
第三步:讀取外部的文件名
在應用程序類CxxApp的頭文件中定義一個變量CString m_PathName;用來接收雙擊圖標時傳入的文件名,在CxxApp的構造函數中,把它的初值置爲空串,m_PathName=_T("");
在應用程序類CxxApp的InitInstance()函數中再加入一條語句EnableShellOpen();這樣在雙擊關聯文件的圖標時,文件名將被傳入程序的cmdInfo結構中;
我們再把文件名讀入m_PathName中就行了,m_PathName = cmdInfo.m_strFileName;
以下爲InitInstance()函數中需要修改的部分:共加入了三條語句
CSingleDocTemplate* pDocTemplate;
pDocTemplate = new CSingleDocTemplate(
IDR_MAINFRAME,
RUNTIME_CLASS(CTextEditorDoc),
RUNTIME_CLASS(CMainFrame), // main SDI frame window
RUNTIME_CLASS(CTextEditorView));
AddDocTemplate(pDocTemplate);
EnableShellOpen(); //接收外部命令行
RegisterShellFileTypes(); //在Windows中註冊關聯文件
// Parse command line for standard shell commands, DDE, file open
CCommandLineInfo cmdInfo;
ParseCommandLine(cmdInfo);
m_PathName = cmdInfo.m_strFileName;//讀取命令行中的文件名
// Dispatch commands specified on the command line
if (!ProcessShellCommand(cmdInfo))
return FALSE;
第四步:利用收到的文件名打開文件
在文檔類或視類的初始化部分檢測m_PathName的值,若它不是空串,則打開並裝入該文件:
if(!((CxxApp *)AfxGetApp()->m_PathName.IsEmpty()))
{
CFile file;
file.Open( PathName, CFile::modeRead );
file.Read( …… );
……
}
如果你的文檔是用串行化自動打開的,也許不需要定義m_PathName,這一步可能也不需要做,這點我沒試過,你自己試試看吧。
第五步:在機器中找一個關聯文件,右鍵單擊它的圖標,從打開方式中選擇你註冊過的程序。當然如果該類文件原來沒有其它關聯程序,這一步可以不做,只要雙擊圖標就能打開。
VC中建立程序的關聯文件
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章
Gdi+ 畫筆
畫筆常用於繪製圖形的輪廓.GDI+的畫筆除了具有常見的色彩和寬度屬性外,還具有對齊方式,線帽,變換方式等屬性。GDI+中通過Pen類來定義畫筆對象
gavin710
2020-06-15 03:55:52
使用MFC創建懸浮窗口
gavin710
2020-05-23 00:40:43
MFC中獲得各個類的句柄的總結
gavin710
2020-02-23 22:18:24
C++ 繼承:私有繼承 保護繼承 公有繼承
gavin710
2020-02-23 22:18:24
Gdi+ Graphics常用繪圖函數
gavin710
2020-02-23 22:18:24
VC++ MFC socket編程
SpiritedAway
2020-02-23 10:10:59
VC工具:Depends
SpiritedAway
2020-02-23 10:10:59
cannot find the definition (implementation) of this function
SpiritedAway
2020-02-23 10:10:59
VC中句柄、指針、ID之間的轉換
lita0000
2020-02-22 22:27:42
VC6.0MFC動態加載位圖中出現的問題
bluecoder66
2020-02-20 18:39:21
MFC嵌入OpenGL時提示hglrc未定義類型
bluecoder66
2020-02-20 18:39:20
Windows基本數據類型 和常用的預定義句柄類型
congzhao27
2020-02-20 13:56:31
CImagePalette.MakePalette method
congzhao27
2020-02-20 13:56:31