
No.3ベストアンサー
- 回答日時:
★アドバイス
>また話は少し変わってしまうのですが、リストビューに項目を追加したときに、
>その追加した行にフォーカスが合って、スクロールバーが自動的に下がってくるように
>することは可能でしょうか。
↑
可能です。
ListView_EnsureVisible( hList, 追加した行, TRUE );
とします。これで自動的に最後に追加した行にスクロールします。
・あとちょっと不明な点がありますが、
(1)追加した行にフォーカスを合わせるのか?
(2)追加した行に範囲選択を設定するのか?
どっちでしょうか。
どちらにしても ListView_SetItemState() マクロで設定できますけど。
・(1)フォーカスを合わせる
ListView_SetItemState( hList, 追加した行, LVIS_FOCUSED, LVIS_FOCUSED );
・(2)追加した行に範囲選択を設定する
ListView_SetItemState( hList, 追加した行, LVIS_SELECTED, LVIS_SELECTED );
とします。
※フォーカスと範囲選択は違います。注意。
>今回はある特定の行ではなく、リストビューのどこかの行が選択されているという
>イベントハンドラがあればと思っているのですが、そのようなものはあるのでしょうか。
↑
イベントハンドラはないと思いますけど。
その代わりに ListView_GetItemState()、ListView_GetNextItem() マクロのチェックで
分かると思います。ListView_GetNextItem() で LVIS_SELECTED フラグを見つければ
その行とかが分かると思います。
・あるいは先頭行から順番に ListView_GetItemState() マクロで LVIS_SELECTED フラグが
立っている行を自分で検索するとかすれば良い。
詳しくは下の『参考URL』をどうぞ。
・以上。
参考URL:http://www.geocities.jp/ekakibuta/Programing/Lis …
この回答への補足
なんだか、難しく考えすぎていたのと、ListView_GetNextItem()のマクロをよく理解していなかったことが分かりました。
ListView_GetNextItem(hList, -1, LVNI_ALL | LVNI_SELECTED);の戻り値を判定するだけで、
選択されている行があるかはどうか分かりますね。
しかしまだ、フォーカスと選択の違いはわかりません。
『参考URL』、参考にさせていただきました。ありがとうございました。
さっそくのご回答ありがとうございます。
いつもお世話になりっぱなしですみません。
フォーカスが当たっていることと、選択されていることの違いが正直良く分かっていません。
最初に質問させていただいたことと若干変わってきてしまっているのですが、
アプリを立ち上げたとき、リストビューはまだどこも選択されていませんので、
エディットボックスに何か入力されたとしても、『変更』ボタンは有効にしたくないのです。
現在のプログラムですと、何か入力されると『変更』ボタンが有効になってしまいます。
ですので、そのとき、リストビューが選択状態にあるのか・ないのかを知りたいのです。
もしくは、最初質問させていただいたように、「リストビューが選択状態(1行が青色や灰色の背景になる状態)にあって、
エディットボックスが空欄では無いときに、『変更』ボタンを有効にする」という処理にしたいと思っています。
何どもお手数をおかけしてしまいますが、よろしくお願いいたします。
No.4
- 回答日時:
★次の通知メッセージを処理。
・『LVN_ITEMCHANGING』でリストビューのクリックを検出可能。
『LVN_ITEMCHANGED』でリストビューの選択項目が変化を検出可能。
両方とも WM_NOTIFY メッセージでキャッチしてクリック時に
ListView_GetNextItem() マクロで選択位置をチェックすれば良い。
・これでご希望通りの動作を実装できると思います。
詳しい方法などをネット検索すればよい。
検索キーワードは『LVN_ITEMCHANGING』とか『WM_NOTIFY』とかで行うと良い。
その他:
・リストビューでは複数行を選択可能ですのでその選択状態とフォーカスの位置が
存在します。実際に『更新』、『削除』などのボタンを処理するときは選択状態
のほかにフォーカス位置を処理するようにしないとまずです。
・選択状態を1行しか行わないように LVN_ITEMCHANGED を工夫すれば処理できます。
何もしないと複数の選択行がつきます。ListView_GetNextItem() マクロで検索するとき
『LVNI_SELECTED』以外にもフォーカス位置の『LVNI_FOCUSED』を追加して下さい。
・以上。あとは頑張りましょう。
いつも、お世話になっております。
目的の処理は実装できました。
そして、以前他の質問で教えていただいたリストビューのソートの処理も、無事実装することができました。
本当にありがとうございました。
No.2
- 回答日時:
★追記。
・アイテムの選択状態を設定/取得は
ListView_SetItemState( hWnd, nPos, data, mask );
ListView_GetItemState( hWnd, nPos, mask );
でも分かりますね。
サンプル:
UINT uiState = ListView_GetItemState( hList, iItem, LVIS_SELECTED | LVIS_FOCUSED );
if ( uiState & LVIS_SELECTED ){
// 選択されている
}
else if( uiState & LVIS_FOCUSED ){
// フォーカスがある
}
else{
// 選択されていない
}
以上。
この回答への補足
後者は、以下のマクロを使うことで解決しました。
ListView_EnsureVisible(hList, nItem, FALSE);
どうもお騒がせいたしました。
返答が遅くなってしまい大変申し訳ありません。
いつも、丁寧に分かりやすい回答をいていただきありがとうございます。
今回はある特定の行ではなく、リストビューのどこかの行が選択されているというイベントハンドラが
あればと思っているのですが、そのようなものはあるのでしょうか。
ListView_GetItemStateの引数で、その設定は可能でしょうか。
また話は少し変わってしまうのですが、リストビューに項目を追加したときに、
その追加した行にフォーカスが合って、スクロールバーが自動的に下がってくるようにすることは可能でしょうか。
よろしくお願いいたします。
No.1
- 回答日時:
★次のマクロをどうぞ。
・UINT ListView_GetSelectedCount( HWND hWnd );
リスト ビュー コントロールで選択されているアイテム数を取得します。
http://msdn.microsoft.com/library/ja/default.asp …
・UINT ListView_GetSelectedColumn( HWND hWnd );
リスト コントロールで現在選択されている列のインデックスを取得します。
http://msdn.microsoft.com/library/ja/default.asp …
・あとリストビューのマクロ関数は『CommCtrl.h』に定義されています。
なのでエディタで開いて『ListView_XXXX』の行を一度、抽出しておけば便利です。
あるいはメモ程度に何処か(ヘッダ,ソース,関連ファイル)に記述しておく。
・以上。
参考URL:http://msdn.microsoft.com/library/ja/default.asp …
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(ブラウザ) zoomのバーチャル背景が選べない 4 2022/12/08 12:38
- その他(セキュリティ) 特定のWEBページのフリーズ AMAZONサイト PC側? ネットワーク? サイトに問題? 1 2023/01/30 16:23
- Excel(エクセル) エクセルのマクロの有効について 4 2023/08/03 11:40
- Excel(エクセル) 【Excel】指定のセル内容を基に別シートのセルを検索して選択する【VBA】 1 2022/06/16 16:16
- その他(Microsoft Office) Microsoft Edgeの「関心のあるカテゴリ」を表示させるには。 1 2023/03/16 18:05
- JavaScript javascriptのちょっとした動作不良(原因は突き止めたのですが) 1 2023/06/15 19:58
- Excel(エクセル) コンボボックス及びリストボックスを5段階連動させる方法をご存知の方ご教授頂きたいです。 Excelで 3 2022/04/03 21:43
- 年賀状作成・はがき作成 エクセルで作った住所録をワードの差し込み印刷ではがきに印刷したい 3 2022/09/26 15:47
- Excel(エクセル) エクセルについて教えてください。 2 2023/06/14 11:11
- 迷惑メール・スパム gmailの過去のメールを一括削除する方法について 3 2023/04/19 05:27
このQ&Aを見た人はこんなQ&Aも見ています
-
初めて見た映画を教えてください!
初めて見た映画を覚えていますか?
-
何回やってもうまくいかないことは?
みなさんには、何回やってもうまくいかないことはありますか?
-
みんなの【マイ・ベスト積読2024】を教えてください。
積読、ついついしちゃいませんか?そこでみなさんの 「2024年に買ったベスト積読」を聞きたいです。
-
テレビやラジオに出たことがある人、いますか?
テレビやラジオに取材されたり、ゲスト出演したことある方いますか?
-
14歳の自分に衝撃の事実を告げてください
タイムマシンで14歳の自分のところに現れた未来のあなた。 衝撃的な事実を告げて自分に驚かせるとしたら何を告げますか?
-
リストコントロールのデータの変更を検知したい
C言語・C++・C#
-
画面を強制的に再描画させる方法
C言語・C++・C#
-
CStringからchar*への型変換について教えてください。
C言語・C++・C#
-
-
4
リストビューでNM_CLICKを受け取った時のINDEX取得
C言語・C++・C#
-
5
リストビューで選択行の背景を変える
C言語・C++・C#
-
6
ダイアログ内コントロールの位置取得について
C言語・C++・C#
-
7
仮想リストコントロールの表示
C言語・C++・C#
-
8
CString から LPCTSTRの型に変換
C言語・C++・C#
-
9
コンボボックスの高さを変更したい。
C言語・C++・C#
-
10
ListView 項目の選択/選択解除について
Visual Basic(VBA)
-
11
MFCのCListCtrlでスクロールを検出
C言語・C++・C#
-
12
エディットボックスの入力制限について
C言語・C++・C#
-
13
CListCtrlで行の高さを指定したい。
C言語・C++・C#
-
14
ダイアログ表示時にチェックボックスにチェックされている状態にするには?
C言語・C++・C#
-
15
MFCダイアログボックスを最前面に表示
C言語・C++・C#
-
16
ボタンの表示の色、フォントを変更したい
C言語・C++・C#
-
17
リソースエディタでスタティックテキストの文字サイズの変更
C言語・C++・C#
-
18
EDITコントロールで入力できる文字を制限するには?
C言語・C++・C#
-
19
CStringのFindで文字列検索を行いたいのですが
C言語・C++・C#
-
20
ダイアログボックスのボタンコントロールのフォーカスについて
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・「これはヤバかったな」という遅刻エピソード
- ・初めて自分の家と他人の家が違う、と意識した時
- ・いちばん失敗した人決定戦
- ・思い出すきっかけは 音楽?におい?景色?
- ・あなたなりのストレス発散方法を教えてください!
- ・もし10億円当たったら何に使いますか?
- ・何回やってもうまくいかないことは?
- ・今年はじめたいことは?
- ・あなたの人生で一番ピンチに陥った瞬間は?
- ・初めて見た映画を教えてください!
- ・今の日本に期待することはなんですか?
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・【お題】大変な警告
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・最強の防寒、あったか術を教えてください!
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
e-taxで送信ファイルの拡張子が...
-
エクセルで「特定の文字を含む...
-
PC内で速度を遅くした音源をCD...
-
TextBoxにフォーカスを与えると...
-
A4の紙に印刷されている文字を...
-
ファイル数と合計サイズの取得方法
-
個別に違う添付ファイルを付け...
-
スマホでtxtファイルを編集する...
-
再起動しないでiniファイルの変...
-
GIMP separate+プラグイン クラ...
-
エクセルのセルからフォーカス...
-
Accessのソースが見れない
-
ガラケーからPCへの写真の取り込み
-
エアコンの冷媒 R410Aの重...
-
EXCELマクロでのtifファイルの...
-
VBS フォルダ内にあるすべての...
-
typedefのスコープに関して。
-
USBメモリーで無線でPC転送でき...
-
イベントハンドルのリーク(?)
-
ニンテンドッグスについて教え...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
e-taxで送信ファイルの拡張子が...
-
スマホでtxtファイルを編集する...
-
個別に違う添付ファイルを付け...
-
A4の紙に印刷されている文字を...
-
PC内で速度を遅くした音源をCD...
-
ファイル数と合計サイズの取得方法
-
エクセルで「特定の文字を含む...
-
2枚、マイクロSDカードを入...
-
TextBoxにフォーカスを与えると...
-
リストビューの選択状態を取得...
-
エアコンの冷媒 R410Aの重...
-
ガラケーからPCへの写真の取り込み
-
ビデオファイルのプロパティの...
-
iPhoneの内蔵の記憶媒体は、HDD...
-
リストビューで選択行の背景を...
-
garagebandのLR Mixの方法について
-
拡張子「.IDJ」を、windo...
-
eclipseでタブ入力ができなくな...
-
Accessのソースが見れない
-
Fortniteのクラッシュについて
おすすめ情報