关于自绘 CCheckBox 控件的问题 正常使用时没发现啥不对但是当这个控件执行了 EnableWindow(FALSE);后就出问题了显示的是系统的框框,不是我的画的...再执行 EnableWindow(TRUE)后,自画的界面出来了,但系统的那个还是能看到一些在边框上全是在OnPaint函数 里面画的界面Onpaint里面,就是根据 选中状态,鼠标是否在上面停留等,显示不同的图片很是郁闷请高人讲解下 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 下面是OnPaint的代码没有用那个自绘的代码CPaintDC dc(this); // device context for painting // TODO: Add your message handler code here // Do not call CButton::OnPaint() for painting messages CBitmap bitamp; CDC *pDC=this->GetParent()->GetDC(); CRect parentRect; GetClientRect(&parentRect); ClientToScreen(&parentRect); GetParent()->ScreenToClient(&parentRect); m_dc.SelectObject(&gFont); bitamp.CreateCompatibleBitmap(&dc,parentRect.Width(),parentRect.Height()); m_dc.SelectObject(&bitamp); m_dc.SetBkMode(1); m_dc.SetTextColor(RGB(0,0,0)); //m_dc.SetBkColor(RGB(0x2d,0x6c,0xaf)); m_dc.BitBlt(0,0,parentRect.Width(),parentRect.Height(),pDC,parentRect.left,parentRect.top,SRCCOPY); int top=0; //Graphics g(m_dc.m_hDC); switch(m_iWhichPic) { case 0://选中,不在上面 //if (m_bIsSpecial) // CUtil::DrawBitmap(m_dc.m_hDC,m_checked_normal,3,top,true); // //g.DrawImage(m_checked_normal,0,0); //else CUtil::DrawBitmap(m_dc.m_hDC,m_checked_normal,3,top,true); //g.DrawImage(m_checked_normal,0,0); break; case 1://选中,在上面 //if (m_bIsSpecial) // CUtil::DrawBitmap(m_dc.m_hDC,m_checked_over,3,top,true); // //g.DrawImage(m_checked_over,0,0); //else CUtil::DrawBitmap(m_dc.m_hDC,m_checked_over,3,top,true); break; case 2://unchecked not on it CUtil::DrawBitmap(m_dc.m_hDC,m_uncheck_normal,3,top,true); break; case 3://unchecked on it CUtil::DrawBitmap(m_dc.m_hDC,m_uncheck_over,3,top,true); break; } m_dc.TextOutW(32+10,6,m_szText); dc.BitBlt(0,0,parentRect.Width(),parentRect.Height(),&m_dc,0,0,SRCCOPY); ReleaseDC(pDC);响应了这个消息BM_SETCHECKOnClickedOnMouseMove 发现了,以上方法有些问题需要给控件加上自绘属性然后在drawitem里面画还在学习中 哎,结贴吧,多简单的问题控件增加 自绘属性,然后增加函数 DrawItem然后在里面画界面增加Mousemove属性WindowProc 函数里面 处理这个 BM_SETCHECK与 BM_GETCHECK自己保证选中与没选中状态然后DrawItem里面根据状态.画不同的图片完事.. Socket访问Web网页问题 如何实现小丑图像去除噪音 这种情况下要占用多大的带宽! OnEraseBkgnd和CtlColor的区别 如何用我自己的程序,控制别的程序弹出菜单??别人的程序是没有窗体的,但是有托盘图标 Com+ ,DCOM 问题,希望高手解答!(希望大家讨论) 在程序中,创建对话框,如果错了,想把它删掉,怎样实现?是不是把Dlg**.h和Dlg**.cpp删掉就可以了? VC++迷茫求救! 关于异常问题! 怎样建立单纯属性表单对话框 ADO连接数据库在对话框中显示 string subscript out of range! 急!!!!
没有用那个自绘的代码CPaintDC dc(this); // device context for painting
// TODO: Add your message handler code here
// Do not call CButton::OnPaint() for painting messages
CBitmap bitamp;
CDC *pDC=this->GetParent()->GetDC();
CRect parentRect;
GetClientRect(&parentRect);
ClientToScreen(&parentRect);
GetParent()->ScreenToClient(&parentRect);
m_dc.SelectObject(&gFont);
bitamp.CreateCompatibleBitmap(&dc,parentRect.Width(),parentRect.Height());
m_dc.SelectObject(&bitamp);
m_dc.SetBkMode(1);
m_dc.SetTextColor(RGB(0,0,0));
//m_dc.SetBkColor(RGB(0x2d,0x6c,0xaf));
m_dc.BitBlt(0,0,parentRect.Width(),parentRect.Height(),pDC,parentRect.left,parentRect.top,SRCCOPY);
int top=0;
//Graphics g(m_dc.m_hDC);
switch(m_iWhichPic)
{
case 0://选中,不在上面
//if (m_bIsSpecial)
// CUtil::DrawBitmap(m_dc.m_hDC,m_checked_normal,3,top,true);
// //g.DrawImage(m_checked_normal,0,0);
//else
CUtil::DrawBitmap(m_dc.m_hDC,m_checked_normal,3,top,true);
//g.DrawImage(m_checked_normal,0,0);
break;
case 1://选中,在上面
//if (m_bIsSpecial)
// CUtil::DrawBitmap(m_dc.m_hDC,m_checked_over,3,top,true);
// //g.DrawImage(m_checked_over,0,0);
//else
CUtil::DrawBitmap(m_dc.m_hDC,m_checked_over,3,top,true);
break;
case 2://unchecked not on it
CUtil::DrawBitmap(m_dc.m_hDC,m_uncheck_normal,3,top,true);
break;
case 3://unchecked on it
CUtil::DrawBitmap(m_dc.m_hDC,m_uncheck_over,3,top,true);
break;
}
m_dc.TextOutW(32+10,6,m_szText);
dc.BitBlt(0,0,parentRect.Width(),parentRect.Height(),&m_dc,0,0,SRCCOPY);
ReleaseDC(pDC);响应了这个消息
BM_SETCHECK
OnClicked
OnMouseMove
需要给控件加上自绘属性
然后在drawitem里面画还在学习中
增加Mousemove属性
WindowProc 函数里面 处理这个 BM_SETCHECK与 BM_GETCHECK
自己保证选中与没选中状态
然后DrawItem里面根据状态.画不同的图片完事..