問題タブ [onpaint]

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 投票する
3 に答える
2821 参照

combobox - MFC: オーナー ドロー用の Aero スタイルのコンボ ボックスをレンダリングする方法は?

CComboBoxをオーバーライドするサブクラスを含む大規模な MFC アプリケーションを継承しましたOnPaint。現在、(線と四角形を使用して) すべての描画を手作業で行い、明らかに Windows 98 スタイルに見えるコンボ ボックスをレンダリングします。ただし、それ以外の点ではうまく機能し、私たちが依存している多くの便利なカスタム機能を提供します。コントロール全体を書き直すことはおそらく選択肢ではありません。

可能な場合は Aero スタイルで描画できるように最新化したいと思いOnPaintます (最新のテーマが利用できない場合は古いコードに戻ります)。ボタンなど、他のいくつかのカスタム コントロールを使用してこれを行いましたが、この目的には最適です。マウスホバー時の穏やかなハイライトなど、正しく動作しない小さな動作があることは知っていますが、それはこのアプリでは大した問題ではありません.

CVisualStylesXP私はckass にアクセスできるのでOpenThemeData、のようGetThemeColorな呼び出しを行うためのインフラストラクチャを既に持っていDrawThemeBackgroundます ( LoadLibraryVista を最小システムとして強制しません)。残念ながら、テーマに適した境界線とドロップダウン ボタンを備えた見栄えの良いコンボ ボックスを取得するための適切な呼び出しシーケンスがわかりません。

ここで何をすべきか知っている人はいますか?

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

c# - Panelコントロールに画像を描画すると、サイズ変更時にアーティファクトが発生します

現在、私は簡単な作業だと思ったことをやろうとしています。

PanelWindowsフォームのコントロールの全領域に画像を描画します。BackgroundImage(プロパティを使用できるので、今のところ無視してください)

描画する画像は次のようになります。

ここに画像の説明を入力してください

つまり、周囲に1ピクセルの青いフレームがある黄色のボックスです。

描画するために、コントロールのPaintイベントを使用しています。Panel

これは、最初にフォームを表示するときに問題ないように見えます。

ここに画像の説明を入力してください

フォーム(およびドッキングされたパネルも)のサイズを変更すると、小さくするとエッジがカットされます...

ここに画像の説明を入力してください

...または大きくすると、アーティファクトが描画されます。

ここに画像の説明を入力してください

かなり単純でわかりやすいことが起こっていると確信していますが、その理由は本当に理解できません。

を無視してClipRectangle常にすべてを描いているので、画像は常に拡大縮小されると思いました。

私の質問は次のとおりです。

  • アーティファクトの理由は何ですか?(私はこれを理解するのが大好きです!)
  • 遺物を取り除くために私は何をしなければなりませんか?Invalidate(各サイズ変更を呼び出す以外に)

更新、解決策:

ライアンの答えのおかげで、私は許容できる解決策を見つけることができました。基本的に、私はからクラスを派生さPanelせ、オーバーライドを実行し、基本メソッドを呼び出しOnPaintBackgroundませんでした。最後に、派生パネルのコンストラクターに次のコードを追加しました。

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

c# - Winform の OnPaint - .NET Compact Framework 3.5

現在、スマート デバイス プロジェクトで湾曲したプログレス バーに取り組んでいます。OnPaint 関数をオーバーライドします。

Override OnPaint() 関数では、カーブしたプログレス バーを濃い灰色で描画し、プログレス バーの変化する値 (30% など) を反映するために、プログレス バーの一部を黄色で描画します。ただし、値が連続的に変化している場合、進行状況バーの色の一部が黄色に変化することがわかります。ただし、湾曲したプログレス バー自体も再描画されます。値が変化している間に元の湾曲したプログレスバーを再描画しないようにする方法を知っている人はいますか? そのため、値が変更されている場合、プログレス バーの一部のみが黄色で再描画され、元のグレーのプログレス バーは再描画されません。OnPaint関数で使用するコードは次のとおりです。

Override OnBackgroundPaint を使用して、元の湾曲したプログレス バーを背景として描画し、OnPaint で再描画しないようにしようとしましたが、機能しません。フォームがロードされたときに何も見えません。何か案は?

事前に助けてくれてありがとう。

よろしく

0 投票する
2 に答える
10310 参照

c# - C# で OnPaint メソッドをオーバーライドした PictureBox

