vs2010按钮自绘同时响应点击处理


注意:!!!!不能忘记右键属性,选择自绘

1.创建自定义按钮类,右键选择类向导,对话框中选择添加类。


弹出对话框,写上类名,基类,可以选择自动化


2.然后再选择类向导,在类名一项选择刚刚创建的类,为该类添加虚函数DrawItem。

void CDrawBotton::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct) 
{
if(<span style="font-family: Arial, Helvetica, sans-serif;">lpDrawItemStruct->itemState</span> & ODS_SELECTED)	//判断是否选择控件(等同于是否按下)
{
//执行代码
}
}


                 

3.创建按钮。为按钮添加类成员变量,全部都可以为手写!!!不用选择!!!。


4.双击按钮,即可添加单击响应函数,也不影响按钮被选中时的按钮状态。


5.自绘代码:

CDC *pdc = GetDC();
	CDC dcMain;
	dcMain.CreateCompatibleDC(pdc);
	CBitmap *pOldBmp, bmpMain;
	BITMAP bm;
	RECT *pRt = &lpDrawItemStruct->rcItem;
	
	if(lpDrawItemStruct->itemState & ODS_SELECTED)
		bmpMain.LoadBitmap(m_BitmapDown);
	else
		bmpMain.LoadBitmap(m_BitmapUp);
	bmpMain.GetBitmap(&bm);
	pOldBmp = dcMain.SelectObject(&bmpMain);
	pdc->StretchBlt(pRt->left,pRt->top,pRt->right - pRt->left,pRt->bottom - pRt->top ,&dcMain, 0, 0, bm.bmWidth, bm.bmHeight, SRCCOPY);
	dcMain.SelectObject(pOldBmp);
	bmpMain.DeleteObject();
	DeleteDC(dcMain);
	ReleaseDC(pdc);

	CString strText;
	GetWindowText(strText);
	// Draw the button text using the text color red.
	COLORREF crOldColor;
	if (lpDrawItemStruct->itemState & ODS_SELECTED)
		crOldColor = ::SetTextColor(lpDrawItemStruct->hDC, 0x875F00);
	else
		crOldColor = ::SetTextColor(lpDrawItemStruct->hDC, 0x000000);
	::SetBkMode(lpDrawItemStruct->hDC, TRANSPARENT);
	::DrawText(lpDrawItemStruct->hDC, strText, strText.GetLength(),&lpDrawItemStruct->rcItem, DT_SINGLELINE|DT_VCENTER|DT_CENTER);
	::SetTextColor(lpDrawItemStruct->hDC, crOldColor);
	



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值