mfc 如何使窗口居中

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mfc 如何使窗口居中相关的知识,希望对你有一定的参考价值。

参考技术A

这是一个完整的窗口居中,即适合单独的窗口,也适合子窗口居中父窗口。

BOOL CenterWindow(HWND hWndCenter = NULL) throw()

ATLASSERT(::IsWindow(m_hWnd));

// determine owner window to center against
DWORD dwStyle = GetStyle();
if(hWndCenter == NULL)

if(dwStyle & WS_CHILD)
hWndCenter = ::GetParent(m_hWnd);
else
hWndCenter = ::GetWindow(m_hWnd, GW_OWNER);


// get coordinates of the window relative to its parent
RECT rcDlg;
::GetWindowRect(m_hWnd, &rcDlg);
RECT rcArea;
RECT rcCenter;
HWND hWndParent;
if(!(dwStyle & WS_CHILD))

// don't center against invisible or minimized windows
if(hWndCenter != NULL)

DWORD dwStyleCenter = ::GetWindowLong(hWndCenter, GWL_STYLE);
if(!(dwStyleCenter & WS_VISIBLE) || (dwStyleCenter & WS_MINIMIZE))
hWndCenter = NULL;


// center within screen coordinates
::SystemParametersInfo(SPI_GETWORKAREA, NULL, &rcArea, NULL);
if(hWndCenter == NULL)
rcCenter = rcArea;
else
::GetWindowRect(hWndCenter, &rcCenter);

else

// center within parent client coordinates
hWndParent = ::GetParent(m_hWnd);
ATLASSERT(::IsWindow(hWndParent));

::GetClientRect(hWndParent, &rcArea);
ATLASSERT(::IsWindow(hWndCenter));
::GetClientRect(hWndCenter, &rcCenter);
::MapWindowPoints(hWndCenter, hWndParent, (POINT*)&rcCenter, 2);


int DlgWidth = rcDlg.right - rcDlg.left;
int DlgHeight = rcDlg.bottom - rcDlg.top;

// find dialog's upper left based on rcCenter
int xLeft = (rcCenter.left + rcCenter.right) / 2 - DlgWidth / 2;
int yTop = (rcCenter.top + rcCenter.bottom) / 2 - DlgHeight / 2;

// if the dialog is outside the screen, move it inside
if(xLeft < rcArea.left)
xLeft = rcArea.left;
else if(xLeft + DlgWidth > rcArea.right)
xLeft = rcArea.right - DlgWidth;

if(yTop < rcArea.top)
yTop = rcArea.top;
else if(yTop + DlgHeight > rcArea.bottom)
yTop = rcArea.bottom - DlgHeight;

// map screen coordinates to child coordinates
return ::SetWindowPos(m_hWnd, NULL, xLeft, yTop, -1, -1,
SWP_NOSIZE | SWP_NOZORDER | SWP_NOACTIVATE);

本回答被提问者和网友采纳

Qt如何设置窗口屏幕居中显示以及设置大小

参考技术A 首先我们在界面中添加一个QLabel控件。
QT界面怎么使控件随窗口大小变化一直居中显示
在控件上边下边分别添加一个竖直的弹簧,选中这三个控件,然后点击竖直布局,如下图所示。布局结果如右图。
QT界面怎么使控件随窗口大小变化一直居中显示
QT界面怎么使控件随窗口大小变化一直居中显示
3
然后在上次布局的两侧添加水平的弹簧,选中两个弹簧和上次的布局,点击水平布局。布局效果如图
QT界面怎么使控件随窗口大小变化一直居中显示

以上是关于mfc 如何使窗口居中的主要内容,如果未能解决你的问题,请参考以下文章

Tkinter:如何使窗口标题居中

如何使用 PyGObject 使窗口居中

使用 win32gui 使窗口居中

Qt如何设置窗口屏幕居中显示以及设置大小

如何使窗口适合其内容并将其居中放置在 Sciter 的屏幕上?

如何在 C# 中将窗口居中显示在屏幕上?