ホーム » 2014 » 8月 » 01

日別アーカイブ: 2014/08/01

2014年8月
 12
3456789
10111213141516
17181920212223
24252627282930
31  

カテゴリー

アーカイブ

ブログ統計情報

  • 99,495 アクセス


モードレスダイアログの動作が,…

VC 7 以降,MDI AP のモードレスダイアログが独立して動作してしまう現象があった.
その AP は,VC 4 の頃作成したもので CMainFrame::OnCreate 内でモードレスダイアログを作成している.
VC 6 までは特に問題なかったが,VC 7 以降タスクバーにアイコンが 2 つ存在する状態になってしまっていた.
過去に何度か対応方法を調べたが,わからずそのままとなっていた.


今日別の事を調べていて,「モードレスダイアログで親子にならなくする」方法が目に留まった.
CDialog::Create で,デフォルトの NULL ではなく,GetDesktopWindow() を与えるというもの.
VC 7 AP のダイアログの情報を,Spy++ で見ると,親ウィンドウが (なし) になっている.
今度はデバッガで,Create の付近を追いかけると AfxGetMainWnd() で NULL がかえっている.
ThrdCore.cpp より
CWnd* CWinThread::GetMainWnd()
{
  if (m_pActiveWnd != NULL)
    return m_pActiveWnd;
  if (m_pMainWnd != NULL)
    return m_pMainWnd;
  return CWnd::GetActiveWindow();
}


CXxxApp::InitInstance で以下の部分を修正.
  CMainFrame* pMainFrame = new CMainFrame;
  m_pMainWnd = pMainFrame;   // ここを追加
  if (!pMainFrame->LoadFrame(IDR_MAINFRAME))
    return FALSE;
  m_pMainWnd = pMainFrame;

Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.