ダイアログ全画面表示

コマンドバーが消えない

Usa*Usa日記 http://d.hatena.ne.jp/machi_pon/20060619/1150717551 にて MFC の CDialog での全画面表示の方法がでていたので、W-ZERO3でやってみた。
リンク先の記事をほとんど丸写しで FullScreen( BOOL fmode )を作り、
OnInitDialog()やOnActivate()やOnSettingChange()で呼びだす。
WindowsMobile5.0では m_pWndEmptyCB がサポートされなくなったので、ソースからそこだけ削除。

void CeIdemo4Dlg::FullScreen( BOOL fmode )
{
	if( fmode ) {
		CRect rcMenu;
		::GetClientRect( ::FindWindow( _T("HHTaskBar"), NULL ), &rcMenu );

		CRect rc;
		SHINITDLGINFO shidi;
		::ZeroMemory( &shidi, sizeof(SHINITDLGINFO) );
		shidi.dwFlags = SHIDIF_SIPDOWN;
		shidi.dwMask = SHIDIM_FLAGS;
		shidi.hDlg = m_hWnd;

		ShowWindow( SW_SHOW );
		UpdateWindow();

		// CB: WM5.0から m_pWndEmptyCB がなくなったので以下の行を削除
		//::CommandBar_Show( m_pWndEmptyCB->m_hWnd, FALSE );

		shidi.dwFlags |= SHIDIF_FULLSCREENNOMENUBAR;
		::SHInitDialog( &shidi );

		GetWindowRect( &rc );
		rc.top -= rcMenu.Height();
		MoveWindow( rc.left, rc.top, rc.right, rc.bottom, TRUE );

		::SetForegroundWindow( m_hWnd );
		DWORD dwState = SHFS_HIDETASKBAR | SHFS_HIDESIPBUTTON | SHFS_HIDESTARTICON;
		::SHFullScreen( m_hWnd, dwState );
	}else{
		DWORD dwState = SHFS_SHOWTASKBAR | SHFS_SHOWSIPBUTTON | SHFS_SHOWSTARTICON;
		::SHFullScreen( m_hWnd, dwState );
	}
}

void CeIdemo4Dlg::OnActivate(UINT nState, CWnd* pWndOther, BOOL bMinimized)
{
	CDialog::OnActivate(nState, pWndOther, bMinimized);
	if( nState == WA_INACTIVE ){
		// ファイルダイアログなどを表示すると、
		// フルスクリーンのままではタイトルバーの位置が再描画されないので
		// 元に戻しておく
		FullScreen( FALSE );
	}else{
		FullScreen( TRUE );
	}
}

void CeIdemo4Dlg::OnSettingChange(UINT uFlags, LPCTSTR lpszSection)
{
	CDialog::OnSettingChange(uFlags, lpszSection);

	FullScreen( TRUE );
}

結果、タイトルバーは消えたが、下のコマンドバーは残ったまま。
CCommandBar をCreateして Show(FALSE)しても、どうやっても消えない。残念。
最初SIPボタンも残っているので、エディットボックスでSIPを呼び出すと、
画面がちょこちょこ点滅し、結局仮想キーボードは消えてしまう。

タイトルバーが消えただけでも、よしとするか。