VC++對話方塊(CDialog)的全屏顯示及控制元件居中顯示
阿新 • • 發佈:2019-01-31
在編寫一些軟體時,我們會比較偏向於比較簡潔、清新的使用者介面,同時為了避免其它程式或者桌面等影響使用者的注意力等,我們通常習慣將軟體介面全屏,佈滿整個顯示螢幕,與此同時,我們也將對介面中的控制元件位置進行相應的調整,讓它們按螢幕的大小和其在對話方塊中的相對位置,居中顯示。
在對話方塊的初始化函式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);