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も見ています
-
好きなおでんの具材ドラフト会議しましょう
肌寒くなってきて、温かい食べ物がおいしい季節になってきましたね。 みなさんはおでんの具材でひとつ選ぶなら何にしますか? 1番好きなおでんの具材を教えてください。
-
チョコミントアイス
得意ですか?不得意ですか?できれば理由も教えてください。
-
【お題】引っかけ問題(締め切り10月27日(日)23時)
【大喜利】 「日本で一番高い山は富士山……ですが!」から始まった、それは当てられるわけ無いだろ!と思ったクイズの問題
-
【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
【お題】 ・買ったばかりの自転車を分解してひと言
-
好きな和訳タイトルを教えてください
洋書・洋画の素敵な和訳タイトルをたくさん知りたいです!【例】 『Wuthering Heights』→『嵐が丘』
-
画面を強制的に再描画させる方法
C言語・C++・C#
-
リストビューで選択行の背景を変える
C言語・C++・C#
-
リストコントロールのデータの変更を検知したい
C言語・C++・C#
-
-
4
リストビューでNM_CLICKを受け取った時のINDEX取得
C言語・C++・C#
-
5
ダイアログ内コントロールの位置取得について
C言語・C++・C#
-
6
リストコントロールの列幅を固定にする
C言語・C++・C#
-
7
ListView 項目の選択/選択解除について
Visual Basic(VBA)
-
8
ボタンの表示の色、フォントを変更したい
C言語・C++・C#
-
9
MFC ダイアログ上のID取得について
C言語・C++・C#
-
10
EDITコントロールで入力できる文字を制限するには?
C言語・C++・C#
-
11
エディットボックスの入力制限について
C言語・C++・C#
-
12
LVM_SETITEMSTATEでListViewのアイテムを選択するには?
その他(プログラミング・Web制作)
-
13
Debug Assertion Failed?
C言語・C++・C#
-
14
MFCでOnPaintのタイミング
C言語・C++・C#
-
15
エディットコントロールでEnter押した時の動作
C言語・C++・C#
-
16
VisualStudio MFC変数が追加できない
C言語・C++・C#
-
17
テキストボックスからフォーカス外す
C言語・C++・C#
-
18
CWnd::EnableWindow()の扱い方
C言語・C++・C#
-
19
CStringからchar*への型変換について教えてください。
C言語・C++・C#
-
20
VC++でコントロールの境界線を描画する方法
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/12】 急に朝起こしてきた母親に言われた一言とは?
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・好きな「お肉」は?
- ・あなたは何にトキメキますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
個別に違う添付ファイルを付け...
-
PC内で速度を遅くした音源をCD...
-
リストビューの選択状態を取得...
-
エアコンの冷媒 R410Aの重...
-
スマホでtxtファイルを編集する...
-
e-taxで送信ファイルの拡張子が...
-
拡張子「.IDJ」を、windo...
-
2枚、マイクロSDカードを入...
-
エクセルのセルからフォーカス...
-
ビデオファイルのプロパティの...
-
複数のブックを新しいブックのS...
-
iPhoneの内蔵の記憶媒体は、HDD...
-
ファイル数と合計サイズの取得方法
-
Fortniteのクラッシュについて
-
エクセルで「特定の文字を含む...
-
情けない話ですが成田エクスプ...
-
エクセルのVBAが起動するけどす...
-
音声ファイルの音量を上げる方法
-
swish
-
指定したフォルダーを開いてフ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
個別に違う添付ファイルを付け...
-
スマホでtxtファイルを編集する...
-
PC内で速度を遅くした音源をCD...
-
A4の紙に印刷されている文字を...
-
iPhoneの内蔵の記憶媒体は、HDD...
-
2枚、マイクロSDカードを入...
-
e-taxで送信ファイルの拡張子が...
-
拡張子「.IDJ」を、windo...
-
エクセルで「特定の文字を含む...
-
ガラケーからPCへの写真の取り込み
-
エアコンの冷媒 R410Aの重...
-
TextBoxにフォーカスを与えると...
-
VBS フォルダ内にあるすべての...
-
ビデオファイルのプロパティの...
-
garagebandのLR Mixの方法について
-
VBA:カウンターの i の値が開放...
-
ファイル数と合計サイズの取得方法
-
リストビューで選択行の背景を...
-
stdio.hの中身
-
GIMP separate+プラグイン クラ...
おすすめ情報