2009-05-05 9 views
0

可能であれば、レイヤーウィンドウの後ろに対話型のコントロールがあるので、私はAlphaBlendの子フォームへの道を探しています。AlphaBlend子フォーム

問題は、複数のビジュアルレイヤー(図面、画像など)をペイントする通常のTFormのコンポーネントがあることです。ある時点で、このフォーム(その場で)のエディタコントロールをインスタンス化する必要があります。このコントロールは、コントロール(エディットボックス、チェックボックスなど)の外にさまざまな標準入力コントロールを含みますが、オーバーレイしたいレイヤーの前にあるレイヤーは、アルファブレンディングを使用して編集されます(また、クリックスルーにするにはWS_EX_TRANSPARENT)。

私は最初にそのコンポーネントにボーダレスのTFormという子フォームを使用すると考えていましたが、AlphaBlended TFormがアルファブレンドされていないポイントまでは問題なく機能しますが、親子化するとすぐに不透明になります...

それから、アルファベットのフォームを親にしないようにして、それをfsStayOnTopに設定し、関連するイベントに反応させて、スクリーン上のコンポーネントの前にそれを維持してください。しかし、それは本当に満足できるものではありませんソリューション:アルファブレンドされたStayOnTopフォームは、ユーザーがコンポーネントの前でそれらを移動することを決定した場合、アプリケーションのモーダルモードレスフォームの前にもあります。

したがって、子フォームをアルファベットにする方法に関する他のアイデア? (またはそれと同じように動作します)

+0

ws_ex_Transparentスタイルでは、ウィンドウがマウスイベントの影響を受けません。そのスタイルは塗装順序にのみ影響します。マウスイベントを受信したくない場合は、SetWindowRgnを使用してウィンドウ内に「穴」を作成します。 –

答えて

2

MSDNによれば、あなたは運が悪いです。WS_EX_LAYERED cannot be used for child windowsです。

あなたのフォーム/アプリケーションがフォーカスを失ったときに、すべてのエディタフォームを非表示にすることができます。つまり、少なくとも他のウィンドウの上に表示されないようにすることができます。それでも、満足できるものではありません。

+0

ありがとう、私はそれを恐れていた。 仕様書を書き直して、オーバーレイを編集フォームの入力コントロールの「外側」にしか表示できないようにすることで解決しました(編集フォームは透明になり、入力コントロールの編集エリアは表示されません)。 オーバレイは主に測位の目的とガイドラインに使用されていたため、これは十分満足できるものではないとすれば "十分"です。 – user45336

関連する問題