OCX作成時のコントロールの透過


たくみ  2003-09-18 18:44:38  No: 52163  IP: [192.*.*.*]

今VC6で画像表示のOCXを作成しています。

土台はMFC  ACTIVEX  コントロールウィザードで作成しました。
OCXにプロパティで画像ファイル名を渡すとコントロールに画像を
表示するOCXにしたいのですが、ファイル名を渡す前のコントロールは
透過させたいのですが、SetBkModeやSetBkColor等の設定を行なっても
透過できませんでした。
どなたか助言をおねがいします。

編集 削除
通りすがり  2003-09-22 11:42:25  No: 52164  IP: [192.*.*.*]

レスがついてないので判らないなりにレスつけてみます・・・・(^^;

初めに、私自身も現在試行錯誤しながらOCX作成を行なっているので
余り詳しくないため、思いっきり外しているかもしれません。
その点だけご了承下さい。(^^;

質問の内容ですが、透過させたいというのは、
OCXのデフォルト背景色をコントロールを貼り付けている
コンテナアプリケーションの背景色に合わせるという
認識で良いのでしょうか?
(黒背景のコンテナに貼り付ける際は背景色を黒にする?)

そういう意味なのであれば、ActiveXコントロールのアンビエントプロパティで
コンテナの背景色を取得して、コントロール全体をその色で塗りつぶせば
良いかと思われます。

MSDNで検索すれば、それらの使い方も出てくると思いますので、
一度探されてみてはいかがでしょうか?
ちなみに自分では試してませんw

P.S.
思いっきり外してるっぽい・・・;;

編集 削除
たくみ  2003-09-22 14:51:51  No: 52165  IP: [192.*.*.*]

すいません、質問の仕方が悪かったですね^^;

OCXの背景にコンテナだけであれば塗りつぶせば
うまくいくのですが、コンテナには画像などがあるため、
その画像もみえるように透過させたいです。

画面の部分をきりとってコントロールに貼り付けることも
考えたのですが、それだと少し時間がかかってしまうので
透過させる方法があるなら、そちらのほうが処理は早いのでは
と思って質問させていただきました。

編集 削除
ぴのきよ  2003-09-22 19:40:30  No: 52166  IP: [192.*.*.*]

OCXの作成は経験ないんですが、
ど素人でわかる範囲で試してみたら、
static HRGN hRound;
hRound = CreateEllipticRgn(0, 0, 0, 0);
::SetWindowRgn(this->m_hWnd, hRound, TRUE);

で、消えました。
(なぜか、丸いリージョンにしてますが、四角でもいいかと^^;;)

復活させるときは、同様に必要な領域のリージョンを作成して
SetWindowRgn()してやればいいのではないかと・・・。
ただ、ウィンドウ自体が消えている状態なのでWM_PAINTは
再登場させてから一度は自分で呼び出してやらないとだめっぽいですね・・・。

どうでしょうか?

編集 削除
たくみ  2003-09-25 17:26:42  No: 52167  IP: [192.*.*.*]

ありがとうございます!!
早速やってみます

編集 削除