MFC-自绘控件(CComboBox篇)

MFC-自绘控件(CComboBox篇)

MFC(CComboBox)简单自绘

使用CComboBox实现自绘下拉框,内容包含文字和图形。

注意事项

对话框控件属性Behavior/Owner Draw 设为Variable

代码

// 自绘
void DrawItem(LPDRAWITEMSTRUCT lpDIS)
{
	CDC dc;
	dc.Attach(lpDIS->hDC);
	CRect rect(lpDIS->rcItem);
	int nItem = lpDIS->itemID;
	COLORREF cLine = GetSysColor(COLOR_WINDOWTEXT);
	COLORREF cBack = GetSysColor(COLOR_WINDOW);
	if (lpDIS->itemState & ODS_SELECTED)
	{
		cLine = GetSysColor(COLOR_HIGHLIGHTTEXT);
		cBack = GetSysColor(COLOR_HIGHLIGHT);
	}
	dc.FillSolidRect(rect, cBack);
	CPen pen(PS_SOLID, 1, cLine);
	CPen* pOldPen = dc.SelectObject(&pen);
	CPen pendot(PS_DOT, 1, cLine);
	CRect rectx;
	CRect recty;
	CFont font;	
	font.CreateFont(
		15, // nHeight
		0, // nWidth
		0, // nEscapement
		0, // nOrientation
		FW_BOLD, // nWeight
		FALSE, // bItalic
		FALSE, // bUnderline
		0, // cStrikeOut
		ANSI_CHARSET, // nCharSet
		OUT_DEFAULT_PRECIS, // nOutPrecision
		CLIP_DEFAULT_PRECIS, // nClipPrecision
		DEFAULT_QUALITY, // nQuality
		DEFAULT_PITCH | FF_SWISS,
		_T("Arial") // nPitchAndFamily Arial
		);
	CFont* def_font;
	if (nItem == 0)
	{
		dc.DrawText(_T("无"), rect, DT_VCENTER | DT_SINGLELINE);
		dc.MoveTo(rect.left + rect.Width() / 3, rect.top + rect.Height() / 5);
		dc.LineTo(rect.left + rect.Width() / 3 * 2, rect.top + rect.Height() / 5);
		dc.LineTo(rect.left + rect.Width() / 3 * 2, rect.top + rect.Height() / 5 * 4);
		dc.SetTextColor(RGB(255, 0, 0));
		def_font = dc.SelectObject(&font);
		dc.SetBkMode(TRANSPARENT);
		rectx.SetRect(rect.left + rect.Width() / 3, rect.top, rect.right - rect.Width() / 3, rect.top + rect.Height() * 2 / 5);
		dc.DrawText(_T("x"), rectx, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
		rectx.SetRect(rect.left, rect.top + rect.Height() / 5, rect.left + rect.Width() * 4 / 3, rect.top + rect.Height() / 5 * 4);
		dc.DrawText(_T("y"), rectx, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
		// Done with the font. Delete the font object.
		dc.SelectObject(def_font);
		font.DeleteObject();
		dc.SetTextColor(RGB(0, 0, 0));
	}
	if (nItem == 1)
	{
		dc.DrawText(TEXT("线切角"), rect, DT_VCENTER | DT_SINGLELINE);
		dc.MoveTo(rect.left + rect.Width() / 3, rect.top + rect.Height() / 5);
		dc.LineTo(rect.left + rect.Width() *0.4, rect.top + rect.Height() / 5);
		dc.LineTo(rect.left
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值