VC++对话框(CDialog)的全屏显示及控件居中显示
最后更新于:2022-04-01 20:35:12
在编写一些软件时,我们会比较偏向于比较简洁、清新的用户界面,同时为了避免其它程序或者桌面等影响使用者的注意力等,我们通常习惯将软件界面全屏,布满整个显示屏幕,与此同时,我们也将对界面中的控件位置进行相应的调整,让它们按屏幕的大小和其在对话框中的相对位置,居中显示。
下面结合实例说明(完整实例可在我的CSDN资源中下载:[http://download.csdn.net/detail/margin1988/8337049](http://download.csdn.net/detail/margin1988/8337049)):
在对话框的初始化函数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);
~~~
';