[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 ) {
} 위의 코드를 호출합니다. 생성된 CHikConfig Dlg 대화상자는 클라이언트 구역 내 전체 화면입니다.
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 인 것을 발견하였다.워크맨의 창은 화면에 있는 모든 요소가 하나의 창이기 때문에 이 창을 숨기는 방법으로 진정한 전체 화면화를 실현하고 프로그램을 종료할 때 이 창을 다시 표시합니다.
CWnd* pWndSIP = FindWindow( _T("menu_worker"), 0 );
    if ( pWndSIP )
    {
       //pWndSIP->SetWindowPos(&wndBottom , 0, 0, 0, 0, SWP_NOMOVE + SWP_NOSIZE);
        pWndSIP->ShowWindow(SW_HIDE);
    }
주의해야 할 것은 윈도우즈 모바일 5.0에서 하나의 유형이 menu 가 아니라는 것이다worker의 창입니다. 따라서 Enum Windows 방법을 사용하여 모든 창을 찾은 다음 숨겨야 합니다.프로그램을 종료할 때 모든 창을 다시 복원합니다
기사 출처: 피노망(www.firnow.com):http://dev.firnow.com/course/3_program/jdkf/20071028/80792.html

좋은 웹페이지 즐겨찾기