ActiveXコントロールを貼り付けたときに呼ばれる関数

[戻る]
よん 2006/07/26(水) 11:50:31
(環境:WinXP VC++6.0)
すいません。どうしてもわからないので、教えてください。

MFCで作成したダイアログリソースを
ActiveXコントロールのダイアログにコピーして、
CxxxCtrlクラス上にモードレスダイアログとして
表示したいのですが。
以下コードを載せます。

class CxxxxCtrl : public COleControl
{
private:
    CyyyyDlg*  m_pMainDlg;
}

int CxxxxCtrl::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
    m_pMainDlg = new CyyyyDlg();
    m_pMainDlg->Create(IDD_YYYYY_DIALOG, this);
    m_pMainDlg->ShowWindow(SW_SHOW);
}

ActiveXコントロールテストコンテナ上では、正常に表示されます。
しかし、ダイアログ上に「ActiveXの挿入」で貼り付けると
白塗りの領域が表示されてしまいます。
実行すれば表示されるのですが、
貼り付け時にコントロールが見えないのが、気になります。
OnCreate()が貼り付け時には呼ばれていないのかもしれません。

この問題を解決する手段を教えていただけないでしょうか。

よん 2006/07/26(水) 16:26:31
[[解決]]
自分で解決しました。
汚してすいません。

επιστημη 2006/07/26(水) 16:55:19
なにがいけなくて/どう解決したのかを添えないとホントに汚した"だけ"になりますぜ。

よん 2006/07/26(水) 17:22:47
確かにその通りですね。すいません。

新規で、MFC ActiveX ControlWizard を作成し、
「このコントロールをどのウィンドウクラスのサブクラスにしますか?」
の項目で、(none)を選択していたのをその他の項目に変えたら、
正常に表示されるようになりました。
コードの上で異なる点は、
・PreCreateWindow
・IsSubClassedControl
・OnOcmCommand
上記3つの関数が記述されていることです。
この変化によって、OnCreateが呼ばれるようになったようなのですが、
理由はまだわかりません。

ITO 2006/07/26(水) 18:02:29
>自分で解決しました。
>汚してすいません。
汚してないでないと思いますが.......
質問しておかしいことに気付くことも多々あります。
自力で解決したのはそれはそれで正しい結果でないでしょうか。

古いスレッドには追加発言できません。