VC中建立程序的關聯文件

當我們雙擊一個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,這一步可能也不需要做,這點我沒試過,你自己試試看吧。

第五步:在機器中找一個關聯文件,右鍵單擊它的圖標,從打開方式中選擇你註冊過的程序。當然如果該類文件原來沒有其它關聯程序,這一步可以不做,只要雙擊圖標就能打開。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章