>はじめまして。いまMSHFlexgridを使用してオリジナルグリッドコントロールを作成
>しているのですが、肝心のMSHFlexGridのCreateが出来ません。
>よい方法がありましたら教えてください。
追記します。
開発環境は下記のとおりです。
Microsoft Visualstudio Enterprise 6.0(SP5)
Windows 2000
マズは前のスレッド同じ質問のようなので解決にしておいてください
または、管理者に削除要請してください
これまでにやった作業手順明記してください
どこの手順が間違っているか指摘しようがありません
woodさん返信ありがとうございます。
ActiveXプロジェクトは下記の手順で作成しています。
①まずActiveXControlWizardでサブクラスをnoneにしてスケルトンを生成します。
②つづいてコンポーネントの追加で階層フレキシブルグリッドをコントロールに追加しま
す。
③②の作業でmsflexgirdのファイルがプロジェクト内に生成されるので、これをつかって
クラスの追加で派生クラスを作ります。
④ActiveXのコントロールクラス(ctl.h/cpp)に派生クラスのクラスを生成し、
ActiveXのコントロールクラスのコンストラクタとデストラクタにそれぞれクラスの
newとdeleteを記述しておきます。
⑤クラスウィザードでコントロールクラスにOnCreate(LPCREATESTRUCT lpCreateStruct)
を生成し、ここで派生クラスのCreateを記述します。
記述は下記のとおりです。
pGrid->Create(_T(STATIC), IDM_MYGRID, WS_CHILD | WS_VISIBLE,
CRect(0, 0, 200, 100), this, 900001, NULL);
(_T(STATIC)は"でも結果は同じでした)
⑥コンパイルはとおるのですが、
例外処理 (初回) は TSTCON32.EXE (MFCO42D.DLL) にあります: 0xC0000005: Access
Violation
でabortします。
これと同様にexeプロジェクトのビュークラスに記述したらグリッドはCreateされます。
多分、Createのタイミングに誤りがあるのでしょうがどこでCreateすればいいのかわかり
ません。
簡単な記述でしたがこれでわかるでしょうか?もしわかりましたらよろしくお願いしま
す。
>例外処理 (初回) は 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);
}
よろしくお願いします。
ATLでコントロールの再利用が可能であることがわかりました。