combox的ITEM设置不了字体的BUG

Combo控件的itemfont属性, 可以设置点击Combo弹出列表中的item的字体. 但是发现点击后, 弹出的列表里, 字体不是我们设置的.

查看源代码, 可以发现Combo弹出的列表是个新窗口, 该窗口的CPaintManagerUI成员(m_pm)调用了这句m_pm.UseParentResource(m_pOwner->GetManager()); ,虽然这个新窗口没有自己的字体, 但它可以使用父窗口资源.

经过代码跟踪, 发现CPaintManagerUI::GetFont没有获取到正确的字体,

原来的代码是:

HFONT CPaintManagerUI::GetFont(int index)
{
    if( index < 0 || index >= m_aCustomFonts.GetSize() ) return GetDefaultFontInfo()->hFont;
    TFontInfo* pFontInfo = static_cast<TFontInfo*>(m_aCustomFonts[index]);
    return pFontInfo->hFont;
}

需要改成如下

HFONT CPaintManagerUI::GetFont(int index)
{
    if( index < 0 || index >= m_aCustomFonts.GetSize() )
	{
		if (m_pParentResourcePM) return m_pParentResourcePM->GetFont(index);
		return GetDefaultFontInfo()->hFont;
	}
    TFontInfo* pFontInfo = static_cast<TFontInfo*>(m_aCustomFonts[index]);
    return pFontInfo->hFont;
}

可以看到修改部分所做的工作是: 当找不到字体时, 使用父窗口资源字体.

改完后, 我们发现虽然字体对了, 不过ITEM的高度不对, 继续跟踪, 发现还需要修改TFontInfo* CPaintManagerUI::GetFontInfo(int index), 其实也是同样的BUG

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值