カテゴリー
アーカイブ
2021/03/17 / SDI exe でファイルのドロップ への1件のコメント
SDI exe でファイルをドロップされた時,関連する異なるファイルを開きたくなった.
次の様に,変換済みのデータが存在している時はそれを対象とする.
https://dev.mish.work/wordpress/2021/03/03/win-prevent-2nd/
ドキュメントクラスの OnOpenDocument で変更するのは可能だが「MRU ファイル リスト」に残ってしまう.
15 年位前に,ブラウザからリンクをドロップして動作させるコードを書いた.
最近のブラウザでは,当時の様な操作はできないみたい.
WM_DROPFILES でリンクのテキストが取れたのだったと思う.
この時,何を参考にしてここにたどり着いたかは不明.
それを見ると CMainFrame::OnDropFiles にコードが書いてある.
デフォルトのコードとしては,CFrameWnd::OnDropFiles を呼出している.
::DragQueryFile でファイル名を取って CWinApp::OpenDocumentFile を呼出している.
CMainFrame::OnDropFiles でファイル名を取った後,処理を追加して CWinApp::OpenDocumentFile を呼べば良い.
手順としては (VC)\…\atlmfc\src\mfc\winfrm.cpp の CMainFrame::OnDropFiles をコピーして編集している.
void CMainFrame::OnDropFiles(HDROP hDropInfo)
{
SetActiveWindow(); // activate us first !
CWinApp* pApp = AfxGetApp();
ASSERT(pApp != NULL);
v_tstring files = ::DropFilesTo(hDropInfo) ;
if (files.size() > 0) {
tstring file = files[0] ;
// ここで,必要に応じてファイル名を変更するなどの処理
pApp->OpenDocumentFile(file.c_str()) ;
}
::DragFinish(hDropInfo);
// CFrameWnd::OnDropFiles(hDropInfo);
}
今回は SDI なのでこんな感じ.MDI であればループで回せば良い.
Is this 投稿 useful?
Useful
Useless
0 of 0 people say this 投稿 is useful.