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

リストビューを使ったプログラムで、以下の2点についてどうしていいか分からないので、どなたか助言をお願いします。

(1)可視領域を23行としたリストビューで、起動時はスクロールを水平・垂直ともに抑止しておきます。ボタンをクリックする度に1行ずつ0行に挿入し、データが24行以上で垂直スクロールを許可してるのですが、挿入した行に+1行が表示されてしまいます。GetItemCount()で調べてもやはり1行多く表示されてます。カスタムドローで交互に背景色を変えていますが、その行に背景色はありません。水平スクロールを抑止している事が原因でしょうか?スクロールの抑止は、以下を参考にさせて貰ってます。

http://homepage3.nifty.com/mitui707/VisualC/VCli …

(2)ヘッダ部の表示はセンタリング、アイテムは左寄せにしたいのですが、アイテムの左寄せをどのようにすれば良いのか分かりません。

ヘッダ部の設定
LVCOLUMN myColumn;
myColumn.mask = LVCF_TEXT | LVCF_WIDTH | LVCF_FMT;
myColumn.fmt = LVCFMT_CENTER;

どなたか助言をお願いします。

A 回答 (2件)

※注意:以下は『.NET』での事例です。


その他の環境下ではかえって実装が面倒かもしれません。




(2) に関して、以前に同じような状況に出くわしたことがあります。
その時は以下のように、二つのリストビューを用いてそれらしいものに仕上げました。
もし可能であれば参考になさって下さい。


スプリットコンテナを上下に分割し、それぞれにリストビュー(Details)を配置、
コンテナに合うようにドッキング。
下のリストビューのヘッダを消去(HeaderStyle を None)。

スプリットコンテナの境界線をできるだけ上に引き上げて、
上のリストビューのヘッダだけが可視の状態にする。
また、境界線を細くして固定、固定パネルを1に設定。

各列を移動したり、ユーザーが幅を変えることはなかったので、
上のリストビューの Enabled を False に。つまりヘッダは表示のみ。

後は上下のリストビューのカラムの設定を個別に変えれば、
ヘッダとアイテムで異なるテキストアラインの調整が可能に。


ただし、ヘッダ部分をユーザが操作する場合や、列数が途中で変更される場合、
水平スクロールがあるような場合だとそれらを吸収する処置が必要になります。
    • good
    • 0
この回答へのお礼

助言、ありがとうございます。m(_ _)m

確かにこの方法も有りですね!VC++はまだ始めたばかりですが、CとVBはそれなりにやって来ているので、この方法に気付くべきでした。(仕事の都合上、1年ほどプログラムから離れていたせいかも...。)

今回はリストビューにデータを表示するだけですので、この方法を試して見ます。
が、今後は列幅を変更したりする事があると思われるので、他の方法も考える必要はあると思います。

お礼日時:2008/07/18 09:06

もう解決しているかもしれませんが、開発環境は何ですか。


また、MFCですか。

(1)
「1行多く」とは、空欄が入ってしまうのですか。
その1行は、どこに入りますか。
また、スクロールの抑止をやめた時(TRUEではなく、全部コメントアウトした時)、余分な行は入りますか。

(2)
時々、あちこちの相談サイトで同じ質問を見かけますが、正しいコードを見たことはありません。
自信ありげに「オーナードロー」と書いて、コードも構造体も提示しないようなのばかりです。
気になって調べてみましたが、私も結局わかりませんでした。
存知よりのへテランは、ひとこと、「できない」ですと。。。

どうしてもやるのなら、列幅をピクセル単位で取得することはできますから、ヘッダ文字列の先頭に空白文字を適当数足せば、センタリングらしく見せることはできます。

この回答への補足

回答、ありがとうございます。
まだ解決してませんです...。

(1)
>「1行多く」とは、空欄が入ってしまうのですか。
>その1行は、どこに入りますか。
 そうです。24行目のデータを挿入した時、垂直スクロールを許可しているのですが、同時に25行目に空欄が入ってしまいます。

>また、スクロールの抑止をやめた時(TRUEではなく、全部コメントアウトした時)、余分な行は入りますか。
 23行目のデータを挿入した時、水平・垂直両方のスクロールバーが表示され(23行目の上に水平スクロールバーが表示されている)、余分な行は入りませんでした。

(2)
 サンプルを入手したのですが、VC++を始めて1ヶ月に満たない私には、難しすぎて...。後輩の話では、CHeaderCtrlを取得して、ヘッダーのみオーナー描画すればと助言をくれたのですが、まだうまく動作出来てません。
 最後は、turukame2005さんの言われる空白文字を足すという案を考えて見ます。

補足日時:2008/07/17 17:48
    • good
    • 0

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