ActiveX コントロールを Spy++ でターゲッティングできません。


かるび  2007-07-24 02:09:48  No: 65820

質問させていただきます。

環境:
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++ でターゲッティングできるのかご存知でしたら、
ご教示いただければと思います。


オショウ  2007-07-24 06:30:53  No: 65821

動的に制御したことは無かったのですが・・・

http://www.codeguru.com/cpp/com-tech/activex/controls/article.php/c5537/

ここの中盤以降をご参照下さい。
参考になるかナ〜

以上。


かるび  2007-07-24 19:35:46  No: 65822

オショウさん、アドバイスありがとうございました。

早速試させていただきましたが、
やはり 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++ でターゲッティングできるようになるということです。

うーん、リサイズ処理のタイミングがわるいんでしょうか???


とおり  2007-07-25 06:02:42  No: 65823

もういいでしょ解決で。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加