問題タブ [custom-draw]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
5 に答える
5726 参照

winapi - カスタム描画サブアイテムのWin32リストビューコントロールサブアイテムパディング?

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

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

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

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

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

0 投票する
1 に答える
2330 参照

visual-c++ - Custom Drown CListCtrlでアイテムのサイズとそれらの間のギャップを変更する方法

私の知る限りON_WM_MEASUREITEM、カスタム描画リスト コントロールでは呼び出されません。コントロールが Owner Drawn である場合にのみ使用されます。

私はそれを行う方法を見つけましたが、それはややハックであり、何らかの方法で自動的に設定されたアイテム間のギャップを制御できません。

トリックは、必要なサイズの未使用の画像で作成できることです。そのCImageListような画像リストをリスト コントロールに割り当てると、アイテムは画像のサイズに近い寸法にサイズ変更されます。その後、Custom Draw を使用して、拡大されたアイテムの内部をペイントできます。

問題は、カスタム Drown コントロールでアイテムのサイズとアイテム間の間隔をどのように変更するかということです。

LVS_OWNERDRAWFIXEDまたは、ここでの私の唯一のオプションは、完全にオーナー描画されたコントロールですか?

0 投票する
1 に答える
1596 参照

mfc - CListCtrl:同じ列で異なるフォントを使用するときに列幅を取得する方法は?

CListCtrlCustomDrawというCListCtrlからクラスを派生させ、NM_CUSTOMDRAWハンドラーを使用してリストを描画しました。
問題は、選択されたアイテムと選択されていないアイテムのフォントが異なることです。これらはリストコントロールのメンバー変数ですが、

列幅を計算するために、リストは選択されていないアイテムのフォントを使用します。これは、選択されたアイテムのフォント(太字フォント)ほど広くないため 、同じコンテンツであっても
、選択されたアイテムに表示できないコンテンツがあります。

列幅の計算にどのフォントを使用するように設定できますか?
上記のコードの前にフォントを設定しようとしましたが、効果がありません。
どんなアドバイスもいただければ幸いです。

0 投票する
5 に答える
16219 参照

windows - Win32:編集コントロールをカスタム描画する方法は?

エディット コントロール内にテキスト ヒントが表示されるEM_SETCUEBANNERの機能を実装する必要があります。

エディット コントロールのキュー バナーの例

問題は、マイクロソフトが提供するキュー バナーの実装を取得するために必要な Common Controls のバージョン 6 を使用できないことです。

編集コントロールのテキストとフォント形式を変更するだけで調べました

しかし、回避する方法が見つからないChangeイベント(より高いコンポーネントライブラリによって提供されるコンポーネントラッパー)をスローします。

そのため、代わりにテキストをカスタム描画し、コントロールがフォーカスされておらず空のときにキューバナーテキストを描画し、それ以外の場合はデフォルトの描画に依存していました。

Edit コントロールは、 ListView、TreeView などのカスタム描画メカニズムを適切に公開しません。

他の人が調べましたが、ほとんど不可能な作業のようです:

状況から見て、次のメッセージを処理する必要があります。

  • WM_ERASEBKGND、WM_PAINT (明らかな理由)
  • WM_SETFOCUS、WM_KILLFOCUS (白いバーが表示されないようにするため -- 上記)
  • WM_CHAR (コントロール内のテキストを処理および更新するため)

また、コントロールにキャレットを表示する方法も見つける必要があります。これは、前述の白いバーをペイントせずに Windows でキャレットを表示できるようにする方法が見つからないためです。

これは楽しいことになるだろう。:ロールアイズ:

Windows Edit コントロールがカスタム描画されることを意図していなかったことを考えると、Windows Edit コントロールをカスタム描画する方法を知っている人はいますか?


:質問に答えるのではなく、問題を解決する回答も受け入れます。しかし、この質問に出くわして編集コントロールをカスタム描画したい他の人は、おそらく答えが欲しいでしょう.

0 投票する
1 に答える
1576 参照

c++ - CustomDraw の SetWindowLong で未処理の例外が発生する

カスタム描画を使用して CSliderCtrl にいくつかの変更を加えています。コントロールはダイアログで使用されます。ここに構造があります:私のMessageMapには次のものがあります:ON_NOTIFY_REFLECT_EX(NM_CUSTOMDRAW, OnNMCustomdraw)

OnNMCustomdraw メソッドは次のようになります。

