==关于注册一个文件类型的问题==

sunsfq 2004-06-26 02:08:09
我要做这样一件事情
写一个程序,用于处理自己定义的文件格式。我现在已经把程序做成安装包,并且安装的过程中注册了自己定义的文件类型。现在安装完程序后,点击自己定义的文件已经可以自动打开自己写的应用程序,现在我想点击文件打开程序的同时,也打开该文件。
就象vc中的.dsw文件,点击它后自动调用vc并打开该文件。

现在我的情况是点击程序可以调用程序,但如何让程序打开文件?

没有思路。

请指教!
...全文
288 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
sunsfq 2004-07-02
  • 打赏
  • 举报
回复
问题没有解决,自己up
sunsfq 2004-06-27
  • 打赏
  • 举报
回复
打开两个应用程序
现在就是想如何在点击自定义文件并打开关联程序的同时打开该文件
现在就是无法打开文件
再点击一个自定义文件,只会再打开一个关联程序而已
pomelowu 2004-06-26
  • 打赏
  • 举报
回复
运行两个实例是什么意思?
sunsfq 2004-06-26
  • 打赏
  • 举报
回复
不行
那样会运行两个实例
pomelowu 2004-06-26
  • 打赏
  • 举报
回复
先单独运行一次程序。之后能双击打开了吧?
sunsfq 2004-06-26
  • 打赏
  • 举报
回复
我现在做完安装包,安装后,右键菜单中已经关联上了应用程序
点击也能打开程序
关键就是,无法加载文件。
enoloo 2004-06-26
  • 打赏
  • 举报
回复
需要修改注册表。
http://www.yesky.com/20010423/171255.shtml

注册表函数看msdn: RegCreateKeyEx等。
yifanlxj 2004-06-26
  • 打赏
  • 举报
回复
错写一字,重发:
能不能不用繁体字,看起来吃力,国家推行简体字都多少年了,还有人在用繁体字,搞不懂!是故意炫耀炫耀,还是为什么!
yifanlxj 2004-06-26
  • 打赏
  • 举报
回复
能不能不用繁体字,看起来吃力,国有都推行简体字多少年了,还有人再用繁体字,搞不懂!是故意炫耀炫耀还是什么!
sunsfq 2004-06-26
  • 打赏
  • 举报
回复
BOOL CScribbleApp::InitInstance()
{
...
// Enable drag/drop open
m_pMainWnd->DragAcceptFiles();
// Enable DDE Execute open
EnableShellOpen();
RegisterShellFileTypes(TRUE);
...
}

我的程序已经包含了这些代码,拖动一个文件到程序中也可以打开文件。
但是双击一个文件时可以打开程序,但是文件无法load进来。

pomelowu 2004-06-26
  • 打赏
  • 举报
回复
汗~~重新整理了一下:

MFC 程式很容易擁有Drag and Drop 功能。意思是,你可以從Shell(例如Windows 95
的檔案總管)中以滑鼠拉動一個檔案,拖到你的程式中,你的程式因而打開此檔案並讀
其內容,將內容放到一個Document Frame 視窗中。甚至,使用者在Shell 中以滑鼠對
某個文件檔(你的應用程式的文件檔)快按兩下,也能啟動你這個程式,並自動完成開
檔,讀檔,顯示等動作。
BOOL CScribbleApp::InitInstance()
{
...
// Enable drag/drop open
m_pMainWnd->DragAcceptFiles();
// Enable DDE Execute open
EnableShellOpen();
RegisterShellFileTypes(TRUE);
...
}
這三個函式的用途如下:
CWnd::DragAcceptFile(BOOL bAccept=TRUE); 參數TRUE 表示你的主視窗以
及每一個子視窗(文件視窗)都願意接受來自Shell 的拖放檔案。CFrameWnd 內
有一個OnDropFiles 成員函式,負責對WM_DROPFIELS 訊息做出反應,它
會通知application 物件的OnOpenDocument(此函式將在第8章介紹),並夾
帶被拖放的檔案的名稱。
CWinApp::EnableShellOpen(); 當使用者在Shell 中對著本程式的文件檔快按
兩下時,本程式能夠打開檔案並讀內容。如果當時本程式已執行,Framework
不會再執行起程式的另一副本,而只是以DDE(Dynamic Data Exchange,動態
資料交換)通知程式把檔案(文件)讀進來。DDE 處理常式內建在CDocManager
之中(第8章會談到這個類別)。也由於DDE 的能力,你才能夠很方便地把
文件圖示拖放到印表機圖示上,將文件列印出來。
通常此函式後面跟隨著RegisterShellFileTypes。
CWinApp::RegisterShellFileTypes(); 此函式將向Shell 註冊本程式的文件型
態。有了這樣的註冊動作,使用者在Shell 的雙擊動作才有著力點。這個函式
搜尋Document Template 串列中的每一種文件型態,然後把它加到系統所維護
的registry(登錄資料庫)中。
在傳統的Windows 程式中,對Registry 的註冊動作不外乎兩種作法,一是準
備一個.reg 檔,由使用者利用Windows 提供的一個小工具regedit.exe,將.reg
合併到系統的Registry 中。第二種方法是利用::RegCreateKey、::RegSetValue
等Win32 函式, 直接編輯Registry。MFC 程式的作法最簡單, 只要呼叫
CWinApp::RegisterShellFileTypes 即可。
必須注意的是,如果某一種文件型態已經有其對應的應用程式(例如.txt 對應
Notepad,.bmp 對應PBrush,.ppt 對應PowerPoint,.xls 對應Excel),那麼你的程式
就不能夠橫刀奪愛。如果本例Scribble 的文件檔副檔名為.txt,使用者在Shell 中雙擊
這種檔案,啟動的將是Notepad 而不是Scribble。
另一個要注意的是,拖放動作可以把任何型態的文件檔拉到你的視窗中,並不只限於你所註冊的檔案型態。
pomelowu 2004-06-26
  • 打赏
  • 举报