PictureBox(4 x 32px画像)に小さな写真をペイントしたいので、オンペイント方法をオーバーライドする必要がありますか、それともPictureBoxを拡張する新しいコンポーネントを作成する必要がありますか?私はこれを試しましたが、これはJavaで働いていましたが、ここではそうではありません。

InitializeComponent メソッドの完全なコード:

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

c++ - CDC::DrawText で変更可能なテキストを描画する

変更可能な値を画面に表示したい。次のコードがあります

ウィンドウが表示されたときにテキストを描画します。しかし、テキストが異なる次の呼び出しでは、画面上のテキストは変更されませんでした。デバッガーを使用すると、OnPaint が呼び出され、 テキストが変更されていることがわかりますが、ウィンドウのテキストは同じままです。GetLastError() は 0 を返します。DrawText がどのように機能するかという重要な点が欠けていると思います。最後に UpdateWindow() を呼び出そうとしましたが、何も変わりませんでした。なぜか画面が更新されない…

0 投票する
2 に答える
25635 参照

c# - C#でOnPaintイベントを使用するには?

サイトで同様の質問をいくつか見ましたが、どれも本当に役に立ちませんでした。

ユーザーがいくつかのテキストボックスに入力した値に応じて形状が異なるボタンをクリックすると、フォームに数行を描画する関数があります。

私の問題は、フォームを最小化すると線が消え、OnPaint イベントを使用してこれを解決できることを理解しましたが、その方法がよくわかりません。

OnPaint イベントを使用して、ボタンを押すだけで何かを描画する関数を使用する簡単な例を教えてください。

0 投票する
2 に答える
2269 参照

c# - カスタム コントロールの onPaint イベントが機能しない

こんにちは、私はカスタムコントロールを書いているときに問題があります。私のコントロールは Windows.Forms.Control を継承しており、OnPaint メソッドをオーバーライドしようとしています。別のコントロールを追加すると、フォームに 1 つのコントロールを含める場合にのみ機能するため、問題は少し奇妙です。2 番目のコントロールは描画されませんが、すべてのコントロールに対して OnPaint メソッドが呼び出されます。だから私が望むのは、すべてのカスタムコントロールが描画されることです。ここにあるのは私のコードだけではありません:

コードを実行すると、画面に赤い四角形が 1 つだけ表示されることがわかります。

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

vb.net - なぜペイントはこの画像を描画しないのですか?

自分のICan3D.Graphicsクラスから生成された画像から直接描画するために作成したコントロールのOnPaintメソッドをオーバーライドしています。画像を保存すると(ご覧のとおり、その行はコメント化されています)、画像は正しいです。ただし、フォームが読み込まれると、画像は背景として表示されません。

私はVB.netを使用しているので、すべての.netの回答が受け入れられます:)

0 投票する
2 に答える
232 参照

c# - カスタム コントロールで Control.Update メソッドを使用する方法

短くて理解しやすいので、最初にコードを投稿してから、質問します。

コントロールのサイズは、使用する場合に備えて 195.14 に設定されています。1.6Ghz アトム プロセッサで実行されている 200,200 のパネルに、これらのうちの 8 つがあります。コンピューターで最大 3 つのバッテリーの値を表示するために使用されます。ラベルは 500 ミリ秒ごとに更新されます。あなたが収集したかもしれないように、少しちらつきがありますが、許容範囲です. できればもっと少なくしたい。そこで私は Update の使用を検討し始め、バックグラウンド ビットなどのコードの一部を OnPaintBackground() に移動する必要があると考えましたが、私が作成したテスト フレームでは Update メソッドは何も変更しません。 Invalidate メソッドを使用すると、OnPaintBackground と OnPaint の両方が実行されます。そんな時に試したのがこちら。

私はその1つのユーザーコントロールを約300,300にしたので、私が見ているものを確信することができました. 500ms タイマーのバッテリー制御で、テキスト、テキスト 2、およびテキスト 3 を更新したことを忘れていました。そのテキストの値が仕様から外れている場合は、バッテリー障害フラグを設定してから無効にすることを考えています..しかし、よくわかりません。では、テキストのみを更新するにはどうすればよいですか???

0 投票する
2 に答える
453 参照

visual-c++ - CStaticのCPaintDCは図面の切断ではありません

派生したCStaticコントロールのOnPaint()メソッドは、私が知る限り、コントロールよりも大きい図面の部分を切り取ることになっています。ただし、これは行いません。