.NET2005でのCreateDragImageの使い方


my  2007-04-14 17:43:22  No: 64922

リストビューで、複数の列がある行をドラッグするのに、ユニコードライブラリを使い、TCHAR型を使うと、イメージをうまく取得できません。

.NET2003や、2005でもMFCアプリケーションウイザードで、「ユニコードライブラリを使う」のチェックをはずした場合、

int row;
CPoint point;

で、rowに行番号を入れれば

m_DragImage = CreateDragImage(row, &point);

で、複数列のイメージをきれいに取得できるのですが、
2005で「ユニコードライブラリを使う」にチェックを入れると、1列目の文字列しか表示させられません。
しかも背景色がグレイになってついてきてしまいます。

MSDNなどを調べたのですが、関連する記事は見つけられませんでした。

アドバイスをお願いいたします。


my  2007-04-14 18:16:54  No: 64923

もう少しコードを詳しく書いたほうがいいと思い、アップします。

リストビュー m_list1 から m_list2 にドラッグ&ドロップさせるコードで、
m_list1をサブクラス化(CmyListCtrl)しました。

CImageList* m_pDragImage;
BOOL m_bDrag; 
HTREEITEM m_hitemDrag;
int iRow, nLen, nIndex;
CPoint nPo, pPo;

として

void CmyListCtrl::OnLButtonDown(UINT nFlags, CPoint point)
{
    iRow = HitTest(point); 
    nLen = point.x;

    CListCtrl::OnLButtonDown(nFlags, point);
}

void CmyListCtrl::OnMouseMove(UINT nFlags, CPoint point)
{
    POINT pt;
    if (m_bDrag) { 
        pt.x = point.x-nLen; pt.y = point.y;
        ClientToScreen( &pt );
        CImageList::DragMove(pt); 
    }

    CListCtrl::OnMouseMove(nFlags, point);
}

void CmyListCtrl::OnLvnBegindrag(NMHDR *pNMHDR, LRESULT *pResult)
{
    LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);

    if( !(m_pDragImage = CreateDragImage(iRow, &pPo)) ) {return; }
    m_bDrag = TRUE;
    m_pDragImage->BeginDrag(0, CPoint(0, 0));
    ClientToScreen( &pPo );
    m_pDragImage->DragEnter(NULL, pPo);
    SetCapture();

    *pResult = 0;
}

OnLButtonUp()と、リストビューの描画のコードは省略します。

よろしくお願いいたします。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加