問題タブ [ownerdrawn]
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.
c# - C# での OwnerDraw ListView を使用した文字の配置
Firefox Awesome Bar のように機能する .NET コントロールを実装しようとしています。そのために、ListView に表示される検索結果内の検索文字に太字と下線を付けようとしています。OwnerDraw をセットアップし、Graphics.MeasureCharacterRanges を使用して文字の大きさを把握しています。私が抱えている問題は、そのメソッドから返される値が必ずしも完全ではないことです。あちこちに余分なピクセルがいくつかある、または互いに近すぎる 2 つの文字になってしまいます。簡単な修正はありますか?同じ単語の異なる部分を異なるフォント設定で描画する別の方法は?
c# - DrawItemEventArgs の "Index" プロパティがマイナスになることがある
オーナー描画のリストボックス コントロールがあります。
問題は、DrawItem イベント ハンドラに渡される DrawItemEventArgs 引数の Index プロパティが「-1」である場合があることです。これは私の非倫理的な修正です:
通常、負のインデックスがハンドラーに渡される原因を知りたいです。
c# - (多層) 埋め込み TabControls エラーのカスタム描画
3層の深さのタブコントロールを持つwinformアプリがあります。以下のクラスでタブを動的に色付けしています。埋め込まれたタブコントロールに色を付けると、フィット感が増します。
それらのために何か違うことをする必要がありますか?tabRenderer への埋め込みフォームの呼び出しをコメントアウトすると、これらのエラーは発生しません。TabRenderer オブジェクトを適切に破棄していませんか?
それはおそらくまったく別のものですか?タブコントロールを埋め込む方法は?
私のプログラムが現在どのように見えるかの例はここにあります -->

