リストビューで、アイテムをドラッグドロップで並べ替える処理をしています。
並べ替え自体はできるようになったのですが、ドロップターゲットになっているアイテ
ムをハイライト表示にできません。
以下のようなコードを書いて見ましたがダメでした。
アイテムの上半分とか下半分だけハイライトされたり、ハイライトされたまま戻らなか
ったり。
DragShowNoLock の代わりに DragLeave と DragEnter を使った時に、DragEnter に渡す
座標を間違えてドラッグイメージが見当違いの場所に表示されてしまった時は、正常に
ハイライトできました。
このことから、アイテムにドラッグイメージが重なっているのがマズいのではないかと
思いますが、重ならずして何のドラッグイメージ、何のドロップハイライトでしょう
か。
どうか、正常にハイライトできる方法をご存知でしたらご教示願えないでしょうか。
よろしくお願いします。
#ツリービューなら楽なのになぁ…
// 以下コード抜粋 -------------------------------------------------------------
void CConfigDlg::OnMouseMove( UINT nFlags, CPoint point )
{
// TODO : ここにメッセージ ハンドラ コードを追加するか、既定の処理を呼
び出します。
if( ! m_bDragging )
{
return;
}
MapWindowPoints( &m_ctlList, &point, 1 );
UINT uFlags = 0;
int nHitItem = m_ctlList.HitTest( point, &uFlags );
if( nHitItem == -1 || ( uFlags & LVHT_ONITEM ) == 0 )
{
return;
}
m_dragImageList.DragShowNolock( FALSE );
int nItem = m_ctlList.GetNextItem( -1, LVNI_DROPHILITED );
while( nItem != -1 )
{
if( nItem != nHitItem )
{
m_ctlList.SetItemState( nItem, ~LVIS_DROPHILITED,
LVIS_DROPHILITED );
}
nItem = m_ctlList.GetNextItem( nItem, LVNI_DROPHILITED );
}
m_ctlList.SetItemState( nHitItem, LVIS_DROPHILITED,
LVIS_DROPHILITED );
m_dragImageList.DragShowNolock( TRUE );
m_dragImageList.DragMove( point );
}
ごめんなさい。自己解決です。
SetItemState の後に UpdateWindow 入れただけで解決しました。
#これでレスを待たずに自己解決しちゃったの何度目だろう…
#ロクに調べず質問してる証拠ですね。板汚し、申し訳ありませんでした。