ゲスト[ログイン]

おおいしゆうのASミュージックスコア登録CGI

おおいしゆうが日々のフォルテール演奏の記録を書き続けるCGI(日記じゃないです。blogでもないです)

工画堂スタジオ 『スマイル☆シューター ~ふぁーすと☆ちけっと~』OHP

パルフェ10周年ポータル パルフェ10周年寄せ書き企画

Aozora Melodyのパーフェクト動画公開中!

日 (今日 最終日)
日 ~ 日 (全部)
フォルテール総合情報サイト
ASミュージック
ポータル

同曲演奏状況
CSV登録
工画堂スタジオ&ヤマサ 『スマイル☆シューター ~ふぁーすと☆ちけっと~』応援中!
工画堂スタジオ 『ソルフェージュ~La finale~』OHP
普通に(ファイルの)ドラッグ&ドロップを行うときは、プロジェクトを作るときにオートメーションを有効にしておき、

CWinAppクラスの中にCOleDataSource ods を作成(何故かアプリケーション終了時に破棄しないとASSORTが出たりメモリリークするので…)

構造体HDROPDataを定義。これはファイル1つだけの簡易版で、複数のファイルをドラッグするときはDROPFILES構造体の直後にNULL終端文字列でファイル名を並べ、最後にもう1つNULLを置きます(従って全データの終端はNULL2連続になります)。
#pragma pack(push,1)
struct _HDROPData {
DROPFILES df;
TCHAR fname[_MAX_PATH+1];
BYTE endofData;
};
#pragma pack(pop)

ドラッグ元のOnLButtonDownあたりで

struct _HDROPData HDROPData;
memset(&HDROPData,0,sizeof(HDROPData));
HDROPData.df.pFiles=sizeof(DROPFILES);
HDROPData.df.pt.x=0;
HDROPData.df.pt.y=0;
HDROPData.df.fNC=FALSE;
HDROPData.df.fWide=FALSE;
_tcsncpy(HDROPData.fname,ファイル名,長さ);
HGLOBAL hMem=GlobalAlloc(GHND|GMEM_ZEROINIT,sizeof(HDROPData));
if(hMem==NULL){return;};
LPVOID vp=GlobalLock(hMem);
if(vp==NULL){GlobalFree(hMem);return;};
memcpy(vp,&HDROPData,sizeof(DROPFILES)+ファイル名の長さ+2);
GlobalUnlock(hMem);
theApp.ods.CacheGlobalData(CF_HDROP,hMem);
DROPEFFECT result=theApp.ods.DoDragDrop(DROPEFFECT_COPY);
theApp.ods.Empty();
GlobalFree(hMem);

などとやってやればいいのですが(こんなOnLButtonDownを実装したCDragButtonクラスでも派生させておくといいでしょう)、なんか別スレッド立ててやると上手く行きません。


メイン以外のスレッドで同じ事をやるには、
CWinThreadクラスをオートメーションOnで作成し、
CWinThread::InitInstance内でAfxInit()を実行し(超強引… もっとましな手があったら教えてください)
COleDropSourceの派生クラス(CCustomDropSourceとしますが)を作成し、CWnd* pSourceWndメンバを作ってあらかじめドラッグ元のCWndのポインタを設定しておき、
BOOL CCustomDropSource::OnBeginDrag(CWnd *pWnd)
{
 if(pSourceWnd==NULL){return COleDropSource::OnBeginDrag(AfxGetMainWnd());};
 return COleDropSource::OnBeginDrag(pSourceWnd);
}
としておき、
CCustomDropSource cds;
DROPEFFECT result=theApp.ods.DoDragDrop(DROPEFFECT_COPY,NULL,&cds);
とDoDragDropの第3引数でポインタを渡してやればOKです。
名前: ひとこと:
この記事へのトラックバックURL: https://www.asmusic.jp/ASHARD/score/tb.cgi/yu-oishi/20070616_2手動トラックバック