终于去掉了combobox的3D边框

firefly3233 CSDN会员 firefly3233 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
曾经为去掉combobox的3D边框大伤脑筋,因为要把combobox放到列表里,有3D边框看着很别扭。闲话不多说了,我是这样做的:
1、新建一个从CComboBox派生的类,如CMyComboBox,重载OnPaint消息响应函数,先什么都不做。
2、在父窗口上建立成员变量,CMyComboBox m_MyCombo,绑定到一个combobox控件上,运行时你会发现combobox变样了,没有了边框,只剩下个白色的矩形。
3、在StdAfx.h里定义:#defined WINVER 0x0500
4、在CMyComboBox类的OnPaint()消息响应函数里:

void CMyComboBox::OnPaint()
{
CPaintDC dc(this);

COMBOBOXINFO cbi = {sizeof(COMBOBOXINFO), 0};
::GetComboBoxInfo(m_hWnd, &cbi);//得到combobox信息
DWORD uState = cbi.stateButton == STATE_SYSTEM_PRESSED ? DFCS_FLAT : 0;
::DrawFrameControl(dc.m_hDC, &cbi.rcButton, DFC_SCROLL, DFCS_SCROLLDOWN | uState);//根据下箭按纽状态画下箭按纽
::FillRect(dc.m_hDC, &cbi.rcItem, ::GetSysColorBrush(COLOR_WINDOW));//填充白色
CFont* font = GetParent()->GetFont();
::SelectObject(dc.m_hDC, font->m_hObject);//选用父窗口的字体
CString str;
GetLBText(GetCurSel(), str);//得到当前选择项文本
::DrawText(dc.m_hDC, str, strlen(str), &rcItem, DT_VCENTER | DT_SINGLELINE | DT_WORD_ELLIPSIS);//画文本
}


运行时,你会发现这是一个没有3D边框的combobox。
...全文
评论 7
收藏 已收藏
分享
返回顶部
firefly3233 CSDN会员
VC/MFC 16,550 成员 421,606 内容