[Windows Mobile]全屏对话框

1. 完全全屏
在OnInitDialog() 方法中调用如下代码:

m_bFullScreen = FALSE;
CDialog::OnInitDialog();

 // Call SHInitDialog with flags for full screen.
 SHINITDLGINFO shidi;

 shidi.dwMask = SHIDIM_FLAGS;
 shidi.dwFlags = SHIDIF_FULLSCREENNOMENUBAR;
 shidi.hDlg = m_hWnd;
 ::SHInitDialog(&shidi);

 // TODO: Add extra initialization here.
 //::CommandBar_Show(m_pWndEmptyCB->m_hWnd, FALSE);

 // SHFullScreen fails if dialog box is not foreground.
 SetForegroundWindow(); 
 SHFullScreen(m_hWnd, SHFS_HIDETASKBAR | SHFS_HIDESIPBUTTON);

 // Resize the window over the taskbar area.
#define MENU_HEIGHT 26
 RECT rect;
 GetWindowRect(&rect);
 rect.top -= MENU_HEIGHT;
 MoveWindow(&rect, TRUE);

上面一段代码可以实现完全的全屏, 但是我使用的过程中发现对话框的标题栏消失了..不知道为什么..

2. 客户区全屏

 CHikConfigDlg configDlg;

 CRect rc;

 SetRect( &rc, 0, 0, GetSystemMetrics( SM_CXSCREEN ), GetSystemMetrics( SM_CYSCREEN ) );

// 用来隐藏菜单栏的

 //HWND hCommandBarWnd = ::FindWindowW( _T("menu_worker"), NULL );

 //::CommandBar_Show(hCommandBarWnd, FALSE);

 ::SHFullScreen( configDlg.m_hWnd, SHFS_HIDETASKBAR | SHFS_HIDESTARTICON | SHFS_HIDESIPBUTTON );

 ::MoveWindow( configDlg.m_hWnd, rc.left, rc.top, rc.right - rc.left, rc.bottom - rc.top, FALSE );

 INT_PTR nResponse = configDlg.DoModal();

 if ( nResponse == IDOK )
 {

 }

调用上面一段代码, 创建的CHikConfigDlg 对话框就是在客户区内全屏的.
3.
最近我做的是camera应用程序,在程序启动后,需要实现全屏化的效果,在网上和MSDN中找了一下,给出了以下的代码:
     DWORD dwState = ( SHFS_HIDETASKBAR | SHFS_HIDESTARTICON | SHFS_HIDESIPBUTTON );
     SHFullScreen( m_hWnd, dwState );
     CRect rc;
     SetRect( &rc, 0, 0, GetSystemMetrics( SM_CXSCREEN ),
         GetSystemMetrics( SM_CYSCREEN ) );
    SetWindowPos( &wndTopMost, 0, 0, rc.Width(), rc.Height(), SWP_SHOWWINDOW );
在测试时发现,这段代码并不能完全的实现全屏化效果,在屏幕底部的输入法栏总是无法消除。通过spy观察了一下,发现些栏是类型为menu_worker的窗口,因为在屏幕中,所有的元素都是一个窗口,于时想到通过隐藏该窗口的办法实现真正的全屏化,在退出程序时,重新显示此窗口。
CWnd* pWndSIP = FindWindow( _T("menu_worker"), 0 );
    if ( pWndSIP )
    {
        // pWndSIP->SetWindowPos(&wndBottom , 0, 0, 0, 0, SWP_NOMOVE + SWP_NOSIZE);
        pWndSIP->ShowWindow(SW_HIDE);
    }
需要注意的是,在windows mobile 5.0中,不止一个类型为menu_worker的窗口,所以需要使用EnumWindows方法,找到每一个窗口,然后隐藏。在退出程序时,重新恢复所有的窗口
文章出处:飞诺网( www.firnow.com):http://dev.firnow.com/course/3_program/jdkf/20071028/80792.html
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值