
リストビューコントロールで、
最上位に表示されているアイテムの番号を取得したく、
以下のような関数を作ったのですがうまくいきません。
リストビューの0番目のアイテムが先頭行に表示されていると、正しい値が取得できるのですが、
それ以外だと、取得すべき値より1小さい値が返されてしまいます。
どこがまずいか、または別の方法があれば、
ご教授ください。
[関数]
int GetTopItemNum(HWND hDlg){
HWND hList = GetDlgItem(hDlg, IDC_INFOTABLE);
RECT r;
LVHITTESTINFO lvhti;
ListView_GetItemRect (hList, 0, &r,LVIR_BOUNDS) // カーソルサイズ取得
lvhti.pt.x = (r.right-r.left)/2;
lvhti.pt.y = (r.bottom-r.top)/2; // 中心取得
lvhti.flags = LVHT_ONITEMLABEL;
ListView_HitTest (hList, &lvhti);// 表示先頭行でヒットテスト
return lvhti.iItem; // 先頭行のアイテム番号取得
}
No.2ベストアンサー
- 回答日時:
ListView_GetTopIndex を使って取得するのは如何でしょうか?
リストビューがlistモード又はreportモードの時であれば、
一番上の可視項目の番号が取得できるようです。
No.1
- 回答日時:
リストビューはしょっちゅう使っています。
ただご質問の関数は経験が無いので推測ですが。> ListView_GetItemRect (hList, 0, &r,LVIR_BOUNDS) // カーソルサイズ取得
これは0番目のアイテムに外接する四角形を取得しますので、毎回0番目のアイテムの位置を基準にヒットテストを行っていることになります。
ListView_GetOriginという関数が現在表示されているビューの原点(0,0でしょうか?)を返すので、ここから右と下に少しずらしたポイントでヒットテストを行えば現在表示されている最初のアイテムが取得できるのではないかと思います。
想像ですいません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 最終列の右へSUM関数を作成するため下記コードを実行しましたが、最終列「10月28日」が上書きされて 3 2022/12/05 20:32
- 大学・短大 C言語線形リストの問題です 3 2022/12/22 00:45
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- Visual Basic(VBA) Vba LongPtrについて教えてください 2 2022/08/19 11:14
- Visual Basic(VBA) 先ほど、回答者様によって教えていただいたのですがどうしたらいいか分かりません。 ユーザーフォーム上に 2 2023/02/21 22:25
- その他(セキュリティ) Yahoo! JAPANのID取得について 1 2022/11/30 23:00
- Visual Basic(VBA) エクセルVBA 2 2022/04/27 13:29
- C言語・C++・C# C言語 プログラミング 4 2022/05/22 11:53
- JavaScript ソースコードのいじる場所が分かりません。 1 2022/12/23 02:06
- Visual Basic(VBA) 貼り付けた値が消えていく 以下はソースファイルの2番目のシートのB6から最終行を取得 ターゲットファ 2 2023/07/27 12:23
このQ&Aを見た人はこんなQ&Aも見ています
-
ListView 項目の選択/選択解除について
Visual Basic(VBA)
-
リストビューの選択状態を取得するメッセージはありますか?
C言語・C++・C#
-
リストビューをスクロールさせるには
Visual Basic(VBA)
-
-
4
ListViewで、非表示列って作れますか?
Visual Basic(VBA)
-
5
画面を強制的に再描画させる方法
C言語・C++・C#
-
6
テキストボックスからフォーカス外す
C言語・C++・C#
-
7
ListViewでの行全体の選択
Visual Basic(VBA)
-
8
リストビューでNM_CLICKを受け取った時のINDEX取得
C言語・C++・C#
-
9
CStringからchar*への型変換について教えてください。
C言語・C++・C#
-
10
CStringのFindで文字列検索を行いたいのですが
C言語・C++・C#
-
11
SELECT 文 GROUP での1件目を取得
SQL Server
-
12
vba ListViewの選択色について教えてください
Excel(エクセル)
-
13
ListViewのチェックボックスについて
Excel(エクセル)
-
14
Listviewのデータを上から順番に取得 VBA
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VB.NETで DataRow()を利用して...
-
ListView 項目の選択/選択解除...
-
JSP+Servletでのページングの常識
-
PHP8でWarning:Undefined varia...
-
VBAでActiveDirectoryのユーザ...
-
VBA リストボックス内の値を複...
-
ActionScriptで、マシンのCPU使...
-
Flexgridで選択行の列の値を取...
-
VBA:小数点以下の数字を取得で...
-
小数点を含む数値の切捨て
-
like演算子内に変数って使えな...
-
VBAで期間が何か月間なのかを取...
-
利用者側のMACアドレスを取得し...
-
郵便番号検索APIにてget Elemen...
-
count(*)で取得した値をJAVAの...
-
DataGridView 複数選択で行番...
-
JavaScriptにおいてコンピュー...
-
IFRAME内のURLを取得したです。
-
バージョンナンバーの取得
-
HPを作成しているのですが安価...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VB.NETで DataRow()を利用して...
-
ListView 項目の選択/選択解除...
-
VBA:小数点以下の数字を取得で...
-
VBAでActiveDirectoryのユーザ...
-
Spreadの選択行の取得について
-
PHP8でWarning:Undefined varia...
-
Flexgridで選択行の列の値を取...
-
count(*)で取得した値をJAVAの...
-
VBA Shapesの座標からセル位置...
-
データ数をカウントしたいのですが
-
JavaScriptにおいてコンピュー...
-
利用者側のMACアドレスを取得し...
-
VBA リストボックス内の値を複...
-
like演算子内に変数って使えな...
-
EXCELのリストボックスを選択し...
-
「Excel VBA」 Webクエリ マク...
-
JavaScriptでWindowsログオンID...
-
gethostbyaddrでのホスト名取得...
-
現在時刻をミリ秒まで取得
-
vbaで、オートシェイプ文字幅と...
おすすめ情報