WindowsAPIのリストビューのチェックボックスでの質問
開発環境はVS.NET2003です。
リストビューでチェックボックスを使っているのですが、
チェックボックスを1つしかチェックできないようにしたいのです。
リストビューの拡張スタイルであるLVS_EX_CHECKBOXESを指定してチェックボックスのあるリストビューを作成したのですが、チェックできるのが一つのみにしたいのです。
LVN、LVNIメッセージを調べたのですが、これに該当するものが見つからないためここで質問しました。
LV_DISPINFO構造体を使ってメッセージを受け取るのですが、ここで変更を行ったほうがいいんでしょうか?
C++とありましたが、ListCheckBoxクラスを使用していません。
このクラスを使用しない方法をお願いします。
No.1ベストアンサー
- 回答日時:
こんばんは。
WM_NOTIRYメッセージ内のLVN_ITEMCHANGEDで、以前クリックされたリスト項目に向かって、チェックを外す処理をするしかなさそうです。
http://msdn.microsoft.com/en-us/library/bb774845 …
flag = (pnmv->uNewState & LVIS_STATEIMAGEMASK)として、
flag == INDEXTOSTATEIMAGEMASK(1)が、チェック無し、
flag == INDEXTOSTATEIMAGEMASK(2)が、チェックありです。
同じチェックボックスをクリックされて、チェックが外れてしまった時の事は考えていませんが、大体以下の様な感じです。参考程度で。
case WM_NOTIFY:
{
static int _S_iOldItem = -1;
LPNMLISTVIEW pnmv = (LPNMLISTVIEW)lParam;
if(pnmv->hdr.idFrom == IDC_LISTVIEW1)
{
switch(pnmv->hdr.code)
{
case LVN_ITEMCHANGED:
{
const int iState = pnmv->uNewState & LVIS_STATEIMAGEMASK;
//チェックされた
if(iState == INDEXTOSTATEIMAGEMASK(2))
{
//以前クリックされたアイテムからチェックを外す
if(_S_iOldItem != -1)
{
LVITEM item = {sizeof(item)};
item.mask = LVIF_STATE;
item.stateMask = -1;
item.iItem = _S_iOldItem;
ListView_GetItem(pnmv->hdr.hwndFrom, &item);
item.state &= ~LVIS_STATEIMAGEMASK;
item.state |= INDEXTOSTATEIMAGEMASK(1);
ListView_SetItem(pnmv->hdr.hwndFrom, &item);
}
_S_iOldItem = pnmv->iItem;
}
}
break;
}
}
}
break;
回答ありがとうございます。
お陰でチェックボックスのチェックを外すことができました。
uNewStateメンバにマスクをして、チェックされているかをINDEXTOSTATEIMAGEMASK(2)で
判定すればいいんですね。
ListView_SetCheckStateマクロを使ってもうまくいくみたいです。
ソースを載せてくださり本当に感謝しています。
ありがとうございます。m( )m
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルVBAでチェックボックスにチェックを入れる 1 2022/09/14 00:52
- JavaScript jquery 診断コンテンツにチェックボックスを付けたいです 3 2023/01/19 18:31
- Excel(エクセル) 画像のようなチェックボックスとハイパーリンクがありますが、 ハイパーリンクを押すと、チェックボックス 1 2023/04/07 12:56
- JavaScript javaScriptで画面に値を入れるには 1 2022/08/14 12:27
- Visual Basic(VBA) リストビューに条件による表示 1 2022/06/01 20:19
- Access(アクセス) チェックボックスにチェックが入った後の挙動 1 2022/08/21 12:39
- Excel(エクセル) スプレッドシートのチェックボックスとフィルタを連携させたい 2 2022/09/26 18:02
- Visual Basic(VBA) VBA リボンののリカバリーでオーバーフローエラーになります 2 2023/07/04 19:07
- Excel(エクセル) 表内で、Enterキーで横→行の最後入力したら次の行の先頭に移動するマクロを作りたい 3 2022/05/01 21:19
- Access(アクセス) アクセスで、androidのスマホサイズのフォームは作れますか?テキストとチェックボックスだけのフォ 1 2023/05/31 00:53
このQ&Aを見た人はこんなQ&Aも見ています
-
外出時に「待たせる妻」vs イライラする「待つ夫」は日本だけ?見習いたい海外事情
夫の家事参加に積極的なイメージのある海外でも、同様の事例はあるのか。結婚カウンセラーの佐竹悦子さんに伺ってみた。
-
リストコントロールのデータの変更を検知したい
C言語・C++・C#
-
ダイアログ表示時にチェックボックスにチェックされている状態にするには?
C言語・C++・C#
-
コンボボックスの高さを変更したい。
C言語・C++・C#
-
-
4
ボタンの表示の色、フォントを変更したい
C言語・C++・C#
-
5
VC++でコントロールの境界線を描画する方法
C言語・C++・C#
-
6
CFileDialogの最初のディレクトリ設定
C言語・C++・C#
-
7
vba Listviewでのチェックボックスのイベントを教えてください
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ArduinoのジャイロモジュールMP...
-
C言語をコンパイルするとコンピ...
-
mallocについて
-
C言語 列挙型(enum型)変数について
-
scipy っていうのをいれようと...
-
Int('1234') で、strをかんたん...
-
あなたは、Excelはどうやって学...
-
パイソンの
-
VisualStudio2022でC言語プログ...
-
pythonの質問です。
-
どなたかこのプログラミングを...
-
chatgptでつくってもらったコー...
-
c言語
-
プログラミング言語の制作方法...
-
終端記号、非終端記号とは
-
License='MIT' ってなんでmitな...
-
VisualStudioでのプログラミン...
-
Notepad++の関数リスト表示でC...
-
プログラミングについての質問...
-
卒業研究でよく分からないとこ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
FriendとPublicの違い。。。
-
既定のコンストラクタがない?
-
(UWSC) 「#32770」の意味わかり...
-
クラスのアドレスを引数として...
-
ダイアログ表示時にチェックボ...
-
イベントにAddHandlerされてい...
-
【ASP.NET】 独自で作成したク...
-
MFCアプリのコマンドラインでパ...
-
DebugクラスとTraceクラスの違い
-
ボタンのオーナードローについて
-
OnInitDialog()の関数の組み込み方
-
IncludeではなくClassで宣言す...
-
関数の呼び出し元の検索
-
このコンパイルエラーの意味に...
-
C++ protectedにアクセス不可
-
C++で継承元のクラスの代入演算...
-
DataGridViewのセルに斜線を引...
-
C#で通常のbuttonコントロール...
-
エディットコントロールのイベ...
-
CMainFrameクラスの使い方
おすすめ情報