重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

MSVC++(MFC)を使用して、OCXモジュールを開発しています。

VBデザイン時に Visibleプロパティがtrueの場合でも
実行時には非表示になるようしたいと思っています。

非表示にするために、「コントロールの型情報の制御」のところで、
******に OLEMISC_INVISIBLEATRUNTIME を追加すると、
実行時に非表示になり、要件は満たすのですが、
この場合、GetSafeHwnd()の返却値がNULLとなってしまい、
イベント発生時のPostMessage()が出来なくなってしまいます。

OCXを非表示にでき、PostMessage()が成功するようにするには
どのようにしたら良いかをご存知でしたら教えてください。

なお、WINDOWS 95からXPまで全ての環境での動作を考えています。

A 回答 (2件)

>OCX内部でスレッドを動かして、PostMessageによりメインのコントロールに通知しています。



PostThreadMessageで問題ないような。
で、OnWindowlessMessageで処理すればいいかと。

この回答への補足

結局、以下の形で解決しました。

if ( !AmbientUserMode() ){
// OCXの表示
}else{
pdc->FillRect( rcBounds, &CBrush(TranslateColor( AmbientBackColor() )) );
}

補足日時:2005/06/23 21:38
    • good
    • 0

>イベント発生時のPostMessage()が出来なくなってしまいます。



どこからどこに対してPostMessageしたいのでしょう?

非表示のコントロールに対してメッセージを投げる理由が分からないのですが。

コンテナとのやり取りは、イベントとメソッド、プロパティで十分なはずですが。

この回答への補足

OCX内部でスレッドを動かして、PostMessageによりメインのコントロールに通知しています。
つまり、OCX内部のスレッド=>メインスレッドへのPostMessageです。

補足日時:2005/06/16 23:34
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!