sw icon indicating copy to clipboard operation
sw copied to clipboard

ListView 怎么修改边框颜色值

Open Hunlongyu opened this issue 7 months ago • 2 comments

如题,怎么修改边框的颜色值呢?

Hunlongyu avatar May 21 '25 10:05 Hunlongyu

Win32 API 中并没有给 ListView 提供自定义边框颜色的接口,需要的话得自己绘制,可以通过重写 OnEndPaint 给窗口绘制追加自定义逻辑,以添加红色边框为例:

class MyListView : public ListView
{
protected:
    virtual void OnEndPaint() override
    {
        HWND hwnd = this->Handle;
        SIZE size = this->Rect->GetSize();

        HDC hdc = GetWindowDC(hwnd);
        RECT rect = { 0, 0, size.cx, size.cy };

        // 创建红色画笔
        HPEN hPen = CreatePen(PS_SOLID, 1, RGB(255, 0, 0));  // 1像素红色边框
        HGDIOBJ hOldPen = SelectObject(hdc, hPen);
        HGDIOBJ hOldBrush = SelectObject(hdc, GetStockObject(NULL_BRUSH));  // 无填充

        // 绘制矩形边框
        Rectangle(hdc, rect.left, rect.top, rect.right, rect.bottom);

        // 清理资源
        SelectObject(hdc, hOldPen);
        SelectObject(hdc, hOldBrush);
        DeleteObject(hPen);
        ReleaseDC(hwnd, hdc);
    }
};

Mzying2001 avatar May 21 '25 12:05 Mzying2001

哦哦~ 这个和 AI 给的方案是一样的,我其实以为有更简单的方式, 我看到有 setStyle, 和 SetExtendedStyle,我还以为这些可以快捷设置样式呢。

Hunlongyu avatar May 22 '25 06:05 Hunlongyu