You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改自绘下拉列表ComboBox的行(项)高度?

修改自绘ComboBox下拉项行高度的解决方案

核心结论

完全可以修改自绘ComboBox的下拉项行高度,通过系统消息或自绘消息处理即可实现,无需替换为ListView控件。

具体实现方法

方法1:发送CB_SETITEMHEIGHT消息

在ComboBox初始化完成后,直接发送该消息指定下拉项的统一高度。参数中WPARAM设为-1表示设置所有下拉项的高度,LPARAM传入你需要的像素高度(比如文本高度+位图高度+预留边距,示例中设为84像素):

// hwndComboBox 是你的ComboBox控件句柄
SendMessage(hwndComboBox, CB_SETITEMHEIGHT, (WPARAM)-1, (LPARAM)84);

如果需要同时调整ComboBox编辑区域的高度,将WPARAM设为0即可单独设置编辑框高度。

方法2:处理WM_MEASUREITEM消息(自绘控件标准流程)

当ComboBox设置了CBS_OWNERDRAWFIXED(固定行高)或CBS_OWNERDRAWVARIABLE(可变行高)样式时,系统会发送WM_MEASUREITEM消息请求行高参数。在窗口过程中处理该消息:

case WM_MEASUREITEM:
{
    MEASUREITEMSTRUCT* pMeasureInfo = (MEASUREITEMSTRUCT*)lParam;
    // 确认是ComboBox控件的测量请求
    if (pMeasureInfo->CtlType == ODT_COMBOBOX)
    {
        // 设置行高为文本+位图+边距的总高度,示例为84像素
        pMeasureInfo->itemHeight = 84;
        return TRUE; // 告知系统已处理该消息
    }
    break;
}

注意:ComboBox创建时必须包含CBS_OWNERDRAWFIXED和CBS_HASSTRINGS样式(后者用于保留文本存储功能)。

自绘时的位置适配

在处理WM_DRAWITEM消息绘制文本和位图时,需根据设置的行高调整绘制坐标,确保内容完整显示:

case WM_DRAWITEM:
{
    DRAWITEMSTRUCT* pDrawInfo = (DRAWITEMSTRUCT*)lParam;
    if (pDrawInfo->CtlType == ODT_COMBOBOX)
    {
        // 绘制背景
        FillRect(pDrawInfo->hDC, &pDrawInfo->rcItem, (HBRUSH)(COLOR_WINDOW + 1));
        
        // 绘制文本(顶部预留2像素边距)
        RECT textRect = pDrawInfo->rcItem;
        textRect.top += 2;
        textRect.bottom = textRect.top + 16; // 假设文本高度为16像素
        DrawText(pDrawInfo->hDC, itemText, -1, &textRect, DT_LEFT | DT_VCENTER);
        
        // 绘制位图(文本下方预留2像素边距,位图尺寸256x64)
        RECT bmpRect = pDrawInfo->rcItem;
        bmpRect.top = textRect.bottom + 2;
        bmpRect.left += 2;
        bmpRect.right = bmpRect.left + 256;
        bmpRect.bottom = bmpRect.top + 64;
        // 此处替换为你的位图绘制逻辑(如BitBlt或StretchBlt)
        BitBlt(pDrawInfo->hDC, bmpRect.left, bmpRect.top, 256, 64, hBitmapDC, 0, 0, SRCCOPY);
        
        // 绘制选中状态的焦点框
        if (pDrawInfo->itemState & ODS_SELECTED)
        {
            DrawFocusRect(pDrawInfo->hDC, &pDrawInfo->rcItem);
        }
        return TRUE;
    }
    break;
}

内容的提问来源于stack exchange,提问作者David La

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 23:05:20