ActiveXでのMSHFlexGridのCreate

[戻る]
おさる [E-Mail] 2002/10/17(木) 14:13:25
>はじめまして。いまMSHFlexgridを使用してオリジナルグリッドコントロールを作成
>しているのですが、肝心のMSHFlexGridのCreateが出来ません。
>よい方法がありましたら教えてください。
追記します。
開発環境は下記のとおりです。
Microsoft Visualstudio Enterprise 6.0(SP5)
Windows 2000

wood 2002/10/17(木) 23:16:01
マズは前のスレッド同じ質問のようなので解決にしておいてください
または、管理者に削除要請してください

これまでにやった作業手順明記してください
どこの手順が間違っているか指摘しようがありません

おさる [E-Mail] 2002/10/18(金) 09:24:08
woodさん返信ありがとうございます。
ActiveXプロジェクトは下記の手順で作成しています。
@まずActiveXControlWizardでサブクラスをnoneにしてスケルトンを生成します。
Aつづいてコンポーネントの追加で階層フレキシブルグリッドをコントロールに追加しま
す。
BAの作業でmsflexgirdのファイルがプロジェクト内に生成されるので、これをつかって
 クラスの追加で派生クラスを作ります。
CActiveXのコントロールクラス(ctl.h/cpp)に派生クラスのクラスを生成し、
 ActiveXのコントロールクラスのコンストラクタとデストラクタにそれぞれクラスの
 newとdeleteを記述しておきます。
DクラスウィザードでコントロールクラスにOnCreate(LPCREATESTRUCT lpCreateStruct)
 を生成し、ここで派生クラスのCreateを記述します。
 記述は下記のとおりです。
 pGrid->Create(_T("STATIC"), "IDM_MYGRID", WS_CHILD | WS_VISIBLE,
  CRect(0, 0, 200, 100), this, 900001, NULL);
 (_T("STATIC")は""でも結果は同じでした)

Eコンパイルはとおるのですが、
 例外処理 (初回) は TSTCON32.EXE (MFCO42D.DLL) にあります: 0xC0000005: Access 
Violation
 でabortします。

これと同様にexeプロジェクトのビュークラスに記述したらグリッドはCreateされます。
多分、Createのタイミングに誤りがあるのでしょうがどこでCreateすればいいのかわかり
ません。

簡単な記述でしたがこれでわかるでしょうか?もしわかりましたらよろしくお願いしま
す。

おさる [E-Mail] 2002/10/18(金) 09:30:38
>例外処理 (初回) は TSTCON32.EXE (MFCO42D.DLL) にあります: 0xC0000005: Access 
Violation
追記します。

エラーはMSCフォルダの「occcont.cpp」の矢印の部分で出ています。

BOOL CWnd::InitControlContainer()
{
 TRY
 {
  if (m_pCtrlCont == NULL)
→    m_pCtrlCont = afxOccManager->CreateContainer(this);
 }
 END_TRY
 // Mark all ancestor windows as containing OLE controls.
 if (m_pCtrlCont != NULL)
 {
  CWnd* pWnd = this;
  while ((pWnd != NULL) && !(pWnd->m_nFlags & WF_OLECTLCONTAINER))
  {
   pWnd->m_nFlags |= WF_OLECTLCONTAINER;
   pWnd = pWnd->GetParent();
   if (! (GetWindowLong(pWnd->GetSafeHwnd(), GWL_STYLE) & WS_CHILD))
    break;
  }
 }
 return (m_pCtrlCont != NULL);
}

よろしくお願いします。

おさる [E-Mail] 2002/10/24(木) 10:48:09
[[解決]]
ATLでコントロールの再利用が可能であることがわかりました。

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