双缓冲背景颜色设置(急!!)

RedHat_net 2008-11-20 02:47:38
利用了双缓冲显示文字!!现在已经显示了,原来这个对话框的背景颜色是蓝色,用双缓冲显示的区域是整个对话框的一部分,显示成黑色,我想对这个进行设置,可不知道该怎么设置才对,我用setbkmode,这个方法只是将文字所在的区域变成了透明啊!!可整个位图的颜色该怎么设置呢??用什么方法??

在线狂等,急求!!
...全文
210 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
RedHat_net 2008-11-20
  • 打赏
  • 举报
回复
我重新调试了一下,发现是显示区域的事啊,我把代码贴上来,帮我分析一下吧!

GetWindowRect( hwnd, &rcWindBounds);
RECT pRect;
pRect.bottom = rcWindBounds.bottom;
pRect.left = rcWindBounds.left + 40;
pRect.right = rcWindBounds.right-50;
pRect.top = PLUG_HEIGHT / 2;//PLUG_HEIGHT = 36

pDC = ::CreateCompatibleDC(hDC);
pBitmap = ::CreateCompatibleBitmap(hDC,pRect.right - pRect.left,pRect.bottom - pRect.top);
::SelectObject(pDC,pBitmap);

::SetBkColor(pDC,RGB(255,0,0));

::SetTextColor(pDC,RGB(226,226,52));
HBRUSH br;
br = ::CreateSolidBrush(RGB(255,0,0));
::FillRect(pDC,&pRect,br);
::ExtTextOut(pDC, 0, 0, ETO_RTLREADING, &pRect, _T("北京北京北京北京北京北京北京北京北京北京北京北京北京北京北京"), 6, 0);

::BitBlt(hDC,pRect.left,pRect.top,pRect.right - pRect.left,pRect.bottom - pRect.top,pDC,0,0,SRCCOPY);
::DeleteDC(pDC);

有兴趣的,加我Q14645094我把效果给你发过去,一起讨论一下!
Tinary3v0 2008-11-20
  • 打赏
  • 举报
回复
void C**Dlg::OnMouseMove(UINT nFlags, CPoint point)
{
CDC *pdc=this->GetDC();
CDC MenDC;
CBitmap bm;
MenDC.CreateCompatibleDC(pdc);
bm.CreateCompatibleBitmap(pdc,1000,1000);
MenDC.SelectObject(&bm);

MenDC.FillSolidRect(0,0,1000,1000,RGB(255,255,255)); //这里将屏幕清成白色了,你根据情况自己改,里面的1000是位图的宽度和高度
//
//-------------------------------------------------------------------

DrawAll(&MenDC);
//-------------------------------------------------------------------
pdc->BitBlt(0,0,1000,1000,&MenDC,0,0,SRCCOPY);
MenDC.DeleteDC();
bm.DeleteObject();
ReleaseDC(pdc);

CDialog::OnMouseMove(nFlags, point);
}
RedHat_net 2008-11-20
  • 打赏
  • 举报
回复
第一,我这个应该算是个按钮,当获得焦点的时候,背景颜色是高亮显示的啊,所以背景是变化的,如果你用固定的一个背景作为双缓冲的背景,显示文字的区域就不能实现被选中和选中的状态!
第二,我觉得这个地方只要能设置位图为透明的,就可以不用顾虑到整个区域是否是高亮显示或是正常显示了!!
第三,具体用什么样的方法,我有点不太清楚啊!!
cnzdgs 2008-11-20
  • 打赏
  • 举报
回复
用SetBkColor设置背景颜色,然后用ExtTextOut,指定整个位图矩形,用ETO_OPAQUE标志:
::ExtTextOut(hDC, 0, 0, ETO_OPAQUE, &rc, NULL, 0, NULL);
快乐鹦鹉 2008-11-20
  • 打赏
  • 举报
回复
把界面中需要显示文字的区域作为双缓冲的背景色,再这之上显示文字,再覆盖到原区域。

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