ダイアログ全画面表示
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を呼び出すと、
画面がちょこちょこ点滅し、結局仮想キーボードは消えてしまう。
タイトルバーが消えただけでも、よしとするか。