アプリ版:「スタンプのみでお礼する」機能のリリースについて

リストビューコントロールで、
最上位に表示されているアイテムの番号を取得したく、
以下のような関数を作ったのですがうまくいきません。
リストビューの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; // 先頭行のアイテム番号取得
}

A 回答 (2件)

ListView_GetTopIndex を使って取得するのは如何でしょうか?



リストビューがlistモード又はreportモードの時であれば、
一番上の可視項目の番号が取得できるようです。
    • good
    • 0
この回答へのお礼

ListView_GetTopIndex でうまくいきました
ありがとうございます

お礼日時:2005/02/25 14:43

リストビューはしょっちゅう使っています。

ただご質問の関数は経験が無いので推測ですが。

> ListView_GetItemRect (hList, 0, &r,LVIR_BOUNDS) // カーソルサイズ取得

これは0番目のアイテムに外接する四角形を取得しますので、毎回0番目のアイテムの位置を基準にヒットテストを行っていることになります。

ListView_GetOriginという関数が現在表示されているビューの原点(0,0でしょうか?)を返すので、ここから右と下に少しずらしたポイントでヒットテストを行えば現在表示されている最初のアイテムが取得できるのではないかと思います。

想像ですいません。
    • good
    • 0
この回答へのお礼

NO2 のかたのほうほうでうまくいきました。
ありがとうございました

お礼日時:2005/02/25 14:44

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています