閱讀881 返回首頁    go 阿裏雲 go 技術社區[雲棲]


VC對話框全屏顯示及相應控件位置改變

一、簡單對話框全屏顯示方法
在OnInitDialog()中任意加入:
1、ModifyStyle(WS_CAPTION,0,0); //如果不想去掉標題欄,去掉該句。
   SendMessage(WM_SYSCOMMAND,SC_MAXIMIZE,0); 
2、ShowWindow(SW_SHOWMAXIMIZED);  

二、複雜一點的對話框全屏顯示方法,隨屏幕的分辯率而調節
void CMainFrame::OnFullScreen()     
{
    GetWindowPlacement(&m_OldWndPlacement);     
    CRect WindowRect;     
    GetWindowRect(&WindowRect);     
    CRect ClientRect;     
    RepositionBars(0, 0xffff, AFX_IDW_PANE_FIRST, reposQuery, &ClientRect);     
    ClientToScreen(&ClientRect); 

    //獲取屏幕的分辨率   
    int nFullWidth=GetSystemMetrics(SM_CXSCREEN);     
    int nFullHeight=GetSystemMetrics(SM_CYSCREEN);

    //將除控製條外的客戶區全屏顯示到從(0,0)到(nFullWidth, nFullHeight)區域, 
    //將(0,0)和(nFullWidth, nFullHeight)兩個點外擴充原窗口和除控製條之外的
    //客戶區位置間的差值, 就得到全屏顯示的窗口位置    
    m_FullScreenRect.left=WindowRect.left-ClientRect.left;     
    m_FullScreenRect.top=WindowRect.top-ClientRect.top;     
    m_FullScreenRect.right=WindowRect.right-ClientRect.right+nFullWidth;     
    m_FullScreenRect.bottom=WindowRect.bottom-ClientRect.bottom+nFullHeight;     
    m_bFullScreen=TRUE;   //設置全屏顯示標誌為TRUE

    //進入全屏顯示狀態   
    WINDOWPLACEMENT wndpl;     
    wndpl.length=sizeof(WINDOWPLACEMENT);     
    wndpl.flags=0;     
    wndpl.showCmd=SW_SHOWNORMAL;     
    wndpl.rcNormalPosition=m_FullScreenRect;     
    SetWindowPlacement(&wndpl);
}
三、對話框全屏及按鈕控件移到相應位置
void CXXXDlg::OnLButtonDown(UINT nFlags, CPoint point)     
{                     
    int cx=::GetSystemMetrics(SM_CXSCREEN);   
    int cy=::GetSystemMetrics(SM_CYSCREEN);   

    CRect rtClient,rtBtn;   
    CWnd *pWnd=GetDlgItem(IDC_BUTTON);   

    GetClientRect(&rtClient);             //獲得對話框客戶區屏幕坐標  
    ClientToScreen(&rtClient);            //映射為屏幕坐標  
    pWnd->GetWindowRect(&rtBtn);          //獲得button屏幕坐標  

    int lx=rtBtn.Width();                 //button長度  
    int ly=rtBtn.Height();                //button高度  
    int dx=rtClient.right-rtBtn.right;    //離右邊框的距離  
    int dy=rtClient.bottom-rtBtn.bottom;  //離底邊框的距離  

    MoveWindow(CRect(0,0,cx,cy));                            //移動窗口  
    pWnd->MoveWindow(CRect(cx-dx-lx,cy-ly-dy,cx-dx,cy-dy)); //移動button   

    CDialog::OnLButtonDown(nFlags, point);   
}

四、設計狀態下指定對話框以全屏顯示 
1、手工把它拽成比如1024×768, 然後Alt+V U 
2、在*.rc文件中修改,但是單位不一樣。

五、用MoveWindow或SetWindowPos全屏對話框 
首先計算出客戶區的大小GetClientRect(); 
再計算出整個窗口的大小GetWindowRect(); 
然後再得到當前屏幕的大小GetSystemMetrics(); 
最後根據這三個數據進行換算,當客戶區為屏幕大小時窗口的位置的大小; 
計算完成後調用MoveWindow就可以了。

最後更新:2017-04-03 12:54:47

  上一篇:go 遠程 不顯示本地硬盤解決辦法(高級版)
  下一篇:go C# 判斷字符串是否可以轉化為數字