リストビューで、複数の列がある行をドラッグするのに、ユニコードライブラリを使い、TCHAR型を使うと、イメージをうまく取得できません。
.NET2003や、2005でもMFCアプリケーションウイザードで、「ユニコードライブラリを使う」のチェックをはずした場合、
int row;
CPoint point;
で、rowに行番号を入れれば
m_DragImage = CreateDragImage(row, &point);
で、複数列のイメージをきれいに取得できるのですが、
2005で「ユニコードライブラリを使う」にチェックを入れると、1列目の文字列しか表示させられません。
しかも背景色がグレイになってついてきてしまいます。
MSDNなどを調べたのですが、関連する記事は見つけられませんでした。
アドバイスをお願いいたします。
もう少しコードを詳しく書いたほうがいいと思い、アップします。
リストビュー 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()と、リストビューの描画のコードは省略します。
よろしくお願いいたします。
ツイート | ![]() |