View.cppからMain.cppの子ダイアログ呼出し

解決


たく  2012-04-10 19:03:05  No: 73335  IP: 192.*.*.*

初歩的な質問ですいません
Windows XP VC++ 6.0 MFC
View.cppから、Main.cpp下の設定ダイアログPropsheetのPropPage1のListBoxの
CurSelを変更しようとしています。

void CView::OnSelchangeCombo4() 
{
  //コンボボックスの選択行Noを取得
  CComboBox* Combo4 = (CComboBox*)GetDlgItem(IDC_COMBO4);
  int nn = Combo4->GetCurSel();

  CMainFrame* pMain = (CMainFrame*)GetParentFrame();
  pMain->m_PropSheet.m_PropPage1.SetTurretCurSel( nn );
}
としたところ、m_PropSheetのハンドルが0で、Assretion Failedになってしまいます。
コード保管しているのに、どこがいけないんでしょうか?

編集 削除
仲澤@失業者  2012-04-10 19:20:21  No: 73336  IP: 192.*.*.*

最も可能性が高いのは、
「GetParentFrame()が真のメインフレームを戻していない」
だと考えられます。

CWinApp::GetMainWnd()を使ってメインフレームを取得して
みては、どうでしょう。

CMainFrame* pMain = (CMainFrame*)theApp.GetMainWnd();

とか。

編集 削除
たく  2012-04-10 21:38:54  No: 73337  IP: 192.*.*.*

仲澤@失業者 さま
ありがとうございます。

CApp* pApp = (CApp*)AfxGetApp();
CMainFrame* pMain = (CMainFrame*)pApp->GetMainWnd();
としてみましたが、同じ結果でした。
Debug Assertion Failed
File: wincore.cpp
Line: 3095
でした。

pMainには、ちゃんと値が入っていますが
pMain->m_PropSheet.m_PropPage1  のhWnd = 0x0000000  になっています。

編集 削除
たく  2012-04-10 22:36:52  No: 73338  IP: 192.*.*.*

m_PropPage1はハンドルではなかったようです
pMain->m_PropSheet.m_PropPage1.SetTurretCurSel( nn );  を

CPropsheetの関数を書いて
pMain->m_PropSheet.SetTurretCurSel( nn );  にしたらOKでした

お騒がせしました。

編集 削除