LVN_BEGINDRAGにマップされる関数 | |
void CHoge::OnBegindrag(NMHDR* pNMHDR, LRESULT* pResult) { NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR; *pResult = 0; } | |
値 | |
名前 | 説明 |
pNMHDR | LVN_BEGINDRAGメッセージを出したコントロールのハンドル |
pResult | 戻り値 |
OnBeginDrag()関数での処理 |
private: CPoint m_dragPos; //D&Dをしている位置 CImageList m_lpDragImage; //D&D用のイメージを格納するImageList BOOL m_isDragDrop; //TRUE:D&Dしている / FALSE:D&Dしていない ・・・中略・・・ void CHoge::OnBegindrag(NMHDR* pNMHDR, LRESULT* pResult) { NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR; //D&Dの準備を行う POINT *drPt = &pNMListView->ptAction; m_dragPos = CPoint(*drPt); if(pNMListView->iItem != -1){ //ドラッグ用のイメージを取得する m_lpDragImage = CreateDragImage(pNMListView->iItem, drPt); if(m_lpDragImage != NULL){ //D&Dの開始 m_lpDragImage->BeginDrag(0, CPoint(0,0)); m_lpDragImage->DragEnter(this, CPoint(*drPt)); SetCapture(); //D&D管理変数をTRUEに isDragDrop = TRUE; }else{ isDragDrop = FALSE; } } *pResult = 0; } |
LVN_BEGINDRAGにマップされる関数 | |
void CHoge::OnMouseMove(UINT nFlags, CPoint point) { CListCtrl::OnMouseMove(nFlags, point); } | |
値 | |
名前 | 説明 |
nFlags | 押されている仮想キー |
point | 現在のマウスの位置 |
OnMouseMove()関数での処理 |
void CHoge::OnMouseMove(UINT nFlags, CPoint point) { if(m_isDragDrop){ //ドラッグ アンド ドロップ m_dragPos = point; MapWindowPoints(this, &m_dragPos, 1); //イメージを現在のマウスの位置に移動 m_lpDragImage->DragMove(m_dragPos); } CListCtrl::OnMouseMove(nFlags, point); } |
WM_LBUTTONUPにマップされる関数 | |
void CHoge::OnLButtonUp(UINT nFlags, CPoint point) { CListCtrl::OnLButtonUp(nFlags, point); } | |
値 | |
名前 | 説明 |
nFlags | 押されている仮想キー |
point | 現在のマウスの位置 |
OnLButtonUp()関数での処理 |
void CHoge::OnLButtonUp(UINT nFlags, CPoint point) { CListCtrl::OnLButtonUp(nFlags, point); if(m_isDragDrop){ ReleaseCapture(); m_lpDragImage->DragLeave(this); m_lpDragImage->EndDrag(); //アイテムの移動処理を記述 delete m_lpDragImage; m_lpDragImage = NULL; m_isDragDrop = FALSE; } } |