回复
必須注意的是,如果某㆒種文件型態已經有其對應的應用程式(例如.txt 對應
Notepad,.bmp 對應PBrush,.ppt 對應PowerPoint,.xls 對應Excel),那麼你的程式
就不能夠橫刀奪愛。如果本例Scribble 的文件檔副檔名為.txt,使用者在Shell ㆗雙擊
這種檔案,啟動的將是Notepad 而不是Scribble。
另㆒個要注意的是,拖放動作可以把任何型態的文件檔拉到你的視窗㆗,並不只限於你所註冊的檔案型態。
pomelowu 2004-06-26
  • 打赏
  • 举报
回复
MFC 程式很容易擁有Drag and Drop 功能。意思是,你可以從Shell(例如Windows 95
的檔案總管)㆗以滑鼠拉動㆒個檔案,拖到你的程式㆗,你的程式因而打開此檔案並讀
其內容,將內容放到㆒個Document Frame 視窗㆗。甚至,使用者在Shell ㆗以滑鼠對
某個文件檔(你的應用程式的文件檔)快按兩㆘,也能啟動你這個程式,並自動完成開
檔,讀檔,顯示等動作。
BOOL CScribbleApp::InitInstance()
{
...
// Enable drag/drop open
m_pMainWnd->DragAcceptFiles();
// Enable DDE Execute open
EnableShellOpen();
RegisterShellFileTypes(TRUE);
...
}
這㆔個函式的用途如㆘:
CWnd::DragAcceptFile(BOOL bAccept=TRUE); 參數TRUE 表示你的主視窗以
及每㆒個子視窗(文件視窗)都願意接受來自Shell 的拖放檔案。CFrameWnd 內
有㆒個OnDropFiles 成員函式,負責對WM_DROPFIELS 訊息做出反應,它
會通知application 物件的OnOpenDocument(此函式將在第8章介紹),並夾
帶被拖放的檔案的名稱。
CWinApp::EnableShellOpen(); 當使用者在Shell ㆗對著本程式的文件檔快按
兩㆘時,本程式能夠打開檔案並讀內容。如果當時本程式已執行,Framework
不會再執行起程式的另㆒副本,而只是以DDE(Dynamic Data Exchange,動態
資料交換)通知程式把檔案(文件)讀進來。DDE 處理常式內建在CDocManager
之㆗(第8章會談到這個類別)。也由於DDE 的能力,你才能夠很方便㆞把
文件圖示拖放到印表機圖示㆖,將文件列印出來。
通常此函式後面跟隨著RegisterShellFileTypes。
CWinApp::RegisterShellFileTypes(); 此函式將向Shell 註冊本程式的文件型
態。有了這樣的註冊動作,使用者在Shell 的雙擊動作才有著力點。這個函式
搜尋Document Template 串列㆗的每㆒種文件型態,然後把它加到系統所維護
的registry(登錄資料庫)㆗。
在傳統的Windows 程式㆗,對Registry 的註冊動作不外乎兩種作法,㆒是準
備㆒個.reg 檔,由使用者利用Windows 提供的㆒個小工具regedit.exe,將.reg
合併到系統的Registry ㆗。第㆓種方法是利用::RegCreateKey、::RegSetValue
等Win32 函式, 直接編輯Registry。MFC 程式的作法最簡單, 只要呼叫
CWinApp::RegisterShellFileTypes 即可。
Wenxy1 2004-06-26
  • 打赏
  • 举报
回复
要关联文件的打开程序。

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