您的位置:首页 > 其它

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

2016-01-05 17:38 190 查看
注意:!!!!不能忘记右键属性,选择自绘

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);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: