1. 程式人生 > >VC++對話方塊(CDialog)的全屏顯示及控制元件居中顯示

VC++對話方塊(CDialog)的全屏顯示及控制元件居中顯示

在編寫一些軟體時,我們會比較偏向於比較簡潔、清新的使用者介面,同時為了避免其它程式或者桌面等影響使用者的注意力等,我們通常習慣將軟體介面全屏,佈滿整個顯示螢幕,與此同時,我們也將對介面中的控制元件位置進行相應的調整,讓它們按螢幕的大小和其在對話方塊中的相對位置,居中顯示。

在對話方塊的初始化函式OnInitDialog()中分三步作如下的操作:

(1)獲取螢幕的解析度

int nFullWidth=GetSystemMetrics(SM_CXSCREEN);
int nFullHeight=GetSystemMetrics(SM_CYSCREEN);

(2)控制元件居中顯示

CRect c1,c2; 
GetClientRect(c1); //獲取視窗客戶區的座標
for (int i=IDC_BUTTON1;i<=IDC_BUTTON5;i++)
{
    GetDlgItem(i)->GetWindowRect(c2); //獲取視窗的邊框矩形的尺寸
    ScreenToClient(c2); //把螢幕上指定點的螢幕座標轉換成使用者座標
    GetDlgItem(i)->SetWindowPos(NULL,(nFullWidth-c1.right)/2+c2.left, (nFullHeight-c1.bottom)/2+c2.top,0,0,SWP_NOZORDER|SWP_NOSIZE);
}

(3)對話方塊全屏顯示(去掉了標題欄)

CRect m_FullScreenRect;
CRect WindowRect;
GetWindowRect(&WindowRect);
CRect ClientRect;
RepositionBars(0, 0xFFFF, AFX_IDW_PANE_FIRST, CWnd::reposQuery, &ClientRect);
ClientToScreen(&ClientRect);
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;
WINDOWPLACEMENT wndpl;
wndpl.length=sizeof(WINDOWPLACEMENT);
wndpl.flags=0;
wndpl.showCmd=SW_SHOWNORMAL;
wndpl.rcNormalPosition=m_FullScreenRect;
SetWindowPlacement(&wndpl);