- 締切済み
OCX (ACTIVEX)で非表示にするとハンドルが取れない
MSVC++(MFC)を使用して、OCXモジュールを開発しています。 VBデザイン時に Visibleプロパティがtrueの場合でも 実行時には非表示になるようしたいと思っています。 非表示にするために、「コントロールの型情報の制御」のところで、 ******に OLEMISC_INVISIBLEATRUNTIME を追加すると、 実行時に非表示になり、要件は満たすのですが、 この場合、GetSafeHwnd()の返却値がNULLとなってしまい、 イベント発生時のPostMessage()が出来なくなってしまいます。 OCXを非表示にでき、PostMessage()が成功するようにするには どのようにしたら良いかをご存知でしたら教えてください。 なお、WINDOWS 95からXPまで全ての環境での動作を考えています。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- taka_tetsu
- ベストアンサー率65% (1020/1553)
回答No.2
>OCX内部でスレッドを動かして、PostMessageによりメインのコントロールに通知しています。 PostThreadMessageで問題ないような。 で、OnWindowlessMessageで処理すればいいかと。
- taka_tetsu
- ベストアンサー率65% (1020/1553)
回答No.1
>イベント発生時のPostMessage()が出来なくなってしまいます。 どこからどこに対してPostMessageしたいのでしょう? 非表示のコントロールに対してメッセージを投げる理由が分からないのですが。 コンテナとのやり取りは、イベントとメソッド、プロパティで十分なはずですが。
質問者
補足
OCX内部でスレッドを動かして、PostMessageによりメインのコントロールに通知しています。 つまり、OCX内部のスレッド=>メインスレッドへのPostMessageです。
補足
結局、以下の形で解決しました。 if ( !AmbientUserMode() ){ // OCXの表示 }else{ pdc->FillRect( rcBounds, &CBrush(TranslateColor( AmbientBackColor() )) ); }