【问题标题】:C++ WINAPI - Draw ListView without bordersC++ WINAPI - 绘制无边框的 ListView
【发布时间】:2014-03-10 20:24:09
【问题描述】:

我有点麻烦。

对于父窗口,我使用了 920x570 的尺寸。 对于 ListView 900x500。

在这个维度上看,会说有很多边界,但实际上并非如此。如果我使用完全相同的尺寸,我会截断很大一部分 ListView。 好吧,我可以尝试找到能给我“无边界”ListView 的确切值,但即使我这样做,Windows XP 中的情况也略有不同(我们谈论的是 5-10 像素)。

是否有正确的方法可以在所有平台上本地绘制 ListView“无边界”?

他们说图片值千言万语......所以就这样

Picture

【问题讨论】:

  • 没试过,但也许从用于子创建的样式和扩展样式掩码中删除边框渲染位(例如 WS_BORDER)?只是一个想法。自从我做了 win32 comnctrl 的东西以来已经有一段时间了。可能还有一些额外的东西,例如 WS_EX_CLIENTEDGE、WS_EX_STATICEDGE 和 WS_EX_WINDOWEDGE 等……我错过了。
  • 尝试修改您在父窗口和子窗口中提到的所有样式。他们都没有工作。
  • 使用 AdjustWindowRectEx() 获得您需要的窗口大小。

标签: c++ winapi


【解决方案1】:

您必须区分窗口大小和客户端大小。如果您的父窗口是 920x570,那么这些是它的外部尺寸。客户区较小,这就是您需要设置列表视图的尺寸以使其很好地适应整个区域。

看看GetClientRect 函数。您需要将 ListView 的尺寸设置为使用此功能获得的尺寸。

编辑

您的代码如下所示

HWND outerWnd = CreateWindowEx(...);
RECT clientRect;
GetClientRect(outerWnd, &clientRect);
HWND listView = CreateWindowEx(..., WC_LISTVIEW, "", WS_CHILD|..., 0, 0, clientRect.right, clientRect.bottom, outerWnd, NULL, hInstance, NULL);

对于GetClientRect,RECT 结构的右成员和下成员分别是窗口的宽度和高度。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多