ページ 11

リストビューで複数行選択させないようにする方法

Posted: 2010年12月29日(水) 19:47
by Ciel
お世話になります。

リストビューの行を削除する際に、わかりやすくするために
リストビューで複数行選択させないようにする方法を知りたいです。

デフォルトではリストビューは複数行選択できるようになっています。
リストビューの選択状態に変化があると、WM_NOTIFYメッセージがウィンドウプロシージャに送られ、
LPARAMにあるNMHDR構造体のポインタから、該当のリストビューの選択状態に変化があったことを示す、
LVN_ITEMCHANGEDの通知コードかどうかを調べるところまではできたんですが、
その後の、「フォーカスが当たっているところだけ選択状態にする」方法がわかりません。

以下はその一部のコードですが、
方法として、
ListView_GetNextItemでフォーカスが当たっている行のインデックスを取得し、
ListView_SetItemStateで該当行を選択状態にする方法を行ってみたんですが 、
実際に複数行を選択しようとすると、何故か全行選択されてしまいます。

どうにかして、「フォーカスが当たっている所だけ選択状態にする」方法をご存知の方いらっしゃいませんでしょうか?

コード:

hdr=(NMHDR*)lp;

			
if(hdr->hwndFrom==list_hwnd && hdr->idFrom==CHILD_LISTVIEW){
				
	if(hdr->code==LVN_ITEMCHANGED){
	//まずフォーカスが当たっているところの場所のインデックスを調べる。
	index=ListView_GetNextItem(list_hwnd,-1,LVNI_ALL | LVNI_FOCUSED);
	//フォーカスが当たっている行だけを、選択状態にする。
	ListView_SetItemState(list_hwnd,index,LVIS_SELECTED,LVIS_SELECTED);
	}
}


Re: リストビューで複数行選択させないようにする方法

Posted: 2010年12月29日(水) 20:18
by みけCAT
リストビューのウィンドウスタイルにLVS_SINGLESELを追加してみてください。

Re: リストビューで複数行選択させないようにする方法

Posted: 2010年12月29日(水) 20:34
by Ciel
あれ?こんなに簡単にw

ウィンドウスタイルに専用のスタイルがありましたか。。。
見逃してましたw

みけCATさんありがとうございました。