問題タブ [nonclient]

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 に答える
7829 参照

c# - エアロ ガラス ウィンドウの非クライアント ペインティング

今、アプリケーションのタイトル バーをカスタマイズしています。私の目的は、タイトル バーにボタンを 1 つ追加することです。以前の質問 で、非クライアント領域をカスタマイズする方法について人々からアドバイスを受けました。それは、1つの小さなことを除いて完全に機能します-光っています! 非クライアント領域でグローを描くことはできますが、窓の外に広がるようにすることはできません。このサブジェクトに関するリソースも見つかりません。

このサンプルを調べて、クライアント以外の描画機能を調査するための独自のテスト アプリを作成しました。私のアプリのウィンドウのスクリーンショット:

私のアプリのウィンドウ

これで、borderframe によってクリップされたときに、システム ボタンがウィンドウの外で光るのがわかります。

たとえば、Skype のウィンドウには、タイトル バーに 4 つのカスタム ボタンがあり、ウィンドウ フレームから「光る」ことができます。

スカイプの窓口

窓の外にボタンの光を描く方法を見つけるようにアドバイスしてもらえますか?
前もって感謝します!

[編集]
皆さん、回答ありがとうございます!

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

winforms - winForms透明で非クライアント領域をペイントする方法は? .ネット4

カスタムフォームを開発していますが、非クライアント領域を透明にしたいと考えています。メッセージ番号「0x85」を介して非クライアント領域の描画を処理しています。これは私がこれまでに試したことです:

  • 色 "Color.Transparent" を使用してペイント -> 非クライアント領域が黒くペイントされました。赤、黒、または緑の画像を使用した場合、完全に機能しますが、透明 = 黒
  • フォームのサイズの透過画像を作成し、メソッド「myGraphics.DrawImage("img.png")」を使用しました。背景は黒のまま。赤、黒、または緑の画像を使用した場合、それも完全に機能します...
  • 何もペイントしないでください(私が透明のままであることを望んでいます)...うまくいきませんでした
0 投票する
1 に答える
1976 参照

winforms - クライアント以外の領域に新しいボタンを挿入するにはどうすればよいですか?

カスタムフォームを開発していて、最小化ボタンのすぐ隣にボタンを配置する必要があります。誰もがそれを行う方法を知っていますか?

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

winapi - WM_NCHITTESTはマウスカーソルを変更しません

カスタムNCHITTESTとNCCALCSIZEを実装するレイヤードウィンドウ(WS_EX_LAYERED)があり、ウィンドウのクライアントrectをウィンドウrectと同じにします。私のウィンドウのサイズとペイントは正しくあります。カーソルがウィンドウの下端近くにあるときにWM_NCHITTESTからHTBOTTOMを返すと、ウィンドウの下部から垂直方向のサイズ変更タイプのアクションが発生します。ただし、垂直サイズ変更カーソルが表示されません。WM_SETCURSORを実装して、ウィンドウの端に対するポインターの位置をテストせずに、これを修正する方法はありますか?

これが私のコードの抜粋です:

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

.net - NonClient の上部境界線のサイズを取得するには?

セカンダリ フォームを他のフォームの右端に揃える必要があります。

AERO を有効にしてCOMPILEDアプリケーションをコンパイルして実行すると(IDE から実行する場合ではない)、次のようになります。

ここに画像の説明を入力

ここでGJKHのすばらしい回答に感謝します: Aero の非クライアント領域サイズを正しく決定する方法は?

...これで、セカンダリ フォームをメイン フォームの右側に揃えることができますが、セカンダリ フォームはまだ上から少しピクセル分ずれています。

ここに画像の説明を入力

これは私が使用しているコードです:

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

delphi - 境界線の「ルック アンド フィール」を失わずに TCustomControl にパディングを追加する方法は?

カスタム TMemo を作成しましたが、テキストがパディングなしで境界線にぶつかっていることに気付きました。ClientRect 内の問題をオフセットするなどして修正することはできますが、この段階ではあまり洗練された解決策にはなりません。TMemoには、クライアント領域の一部ではない少なくとも1pxのパディングがあるので、同じことを試してみようと思いました(とにかくそれが彼らがしていることだと思います)。

そのため、WM_NCCALCSIZE を使用してクライアント領域を縮小しましたが、もちろん境界線は完全には描画されないため、WM_NCPAINT も実装する必要があります。それはうまくいきます。ここで、単一の clBlack 境界線を描画し、その後に clWindow のパディング四角形を描画します。ここまでは順調ですね。

ただし、XP (クラシック スタイル) では 1px の境界線が少し奇妙に見えるので、古い「クライアント エッジ」の境界線を描画し、XP/Vista/Win7 テーマのクライアント エッジの外観も準拠する方法があるのではないかと考えました (私はグラデーションを使用して手動で描画する方法がわからない)。

そして、それは私が少し立ち往生しているところです。パディングを実行できるように境界線をペイントする方法と、適切な「クライアントエッジ」の外観(1pxまたは2px)を維持する方法を知っている人はいますか?

とても有難い。;)

(もちろん他の方法も大歓迎です)

=====

編集: いじくり回した後、次の解決策を思いつきました。ここに投稿しようと思いました。

編集: ああ!スクロールバーが動作している場合、上記のものは機能しません。私はまだその解決策を持っていません。助言がありますか?

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

delphi - 非クライアント ウィンドウの境界線が太くなっているスクロールバーの描画の問題

スクロールバーを持つカスタム コントロールのクライアント領域の周りに色付きの境界線を描画しようとしています。このためBorderWidthに、正の整数に設定してWM_NCPAINTメッセージに応答します。これは VCL と Win32 を組み合わせたように聞こえますが、このBorderWidthプロパティによってメッセージが適切に処理されるだけWM_NCCALCSIZEです。

次のコードはSSCCEです。

結果は次のようになります。

スクリーンショット

これは、右下の正方形を除いて完璧に見えます。その領域は、何かを行うことで簡単に修正できます。この領域は、私が説明しようとしている実際の問題とは何の関係もないため、意図的にペイントしません。ですから、その四角は無視してください。

これで、フォームの右側の境界線をドラッグしてフォームのサイズを変更できるようになりました。サンプル コントロール ウィンドウの垂直スクロール バーが非表示になるように、最初にサイズを小さくします。次に、フォームをゆっくりと拡大して、サンプル コントロールが再び完全に見えるようにします。次に、次のようになります。

スクリーンショット

ここで問題を見ることができます:BorderSize垂直スクロールバーの ~ 左端のピクセルは、オペレーティング システムによって描画されていないように見えます。

いくつかの観察:

  1. inheritedmere の代わりにfull を使用するDefaltHandler(Message)と、問題がさらに悪化します。この場合、フォームが一時的に画面外に移動された後、およびコントロールを遮るフォームの縮小拡大操作の後、黄色の領域はスクロールバーを完全に遮ります。

スクリーンショット

  1. メッセージに一致する応答を実装するWM_NCHITTESTと、コントロールの動作が改善されますが、スクロールバーの描画の問題は解決されません。

  2. スクロールバーのあるコントロールの非クライアント領域内にカスタム境界線を描画する方法を知っていますか? ; この Q への回答はすべて、上記の問題に悩まされています。

Delphi 2009 と Windows 7 Home Premium、64 ビット、Aero 対応を使用しています。