です。
結局、完璧に理解していないのでよろしくないのですがメモってことで。
最低限必要な部分を抜き出してサンプルを用意しました。
オリジナルのメッセージを処理するのはそれほど難しくないと思います。
エクスプローラーなどからファイルをドロップされる場合の処理は、DragAcceptFilesで前準備をしておくことなど決まった処理が必要になります。
当たり前ですが、オリジナルのメッセージはPostMessageなどで定義したメッセージIDを飛ばさなければいつまで待っても届きませんのでご注意ください。(ノ*゜▽゜*)ノ
// form1.cpp
#include <ShellAPI.h>
#include "form1.h"
//---------------------------------------------------
void __fastcall TMainWin::FormShow(TObject *Sender)
{
//ファイルのドラッグ&ドロップの許可
DragAcceptFiles(Handle,true);
}
//---------------------------------------------------
//オリジナルメッセージ応答関数
LRESULT TForm1::onOriginal(TMessage &Message)
{
//オリジナルメッセージに対する処理
return 0;
}
//---------------------------------------------------
//ファイルがドロップされたときのイベント
void TForm1::onDropfiles(TWMDropFiles &Msg)
{
char FileName[MAX_PATH];
//ドロップされたファイルの数を取得
int count = DragQueryFile((HDROP)Msg.Drop,0xffffffff,NULL,255);
for(int i=0;i<count;i++){
//ファイル名を得る
DragQueryFile((HDROP)Msg.Drop,i,FileName,255);
}
//ドロップ情報処理終了
DragFinish((HDROP)Msg.Drop);
}
// form1.h
//メッセージ番号を定義
#define WM_ORIGINAL WM_APP + 10
//-----------------------------------------
class TForm1 : public TForm
{
__published: // IDE 管理のコンポーネント
void __fastcall FormShow(TObject *Sender);
//略
private:
//オリジナルメッセージプロージャ
LRESULT onOriginal(TMessage &Message);
//ドロップファイル処理用プロージャ
void onDropfiles(TWMDropFiles &Msg);
BEGIN_MESSAGE_MAP
//オリジナルメッセージ用
MESSAGE_HANDLER(WM_ORIGINAL, TMessage, onOriginal)
//ドラッグ&ドロップ用
MESSAGE_HANDLER(WM_DROPFILES,TWMDropFiles,onDropfiles)
END_MESSAGE_MAP(TForm)
//略
};