リストビューのドロップハイライト – プログラミング – Home

リストビューのドロップハイライト
 
通知
すべてクリア

[解決済] リストビューのドロップハイライト


aetos
(@aetos)
Noble Member
結合: 6年前
投稿: 1480
Topic starter  

リストビューで、アイテムをドラッグドロップで並べ替える処理をしています。
並べ替え自体はできるようになったのですが、ドロップターゲットになっているアイテ
ムをハイライト表示にできません。

以下のようなコードを書いて見ましたがダメでした。
アイテムの上半分とか下半分だけハイライトされたり、ハイライトされたまま戻らなか
ったり。

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 );
}


引用
トピックタグ
aetos
(@aetos)
Noble Member
結合: 6年前
投稿: 1480
Topic starter  

ごめんなさい。自己解決です。
SetItemState の後に UpdateWindow 入れただけで解決しました。

#これでレスを待たずに自己解決しちゃったの何度目だろう…
#ロクに調べず質問してる証拠ですね。板汚し、申し訳ありませんでした。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました