質問させていただきます。
環境:
Windows XP SP2
Visual C++ 2003
Platform SDK Feb 2003
ATL で作成した ActiveX コントロールのサイズを
SetExtent() で変更すると、
Spy++ でターゲッティングできなくなってしまいます。
( もとのサイズに戻すとターゲッティングできます。 )
具体的には、
起動時にサイズが 200 x 200 だった ActiveX コントロールを、
100 x 100 に変更すると Spy++ でターゲッティングできなくなります。
300 x 300 に変更しても Spy++ でターゲッティングできなくなります。
200 x 200 に戻すとターゲッティングできるようになります。
コードは下記サイトを参考にしました。
http://www.dotnetheaven.com/Uploadfile/prvn_131971/x1204232005055110AM/x12.aspx
どういう実装をすれば、
ActiveX コントロールのサイズを変更しても、
Spy++ でターゲッティングできるのかご存知でしたら、
ご教示いただければと思います。
動的に制御したことは無かったのですが・・・
http://www.codeguru.com/cpp/com-tech/activex/controls/article.php/c5537/
ここの中盤以降をご参照下さい。
参考になるかナ〜
以上。
オショウさん、アドバイスありがとうございました。
早速試させていただきましたが、
やはり Spy++ でターゲッティングすることができませんでした。
ただ、ちょっと強引なんですが、
ターゲッティングできる方法を見つけました。
サイズ変更ルーチンを 2 回実行させると
Spy++ ターゲッティングできるようになります。
つまり、
リサイズ処理を行う OnResizeActiveX() という
メッセージハンドラがあったとして、
SendMessage( MSG_RESIZE_ACTIVEX, wParam, lParam );
PostMessage( MSG_RESIZE_ACTIVEX, wParam, lParam ); // 2 回目は PostMessage() でないとダメ!!
とすると、
サイズ変更後も Spy++ でターゲッティングすることができました。
もう少し具体的な処理の流れは下記のようになっていて、
キー '1' が押下されたらリサイズ処理を行うようになっています。
LRESULT OnKeyDown( ... )
{
if ( wParam == '1' )
{
SendMessage( MSG_RESIZE_ACTIVEX, wParam, lParam );
PostMessage( MSG_RESIZE_ACTIVEX, wParam, lParam );
}
return ( 0 );
}
2 回目は SendMessage() ではダメで、
PostMessage() なら OK ということからわかるのは、
つまり、一度 OnKeyDown() を抜けてから、
もういちどリサイズ処理を行えば Spy++ でターゲッティングできるようになるということです。
うーん、リサイズ処理のタイミングがわるいんでしょうか???
もういいでしょ解決で。
ツイート | ![]() |