本ページは公開が終了した情報の複製であり、掲載時点での情報です。本ページに記載されている内容について各所に問い合わせることはご遠慮下さい。
サポート技術情報

[MSVC] VBXコントロールのサブクラス化

文書番号: 401945

最終更新日: 2003/11/10


この資料は以下の製品について記述したものです。


概要

この資料は Visual C++ 1.0 の Microsoft Foundation Class ライブラリ 2.0 (以下 MFC 2.0) を使用して、VBX コントロールのクラスをサブクラス化する方法の一つを
紹介したものです。

詳細

VBX コントロールのクラス( CVBControl )は通常のサブクラス化の手順では、うまく 作成することができません。CVBControl クラスは VisualBasic の動作をエミュレート するために多くのメンバ変数を用意しています。それらを正しく初期化しないとうまく サブクラス化することができません。
CVBControl クラスをサブクラス化する場合は、CWnd::SubclassDlgItem() ではなく
以下に示す SubclassVBControl() という独自の関数を使用して下さい。
  // 必要な typedef //
  typedef CVBControl* __based((__segment)_self)* FAR* CVBHandle;
  //CVBControl の派生クラス (この場合は CMyGrid) のメンバ関数として用意します//
  void CMyGrid::SubclassVBControl(CWnd* pParent, UINT idChild, BOOL bEmbedded)
  {
          ASSERT(pParent != NULL);
          ASSERT(idChild != 0 && idChild != -1);
          CMyGrid* pControl = (CMyGrid*)pParent->GetDlgItem(idChild);
          ASSERT(pControl->IsKindOf(RUNTIME_CLASS(CVBControl)));
          m_pModel = pControl->m_pModel;
          m_bRecreating = pControl->m_bRecreating;
          m_bInPostNcDestroy = pControl->m_bInPostNcDestroy;
          m_bLoading = pControl->m_bLoading;
          m_nCursorID = pControl->m_nCursorID;
          m_nInitialStack = pControl->m_nInitialStack;
          m_nRecursionLevel = pControl->m_nRecursionLevel;
          m_bStackFault = pControl->m_bStackFault;
          m_nFaultRecurse = pControl->m_nFaultRecurse;
          m_hbrBkgnd = pControl->m_hbrBkgnd;
          m_hFontCreated = pControl->m_hFontCreated;
          m_hcurMouse = pControl->m_hcurMouse;
          m_hCtl = pControl->m_hCtl;
          m_clrBkgnd = pControl->m_clrBkgnd;
          m_clrFore = pControl->m_clrFore;
          m_rectCreate = pControl->m_rectCreate;
          m_strTag = pControl->m_strTag;
          m_bAutoDelete = !bEmbedded;
          pControl->m_pModel = NULL;
          pControl->m_hCtl   = NULL;
          CVBHandle hpControl = (CVBHandle) m_hCtl;
          **hpControl = this;
          pControl->m_hFontCreated=NULL;
          pControl->m_hbrBkgnd=NULL;
          pControl->m_hcurMouse=NULL;
            Attach(pControl->Detach());
          if (pControl->m_bAutoDelete)
                  delete pControl;
  }

Keywords: KBHOWTO VC10 KB401945
Technology: kbAudDeveloper kbVCsearch

inserted by FC2 system