我需要以某种方式获得(固定)窗口边框大小的宽度(垂直方向).默认情况下,WinXP上的它非常薄,但是搭载Aero的Win7,它的厚度要大得多.
我认为GetSystemMetrics可以做到这一点,但似乎它为XP和Win7系统返回相同的值,我检查了以下参数:
SM_CXBORDER
SM_CXEDGE
SM_CYFIXEDFRAME
SM_CYBORDER
SM_CXFIXEDFRAME
Run Code Online (Sandbox Code Playgroud)
但正如我所写,无论垂直窗口边界实际有多厚,它们都会为两个操作系统返回相同的值.窗口是用标志创建的,WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX
如果有任何帮助(它不大).
谢谢你的任何想法.
克拉
好吧,花了一些时间后,这里是一个代码似乎返回真正的边框宽度(如果有人需要它):
NONCLIENTMETRICS ncm;
OSVERSIONINFO OS;
OS.dwOSVersionInfoSize = sizeof (OSVERSIONINFO);
GetVersionEx (&OS);
if (OS.dwMajorVersion < 6)
{
ncm.cbSize = sizeof (ncm) - sizeof(ncm.iPaddedBorderWidth);
SystemParametersInfo (SPI_GETNONCLIENTMETRICS, sizeof(NONCLIENTMETRICS), &ncm, 0);
BorderWidth = ncm.iBorderWidth;
}
else
{
ncm.cbSize = sizeof (ncm);
SystemParametersInfo (SPI_GETNONCLIENTMETRICS, sizeof(NONCLIENTMETRICS), &ncm, 0);
BorderWidth = ncm.iBorderWidth + ncm.iPaddedBorderWidth;
}
Run Code Online (Sandbox Code Playgroud)
我猜它还有一些小故障,但它对我来说是可以接受的:))我知道的故障是,它确实计算了一个相当大的窗口的边框宽度,如果你有一个弹出窗口,它的边框有不同的大小(但是例如在XP上似乎你不能设置弹出窗口边框大小,你只能为相当大的窗口做这个).
归档时间: |
|
查看次数: |
3735 次 |
最近记录: |