MFC自绘按键并识别点击

    本程序是通过画刷在界面上画出按钮框,然后捕获左击事件,根据其坐标来判断点击的是哪一个按钮。

void CWinceSendDlg::DrawCZButton(int number,int color,CString name)

{
CRect rct;
CBrush m_FillActive;
CBrush* pOldBrush;

CDC *pDC=GetDC();
int num_row=(number-1)/column+1;
int num_column=(number-1)%column+1;
rct.left=start_x+(num_column-1)*(btn_width+space_x);
rct.top=start_y+(num_row-1)*(btn_height+space_y);

rct.right=btn_width+start_x+(num_column-1)*(btn_width+space_x); 

rct.bottom=btn_height+start_y+(num_row-1)*(btn_height+space_y);

   
//画边框
CPen m_BoundryPen;
CPen* hOldPen;
m_BoundryPen.CreatePen(PS_SOLID, 1, RGB(0, 0, 255));    
    POINT pt ;
pt.x = 5;
pt.y = 5;
hOldPen = pDC->SelectObject(&m_BoundryPen);
pDC->RoundRect(&rct, pt);
pDC->SelectObject(hOldPen);
    rct.DeflateRect(CSize(GetSystemMetrics(SM_CXEDGE), GetSystemMetrics(SM_CYEDGE)));
    m_BoundryPen.DeleteObject();

填充矩形
pOldBrush = pDC->SelectObject(&m_FillActive);

if(color==1)//还原
{
        CBrush br;
//CRect rect;
//int nWidth = rct.Width();
//int nHeight = rct.Height();
br.CreateSolidBrush(RGB(95, 115, 150));
//rect.SetRect(rct.left, rct.top, nWidth + 2, nHeight + 1);
pDC->FillRect(&rct, &br);
br.DeleteObject();
}
else 
{
CBrush brBk[128];
int nWidth = rct.right-rct.left;
int nHeight = rct.bottom-rct.top;
int i;
CRect rect;
if(color==2)
{
for (i = 0; i < 128; i ++)
{
brBk[i].CreateSolidBrush(RGB(95 - (i / 2), 115 - (i / 3), 150 - (i / 4)));    
}
}
else
{
for (i = 0; i < 128; i ++)
{
brBk[i].CreateSolidBrush(RGB(254 - (i / 3), 85 - (i / 3), 105 - (i / 4)));
}
}
for (i = rct.top; i < rct.bottom; i ++) 
{
rect.SetRect(rct.left, i, rct.right, i+1);
pDC->FillRect(&rect, &brBk[(i-rct.top)*127/nHeight]);
}

for ( i = 0; i < 128; i ++)
brBk[i].DeleteObject();

}
pDC->SelectObject(pOldBrush);
m_FillActive.DeleteObject();
显示按钮的文本

CFont* hFont = GetFont();
CFont* hOldFont = pDC->SelectObject(hFont);
rct.OffsetRect((rct.Width() - rct.Width())/2, rct.Height() - rct.Height()/2);
int nMode = pDC->SetBkMode(TRANSPARENT);
rct.OffsetRect(1, -5);

pDC->SetTextColor(::GetSysColor(COLOR_3DSHADOW));
pDC->DrawText(name, -1, rct, DT_WORDBREAK | DT_CENTER);
rct.OffsetRect(-1, -1);
pDC->SetTextColor(::GetSysColor(COLOR_3DHILIGHT));
pDC->DrawText(name, -1, rct, DT_WORDBREAK | DT_CENTER);

pDC->SelectObject(hOldFont);
pDC->SetBkMode(nMode);

ReleaseDC(pDC);
//UpdateWindow();
}


void CWinceSendDlg::ClearArea(int x, int y)
{
CBrush cBrush(RGB(225,232,243));
   
RECT rect;
CDC* pDC = GetDC();
rect.left=x;
rect.top=y;
rect.right=x+460;
rect.bottom=y+300;
pDC->FillRect(&rect,&cBrush);
ReleaseDC(pDC);
}


void CWinceSendDlg::OnLButtonDown(UINT nFlags, CPoint point)  //识别点击按钮
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
if(nFlags == MK_LBUTTON)
{
if(button_status == true)
{
for(int i=0;i<row;i++)
{
for(int j=0;j<column;j++)
{
if((point.x>=start_x+j*(space_x+btn_width))&&(point.x<=start_x+j*(space_x+btn_width)+btn_width)&&(point.y>=start_y+i*(btn_height+space_y))&&(point.y<=start_y+i*(btn_height+space_y)+btn_height))
{
//printf("%d %d\n",row,column);
station_number = i*column+j+1;
DrawCZButton(station_number,0,m_strZH[station_number]);
OnButton(station_number);
button_status = false;
}
}
}
}

}
__super::OnLButtonDown(nFlags, point);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值