(ソース: ggpht.com )
DevFilesより
ご覧のとおり、タブ コントロールには 3 つのレイヤーがあります。これはプログラムで 2 回発生し、両方とも前述のエラーが発生します。5 つのタブ コントロールがあるため、合計 6 回の tabRenderer の呼び出しがあります。1 つのトップ レベル、3 つのセカンド レベル、および 2 つのサード レベル。
タブ コントロールの色付けに使用されているコード:
そして、これは私がそれを呼ぶ方法です:
c# - 所有者は、スクロール時にListViewの「スミアリング」を描画します
スクロールすると「にじむ」所有者が描いたListViewがあります。リストの表示されている領域に移動するときに、最後に表示されたアイテムにのみ影響します。
次のようになります。
Blah
Blah
Blah
...すべてが1ピクセル離れて互いに重なり合って描画されています。DrawItemイベントのコードは次の形式です
私は完全に困惑しています。どんなアイデアでもありがたいです!デイブ
c# - C#: ノードをクリックすると、ownerdrawtext を使用した TreeView 所有者の描画と奇妙な黒い強調表示
DrawMode を OwnerDrawText に設定し、DrawNode イベントに追加し、希望どおりにテキストを描画するコードを追加しました。ノードが選択されたときに奇妙な黒い選択がハイライト表示されることを除けば、すべてうまく機能します。
問題ありません。ノードの状態が強調表示されているかどうかを確認するロジックを追加し、独自の強調表示を描画しましたが、ノードが選択されただけでなく、クリックされたときに黒い強調表示が追加されます...マウスボタンリリースされますが、描画されて点滅します...それは迷惑です. :/
どうやら実際に質問するのを忘れていたようです...図面を完全に処理せずに選択を解除するにはどうすればよいでしょうか?
showmodaldialog - 64 個の ownerdraw createwindow ボタンの制限
Visual Studio のダイアログ デザイン ツールで作成されたダイアログ ボックスに、所有者が拡張スタイルを描画する 256 色のボタンの配列を作成したいと考えています。これを行うために、ダイアログ プロシージャの WM_INITDIALOG メッセージ ハンドラにループを追加しました。
WM_CTLCOLORBTN メッセージのメッセージ ハンドラーを追加しました。
多かれ少なかれ機能しますが、最初の 64 個のボタンしか表示されません。各ボタンに色を付けるために別のブラシを使用するつもりですが、デバッグ用に、明確に定義された 1 つのブラシに置き換えました。私はコードをデバッグし、各ボタンの x/y 座標が適切であり、hMenu createwindow 呼び出しで提供された ID が適切であることを確認しました。WM_CTLCOLORBTN ハンドラで 256 個のボタンすべてが色付けされるのを見ました。createwindow 呼び出しが失敗 (NULL) を返さないことを確認するためのチェックを含めました。createwindow 呼び出しで x/y パラメーターを交換することで、16 ボタンの 4 行または 16 ボタンの 4 列のいずれかを取得できます。
createwindow 呼び出しから BS_OWNERDRAW ビットを削除すると、256 個のボタンすべてが描画されます。
BS_OWNERDRAW では 64 個のボタンに制限があるかのようです :-(
どんな助けでも大歓迎です!
ティア、マイク
.net - 展開時にコンボボックス項目を再描画する
コンボボックスがバインドされた .net 3.5 Windows アプリケーションがあります。DrawItem イベントをオーバーライドして、特定の条件に基づいて個々のアイテムの背景に色を付けました。条件値を更新し、Invalidate() を呼び出してコンボボックスを再描画する非同期スレッドを実行しています。
コンボボックスが展開されている場合を除いて、これはすべて非常にうまく機能します - DrawItem はリストで強調表示されている項目に対してのみ呼び出されます。他の項目は、リスト内の別の項目にマウスを合わせるか、別のコントロールをクリックするなど、ユーザーが何かを行ったときにのみ更新されます。リストが開いている間、他のアイテムを自動的に再描画したいと思います。どうすればこれを実現できますか? 出来ますか?
ありがとう
編集: 展開されたリストで強調表示されているアイテムは、メインのコンボボックス表示で再描画されると判断しました。コントロールの展開された部分では、リスト内の項目は再描画されません。
編集: これは簡略化されたフォームの例です。テストしたい人は誰でも、新しい Windows フォーム アプリを作成し、これを新しいクラス ファイルに追加して、ビルドする必要があります。
動作を再現するには、[検出] ボタンをクリックし、コンボ ボックスを開いて COM1 にカーソルを合わせます。テスト結果は1,3,2の順で終了します。コンボボックスが開いている間、ハイライトをその上に移動してからオフにするまで、COM3 は黄色のままであることがわかります。
c++ - CStaticカスタムコントロール
CStatic
でカスタムコントロールを作成しようとしていますvc++
が、いくつか問題があります。
私はもともと、スタイルのあるCStatic
コントロールを使用していました。SS_BLACKRECT
これは、オンデマンドでコントロール上に画像を表示する必要があるまでの状況に適していました。
私は実際に画像をコントロールに描画する背後にあるすべてのロジスティクスを理解しましたが、他のものに干渉せずにそれを行う方法を理解できないようです。
基本的に、私はコントロールがほとんどの場合スタイルで通常として機能することを望んでCStatic
いSS_BLACKRECT
ます。
次に、代わりにコントロール上に画像を描画するメソッドを呼び出すことができる必要があります。私はを使って描画を行っていますが、メソッドとメソッドGDI
の両方で試しましたが、成功しませんでした。描画することはできますが、ベースを呼び出すと、イメージの上に描画されます。OnPaint()
DrawItem()
OnPaint()
CStatic::OnPaint()
通常のように描画できるようにする必要がありますが、その上に画像を挿入するだけです。メソッドでそれを実行しようとすると、DrawItem()
明らかにSS_BLACKRECT
スタイルを使用して描画しているのではなく、想定どおりにコントロールを描画するのを待っているため、問題が発生しました。
私が探しているのは、3つのうちの1つだと思います。GDI
基本OnPaint()
メソッドが終了した後に使用して描画する方法。コントロールにデフォルトSS_BLACKRECT
のスタイルを描画させ、その後OWNERDRAW
画像を描画させる方法。または、の描画を模倣するコードSS_BLACKRECT
。
CStatic
最後のものが最も簡単かもしれませんが、デフォルトのDrawItemのようにコントロールを描画するために設定する必要があるすべてのものがわかりません。
c# - listbox control ownerdraw question(リストボックス項目に編集コントロールを追加する)
ユーザーがアイテムを選択したときに、リストボックス(winforms 2.0)に所有者描画変数スタイルを使用しています そのセルに編集コントロールを描画したい それはドロップダウンではなく、セルまたはアイテムに表示される実際の編集コントロールですどうだった?
c# - OwnerDrawモードのListBoxDrawItemHotLight状態?
OwnerDrawFixed
WinFormsアプリのカスタムリストボックスコントロールのDrawModeとして使用しています。
ユーザーがリストボックスアイテムにカーソルを合わせたとき、つまりMouseMoveで、ListBoxItemの背景を再描画(または他のアクションを実行)したい...
DrawItemState.HotLight
ListBoxで機能することはないので、どのようにエミュレートするか、この問題を回避する方法を考えます。