C++ 如何设置按钮控制';在Win32 API中的位置正好位于窗口的中间位置
我目前是Win32 API的noob,正在学习它。我想知道如何将按钮控件的位置设置在主窗口的中间。 我只是在C++ 如何设置按钮控制';在Win32 API中的位置正好位于窗口的中间位置,c++,winapi,C++,Winapi,我目前是Win32 API的noob,正在学习它。我想知道如何将按钮控件的位置设置在主窗口的中间。 我只是在WndProc函数的WM_CREATE消息中创建了一个简单的按钮,如下所示:- HWND hBtn; hBtn = CreateWindow ( L"Button", L"Hello", WS_VISIBLE | WS_CHILD, 0, 0, 125, 50, hWnd, NULL, NULL, NULL );
WndProc
函数的WM_CREATE
消息中创建了一个简单的按钮,如下所示:-
HWND hBtn;
hBtn = CreateWindow
(
L"Button", L"Hello",
WS_VISIBLE | WS_CHILD,
0, 0, 125, 50,
hWnd, NULL, NULL, NULL
);
请注意,hBtn
是全局定义的
我只是对按钮控件进行子类化,以便在鼠标悬停时获得手光标。这很简单
SetWindowSubclass (hBtn, ButtonSubclass, NULL, NULL);
最后,当窗口被调整大小时,只希望按钮正好在屏幕的中间。
< P>你需要设置按钮的左和顶部位置,因为父窗口的大小除以两个除以按钮的大小除以2。然后每次调整窗口大小时重新绘制并重新计算。您需要将按钮的左侧和顶部位置设置为父窗口大小除以2减去按钮大小除以2。然后在每次调整窗口大小时重新绘制并重新计算。您只需重新计算父窗口中按钮的位置即可将其居中:case WM_CREATE:
hBtn = CreateWindow
(
L"Button", L"Hello",
WS_VISIBLE | WS_CHILD,
0, 0, 125, 50,
hWnd, NULL, NULL, NULL
);
break;
case WM_SIZE:
{
UINT width = LOWORD(lParam);
UINT height = HIWORD(lParam);
RECT rc = {};
GetClientRect(hBtn,&rc);
int x = (int)(width - (rc.right - rc.left)) / 2;
int y = (int)(height - (rc.bottom - rc.top)) / 2;
MoveWindow(hBtn, x, y, rc.right - rc.left, rc.bottom - rc.top, 1);
}
break;
只需重新计算父窗口中按钮的位置即可将其居中:
case WM_CREATE:
hBtn = CreateWindow
(
L"Button", L"Hello",
WS_VISIBLE | WS_CHILD,
0, 0, 125, 50,
hWnd, NULL, NULL, NULL
);
break;
case WM_SIZE:
{
UINT width = LOWORD(lParam);
UINT height = HIWORD(lParam);
RECT rc = {};
GetClientRect(hBtn,&rc);
int x = (int)(width - (rc.right - rc.left)) / 2;
int y = (int)(height - (rc.bottom - rc.top)) / 2;
MoveWindow(hBtn, x, y, rc.right - rc.left, rc.bottom - rc.top, 1);
}
break;
嗨,@Hitarth Padaliya,这能回答你的问题吗?如果你有任何问题,请随时与我联系,如果这真的对你有帮助,也请随时回答这个问题。是的,它确实对我有用。但我使用了一种简单的方法,使用了
LOWORD()
和HIWORD()
。它几乎减少了从窗口大小减少空间的逻辑,并根据需要为客户机提供rect。谢谢你的回答。这对我帮助很大。嗨,@Hitarth Padaliya,这回答了你的问题吗?如果你有任何问题,请随时与我联系,如果这真的对你有帮助,也请随时回答这个问题。是的,它确实对我有用。但我使用了一种简单的方法,使用了LOWORD()
和HIWORD()
。它几乎减少了从窗口大小减少空间的逻辑,并根据需要为客户机提供rect。谢谢你的回答。这对我帮助很大。