FC2ブログ

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

CHtmlView で独自のドラッグ&ドロップする方法

MFC の CHtmlView で独自のドラッグ&ドロップする方法。

CHtmlViewを使っている場合、そのままでは自分のViewクラスの OnDragEnter や OnDrop が呼ばれない。
以下のように、OnGetDropTarget をオーバーライドして、自分が管理している IDropTarget を返してやればよい。



class CMyView : public CHtmlView
{
・・・省略・・・
virtual HRESULT OnGetDropTarget(LPDROPTARGET pDropTarget, LPDROPTARGET* ppDropTarget);
COleDropTarget* m_pDropTarget;
};

int CMyView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
・・・省略・・・(後始末なども省略)
m_pDropTarget = new COleDropTarget;
m_pDropTarget->Register(this);
}

// この OnGetDropTarget をオーバーライドするのがポイントだ
HRESULT CMyView::OnGetDropTarget(LPDROPTARGET pDropTarget, LPDROPTARGET* ppDropTarget)
{
*ppDropTarget = (LPDROPTARGET)m_pDropTarget->GetInterface(&IID_IDropTarget);
if (*ppDropTarget == NULL) {
return E_FAIL;
}
// 呼び出し側でReleaseするようなので、ここでAddRefしたままで良い。
// (自分でReleaseするとおかしなことになる)
(*ppDropTarget)->AddRef();
return S_OK;
}




これにより、 CMyView の OnDragEnter とか OnDrop が呼び出されるようになる。

CDhtmlDialog でも同様のやり方ができるかと思ったのだが、CDHtmlDialog には OnGetDropTarget がない。
ということは同じやり方はできない。
別の記事で書いたが、CHtmlViewと同じ方法でドロップを受け付けるようにするためには、数百行程度のコードを追加する必要がある。


スポンサーサイト
コメント
コメントの投稿
管理者にだけ表示を許可する

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。