読んでみると、SetWindowLong を使用してカスタム描画の戻り値を設定する必要があることがわかりました。そうしないと、メソッドが常に CDDS_ITEMPREPAINT メッセージを受け取るとは限りません。ただし、SetWindowLong を使用すると、アプリケーションは CDDS_ITEMPREPAINT を受信しないため、スライダーは標準のスライダーのように見えます。スライダーの上にカーソルを置いたり、ダイアログを最小化および最大化したりするなど、スライダー上で何らかの操作が行われると、アプリケーションがクラッシュします。

TBCD_CHANNEL コードには到達しないため、抜粋しました。

デバッグ モードで実行すると、afxcrit.cpp の AfxUnlockGlobals メソッドの最後でクラッシュします。スタック トレースは次のとおりです。

それで、誰かがこの問題について何か洞察を持っていますか?さらに情報が必要な場合は、お知らせください。


更新: SetWindowLong を使用する代わりに、結果を pResult に割り当ててから返すだけで、回避策を見つけました。SetRangeMin(GetRangeMin(), TRUE); を呼び出してサブアイテムを再描画する再描画を強制します。正確にはエレガントではありませんが、機能します。

0 投票する
1 に答える
1277 参照

c++ - カスタム描画CTreeCtrl:フォントの取り消し線を追加する方法は?

MFCスマートデバイスプログラムにCTreeCtrlのカスタム描画を実装しました。CTreeCtrlの特定のノードの色を正常に変更しました。現在、コントロールでテキストを描画するために使用されるデフォルトのフォントを取得して、特定のノードのフォントに取り消し線を追加する方法を理解しようとしています。CTreeCtrlでテキストを描画するために使用されるデフォルトのフォントを取得し、フォントの取り消し線をフォントに適用するにはどうすればよいですか?

0 投票する
5 に答える
9300 参照

delphi - Delphi形式でコントロールを描画します

フォームキャンバスとフォームのコントロール上に何かを描画するにはどうすればよいですか?

私は次のことを試みます:

長方形は他のコントロールが描画される前に描画されるため、コントロールの後ろに隠れます(これはDelphi Docsによると予想される動作です)。

私の質問は、どうすればコントロールを描画できるかということです。

0 投票する
0 に答える
1888 参照

delphi - パネルを使用して ListBox アイテムをカスタム描画する

重複の可能性:
Firefox の「アドオン|拡張機能リスト」を模倣できる Delphi コントロール?

カスタム ListBox コントロールを作成したいと思います。Firefoxのダウンロードのように見える場合があります

Firefox のダウンロード例

しかし、特定のレイアウトのカスタム描画をハードコーディングする代わりに、レイアウトを個別に定義できるようにしたいと考えています。説明させてください、リストボックスには公開されたプロパティ Layout: TWinControl があります。アイデアは、言うパネルでレイアウトを設計することです。したがって、上記の例では、次のようになります。

行レイアウトのパネル

次に、ListBox の customdraw で、パネルの描画を使用します。もちろん、各行は対応する項目のデータを描画します。したがって、コントロールは DbAware になり、recordIndex は描画ごとに調整されます。(DBAware コントロールは実際には使用せず、カスタム データ バインディングを使用しますが、原則は同じです)

誰かがすでにこのようなことをしていますか? それは良い/悪い考えだと思いますか?

テストアプリの作成を開始しました。この質問を編集して、特定の実装に関する質問を追加します。

すべての行に対してパネルのインスタンスを 1 つだけ使用することを望んでいます。リストボックスの外に表示されないようにする必要があります。

これまでのところPanel.PaintTo()、 ListBoxOnDrawItemで使用してみましたが、基本的には機能しますが、 Panel が親であり、フォームの他の場所に表示されている場合のみです。パネルを非表示にできますが、まだペイントを使用できますか? これをどのように実装しますか?

0 投票する
1 に答える
479 参照

cocoa - NSSplitView の NSOutlineView バッジ

drawAtPoint:、NSAttributedString、そしてもちろん NSBezierPath を使用してセルの右側にバッジ番号を描画する NSOutlineView があります。NSSplitView のサブビュー内でアウトライン ビューのサイズ変更が発生すると、私の問題が発生します。バッジは、サイズ変更に伴って左または右に移動します。セル自体のテキストに到達すると、その下のテキストを停止したり切り捨てたりしません。すぐ上に飛んでいきます。

セルにその横にあるカスタム描画ビューを認識させ、それに応じてテキストを切り捨てる方法はありますか? 私は解決策 PXSourceList を既に試しましたが、それも役に立ちませんでした。

0 投票する
1 に答える
1032 参照

ios - iPhone SDKで手のジェスチャーを使用して画面に描画するにはどうすればよいですか?

画面上で指を動かして画面に描画したい。

iPhone SDKでこれをどのように達成できますか?