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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
アバター
Ciel
記事: 252
登録日時: 9年前

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

#1

投稿記事 by Ciel » 9年前

お世話になります。

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

デフォルトではリストビューは複数行選択できるようになっています。
リストビューの選択状態に変化があると、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);
	}
}

oui C'est la Vie♪

アバター
みけCAT
記事: 6294
登録日時: 9年前
住所: 千葉県
連絡を取る:

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

#2

投稿記事 by みけCAT » 9年前

リストビューのウィンドウスタイルにLVS_SINGLESELを追加してみてください。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

アバター
Ciel
記事: 252
登録日時: 9年前

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

#3

投稿記事 by Ciel » 9年前

あれ?こんなに簡単にw

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

みけCATさんありがとうございました。
oui C'est la Vie♪

閉鎖

“C言語何でも質問掲示板” へ戻る