1999/09/26 - OLEドラッグアンドドロップ

OLE ドラッグアンドドロップの実装方法。くまのおえかきアルバムでもやったが,ここにやり方を簡単に書いておく。

OLE の初期化のために CWinApp::InitInstance に AfxOleInit() を加える。

View に COleDropTarget メンバ変数を加え,OnInitialUpdate に COleDropTarget::Register(this) を加える。

OnLButtonDown

// データをキャッシュ
COleDataSource *pData = CacheData();
if(pData != NULL)
{
    // ドラッグアンドドロップ
    DROPEFFECT dropeffect = pData->DoDragDrop(DROPEFFECT_COPY | DROPEFFECT_MOVE);

    delete pData;

    if(dropeffect == DROPEFFECT_MOVE)
    {
        // カット
    }
}

CacheData

COleDataSource *pData = new COleDataSource;

// グローバルメモリ
HGLOBAL hData = ::GlobalAlloc(GMEM_SHARE, 4);

// メモリにコピー
char *pText = (char *)::GlobalLock(hData);
strcpy(pText, "abc");
::GlobalUnlock(hData);

pData->CacheGlobalData(CF_TEXT, hData);

return pData;

なお,くまのおえかきアルバムではユーザー定義のフォーマットも利用したが,今回はやってないので割愛。

# ちなみにファイルをショートカットにドロップして開く,というのをやりたいが,未だにやり方が分かってない。というかシェルを勉強しなきゃならないのだがなかなか本がなくて…という感じ。

# ショートカットへのドロップはその後成功。2000/05/03 参照。

コメントする