【求助】关于颜色线条变色问题 程序已经实现线条的变色,线条可以变成绿色,蓝色。在实际的使用过程中,反复的变换蓝绿色,就出错了,变换颜色第一次就正常,第二次就报错了,是不是在变换颜色后要做什么工作,以免在变回去的时候报错呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 不要在OnTimer里画图不要在工作者线程里画图不要在OnPaint里死皮赖脸的用循环 void ChatDlg::OnPaint(){ CPaintDC dc(this); CRect rect; GetClientRect(rect);//窗口大小 CDC dcBuffer;//后台缓存 dcBuffer.CreateCompatibleDC(&dc); //dcBuffer.CreateCompatibleDC(dc); CBitmap dfbmp;//设置后台缓存大小 dfbmp.CreateCompatibleBitmap(&dc,rect.right,rect.bottom); dcBuffer.SelectObject(&dfbmp); dcBuffer.FillRect(&rect, &CBrush(RGB(255,255,255))); dcBuffer.SetBkMode(TRANSPARENT); //m_imageBG.Draw(dcBuffer.m_hDC,rect); if (CHAT_SIZE_STATE_NORMAL == m_nChatSizeState) { CPen cpen(PS_SOLID,1,RGB(128,179,210)); dcBuffer.SelectObject(&cpen); dcBuffer.MoveTo(0,69); dcBuffer.LineTo(0,430); } else if (CHAT_SIZE_STATE_MAX == m_nChatSizeState) { CPen cpen(PS_SOLID,1,RGB(128,179,210)); dcBuffer.SelectObject(&cpen); dcBuffer.MoveTo(0,69); dcBuffer.LineTo(0,m_rtChatRect.bottom); } CFont font;//字体设置 font.CreateFont(15,0,0,0,FW_MEDIUM,FALSE,FALSE,0,ANSI_CHARSET,OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY,DEFAULT_PITCH|FF_SWISS,"Arial"); dcBuffer.SelectObject(&font); dcBuffer.SetTextColor(RGB(0,100,150));//字体颜色 dcBuffer.TextOut(m_rtChatRect.right - 175,188,m_charlist.strJoin); dcBuffer.SetTextColor(RGB(0,0,0));//字体颜色 dcBuffer.TextOut(m_rtChatRect.right - 175,75,m_charlist.strQueueName); dc.BitBlt(0,0,rect.right,rect.bottom,&dcBuffer,0,0,SRCCOPY);//将后台缓冲COPY到前台SRCPAINT } 感觉是变量的问题,你可以将你的成员变量设置为全局的试试;或者给成static模式 http://download.csdn.net/source/3495311 Windows7下用SendTo发包,第一次总是发不出去,怎么回事? 串口通讯总出现异常 VC 如何得到麦克风输入音量的大小? 在sdk方式下用createwindow函数创建控件之后如何响应该控件的消息? 数据库程序的初级问题 处理char型时vc中的“”与‘’的区别是什么呀 如何取得屏幕的窗口上某一点的颜色。 多线程问题---请解释一下每个线程扫描的起始和结束端口是怎么处理的 请问那里有vc关于串行通讯的编程资料? CEdit派生类的疑问 幼稚点问题 求助,希望老手指引学习方向
不要在工作者线程里画图不要在OnPaint里死皮赖脸的用循环
void ChatDlg::OnPaint()
{
CPaintDC dc(this); CRect rect;
GetClientRect(rect);//窗口大小
CDC dcBuffer;//后台缓存
dcBuffer.CreateCompatibleDC(&dc);
//dcBuffer.CreateCompatibleDC(dc);
CBitmap dfbmp;//设置后台缓存大小
dfbmp.CreateCompatibleBitmap(&dc,rect.right,rect.bottom);
dcBuffer.SelectObject(&dfbmp);
dcBuffer.FillRect(&rect, &CBrush(RGB(255,255,255)));
dcBuffer.SetBkMode(TRANSPARENT);
//m_imageBG.Draw(dcBuffer.m_hDC,rect);
if (CHAT_SIZE_STATE_NORMAL == m_nChatSizeState)
{
CPen cpen(PS_SOLID,1,RGB(128,179,210));
dcBuffer.SelectObject(&cpen);
dcBuffer.MoveTo(0,69);
dcBuffer.LineTo(0,430);
}
else if (CHAT_SIZE_STATE_MAX == m_nChatSizeState)
{
CPen cpen(PS_SOLID,1,RGB(128,179,210));
dcBuffer.SelectObject(&cpen);
dcBuffer.MoveTo(0,69);
dcBuffer.LineTo(0,m_rtChatRect.bottom);
}
CFont font;//字体设置
font.CreateFont(15,0,0,0,FW_MEDIUM,FALSE,FALSE,0,ANSI_CHARSET,OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY,DEFAULT_PITCH|FF_SWISS,"Arial");
dcBuffer.SelectObject(&font); dcBuffer.SetTextColor(RGB(0,100,150));//字体颜色
dcBuffer.TextOut(m_rtChatRect.right - 175,188,m_charlist.strJoin); dcBuffer.SetTextColor(RGB(0,0,0));//字体颜色
dcBuffer.TextOut(m_rtChatRect.right - 175,75,m_charlist.strQueueName); dc.BitBlt(0,0,rect.right,rect.bottom,&dcBuffer,0,0,SRCCOPY);//将后台缓冲COPY到前台SRCPAINT
}