7

custom-draw (NM_CUSTOMDRAW) を使用して ListView SubItem のコンテンツ全体を (レポート/詳細ビューで) 描画する場合、カスタム ペイント メソッドで同じ左右のパディングを適用できると便利です。カスタム描画されていないアイテムに対してそれ自体を制御します。

このパディング値をプログラムで取得する方法はありますか? 特定の文字の幅 (" " または "w" など) に関連しているのか、それとも固定値 (左が 6px、右が 3px など) なのか、それとも...?

編集:明確にするために、コントロールが描画するアイテムに追加するのと同じパディングを NM_CUSTOMDRAWn SubItems に追加したいと思います。たとえば、探しているメトリックは、2 番目の列の先頭の間の空白ですおよび次のスクリーンショットの「シャム」という単語 (注: MSDN のスクリーンショットを追加して、質問の説明に役立ててください):

レポート ビューのリスト ビュー
(ソース: microsoft.com )

「シャム」という単語は、ヘッダー項目 (「品種」) と一致していることに注意してください。カスタムドローアイテムでも同じ位置合わせを保証できるようにしたいと思います。

4

5 に答える 5

2

ListView ヘッダー メッセージ HDM_GETBITMAPMARGIN を使用リンク テキストを参照

于 2009-12-21T01:39:21.040 に答える
1

これを行う方法は、ListView_GetColumn()を使用して対応する列の形式を取得してから、取得したmyLVCOLUMN.maskを確認することです。

LVCOLUMN myLVCOLUMN;
myLVCOLUMN.mask=LVCF_FMT;
ListView_GetColumn(hwnd,nCol,&myLVCOLUMN);

次に、その列に属する対応するラベルを描画するとき

if(myLVCOLUMN.fmt & LVCFMT_CENTER)
    DrawText(x,x,x,x, DT_CENTER | DT_WORD_ELLIPSIS );
else if (myLVCOLUMN.fmt & LVCFMT_RIGHT)
    DrawText(x,x,x,x, DT_RIGHT | DT_WORD_ELLIPSIS );
else
    DrawText(x,x,x,x, DT_LEFT | DT_WORD_ELLIPSIS );
于 2011-12-09T16:01:52.510 に答える
1

ListView_GetSubItemRect (LVM_GETSUBITEMTECT)

http://msdn.microsoft.com/en-us/library/ms930172.aspx

ドキュメントに記載されている内容にもかかわらず、ListView_GetItemRect に従って、LVIR_LABEL は項目テキストの境界矩形を返すだけだと思われます。

(NM_CUSTOMDRAWで遊んでいるときに実際にどこかで答えを見たことがありますが、これは私を悩ませ続けました)。

コメント 2 の後に編集:

バージョン 6.0 を使用する場合は、NMLVCUSTOMDRAW を見たことがあると思います。rcText があります。私はWin2Kを使用しているので、そうしません。

あなたが見つけたものを考えると、 ListView_GetItemRect を使用して LVIR_LABEL を取得し、それを LVIR_BOUNDS と比較して、違いを使用するという提案に戻ります。

于 2008-09-11T06:25:57.373 に答える
0

出力を見ずに推測することしかできません。

いくつかの提案: DrawTextEx 関数を使用している場合、DT_INTERNAL などを試しましたか?

誤って空白の画像/アイコンを挿入していませんか。

クラシック スクリーン モードで問題なく表示されますか? もしそうなら、何かが起こっているかどうかを確認するために XP テーマ関数を調べます。

最初のコメント後の後期編集:

四角形のサイズがテキストの周りの LVN_ENDLABELEDIT 編集ボックスに必要なスペースと一致するので、テキストは移動しません (またはフォーカス四角形)。

最初の列で LVM_GETITEMRECT の結果を LVIR_LABEL と比較し、その差を左の境界線として使用できると思います。

于 2008-09-11T01:35:12.503 に答える
0

GetSystemMetrics()を見る必要があると思います。SM_CXEDGESM_CYEDGEはおそらくあなたが望む値だと思いますが、それについて私を引用しないでください。;-)

于 2008-09-09T10:50:48.643 に答える