ActiveXのピクチャプロパティを変更するには?


matsu  2007-01-25 06:49:02  No: 64275

WindowsXP Pro SP2
VC++.NET 2003
MFC
でActiveXを作成しました。

<CxxxCtrlクラス>
(xxx.h)
protected:
  CPictureHolder m_pic;
protected:
  IPictureDisp* GetPicture(void);
  void SetPicture(IPictureDisp* pVal);

(xxx.cpp)
#include <msstkppg.h>・・・追加

カスタムプロパティ(Picture)をクラスウィザードで追加
BEGIN_DISPATCH_MAP(CxxxCtrl, COleControl)
    DISP_FUNCTION_ID(CxxxCtrl, "AboutBox", DISPID_ABOUTBOX, AboutBox, VT_EMPTY, VTS_NONE)
    DISP_PROPERTY_EX_ID(CxxxCtrl, "Picture", dispidPicture, GetPicture, SetPicture, VT_PICTURE)
END_DISPATCH_MAP()

void CxxxCtrl::DoPropExchange(CPropExchange* pPX)
{
    ExchangeVersion(pPX, MAKELONG(_wVerMinor, _wVerMajor));
    COleControl::DoPropExchange(pPX);

    PX_Picture(pPX, "Picture", m_pic);
}

BEGIN_PROPPAGEIDS(CxxxCtrl, 4)
  PROPPAGEID(CxxxPropPage::guid)
  PROPPAGEID(CLSID_StockColorPage)
  PROPPAGEID(CLSID_StockFontPage)
  PROPPAGEID(CLSID_StockPicturePage)
END_PROPPAGEIDS(CxxxCtrl)

void CxxxCtrl::OnResetState()
{
  COleControl::OnResetState();
  m_pic.CreateEmpty();
}

IPictureDisp* CxxxCtrl::GetPicture(void)
{
  AFX_MANAGE_STATE(AfxGetStaticModuleState());
  return m_pic.GetPictureDispatch();
}

void CxxxCtrl::SetPicture(IPictureDisp* pVal)
{
  AFX_MANAGE_STATE(AfxGetStaticModuleState());
  m_pic.SetPictureDispatch(pVal);
  InvalidateControl();
  SetModifiedFlag();
}

void CxxxCtrl::OnDraw(CDC* pdc, const CRect& rcBounds, const CRect& rcInvalid)
{
  m_pic.Render(pdc, rcBounds, rcBounds);
}
という単純なものです。
ActiveXコントロールテストコンテナではプロパティページのピクチャページ
でピクチャを変更すると表示も変わります。
ただ、別のプロジェクトのダイアログに挿入し、デザインでピクチャを選択し、
コンパイルをすると正常に選択したピクチャが表示されるのですが、
一度、デザイン画面に戻り、ピクチャを変更した場合、
デザイン画面上は選択したピクチャが表示されるのですが、コンパイル、実行
すると前のピクチャが表示されます。

原因がわからなくて困っています。
よろしくご指導お願い致します。


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

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






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