【问题标题】:Set Header Item Height winapi c++设置标题项高度winapi c ++
【发布时间】:2022-01-28 22:58:33
【问题描述】:

我正在尝试制作一张漂亮的桌子,并且正在使用 LVS_OWNERDRAWFIXED 样式来绘制我自己的桌子设计。所以,我想改变表格的标题项高度,但不能这样做。我正在使用下面的代码来更改项目高度,但它只是更改项目宽度。我在这里做错了什么,有人知道吗?

        HDITEM hi = { 0 };
        hi.mask = HDI_FORMAT | HDI_HEIGHT;
        Header_GetItem(hHeader, i, &hi);
        hi.fmt = HDF_OWNERDRAW;
        hi.cxy = 70; // this always sets width instead of height
        Header_SetItem(hHeader, i, &hi);

网上没有太多关于header调整大小的信息,也许有人知道这是什么问题?

【问题讨论】:

  • HDI_HEIGHTHDI_WIDTH 是相同的值(您可以通过查看commctrl.h 中的声明来验证这一点),这意味着您只能使用Header_SetItem() 设置标题项的宽度。 ListView 的标题与 ListView 的项目具有相同的高度,除非您将标题设置为使用不同的字体

标签: c++ winapi


【解决方案1】:

我自己解决了这个问题。我得到了列表视图标题 HWND 并在上面设置了 SetWindowSubclass(),然后在子类方法中我捕获了 HDM_LAYOUT 事件并将下面的代码放在那里:

    case HDM_LAYOUT: {
        LPHDLAYOUT pHL = reinterpret_cast<LPHDLAYOUT>(lParam);
        RECT* pRect = pHL->prc;
        WINDOWPOS* pWPos = pHL->pwpos;
        int r = DefSubclassProc(hWnd, uMsg, wParam, lParam);
        pWPos->cy = 50; // Header height
        pRect->top = 50; // Header offset top
        return r;
    }

这一切都很完美,无论如何感谢您的回答。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-09
    • 2017-11-23
    • 2015-10-18
    • 2019-11-09
    • 2012-06-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多