树控件自绘wm_paint消息//只出现GradientFillRect函数效果、树节点的字都没有!

mirroatl139 2012-12-21 04:47:40

void CTreeCtrlEx::OnPaint()
{
CPaintDC dc(this); // device context for painting
CRect rcClient;
GetClientRect(rcClient); //获取客户区
CDC memDC;
memDC.CreateCompatibleDC(&dc);
CBitmap bitmap;
bitmap.CreateCompatibleBitmap(&dc,rcClient.Width(),rcClient.Height());
CBitmap* pOldBitmap = memDC.SelectObject(&bitmap);
GradientFillRect(memDC.m_hDC,rcClient,0xFDE7C5,0xffffff,false);
memDC.SetBkMode(TRANSPARENT);
memDC.SetTextColor(RGB(0,0,0));
dc.BitBlt(rcClient.left,rcClient.top,rcClient.Width(),rcClient.Height(),&memDC,rcClient.left,rcClient.top,SRCCOPY);
memDC.SelectObject(pOldBitmap);
memDC.DeleteDC();
}

...全文
112 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
傻X 2012-12-21
  • 打赏
  • 举报
回复
引用 3 楼 gfm688 的回复:
void CTreeCtrlEx::OnPaint() { CPaintDC dc(this); // device context for painting CRect rcClient; GetClientRect(rcClient); //获取客户区 CDC memDC; memDC.CreateCompatibleDC(&……
这代码不错,但是感觉会闪烁哦。 CWnd::DefWindowProc(WM_PAINT, (WPARAM)memDC.GetSafeHdc(), 0); 这个是不是应用CTreeCtrlEx的父类更好呢?只是感觉。 最好放到一个内存中同时输出。
gfm688 2012-12-21
  • 打赏
  • 举报
回复
void CTreeCtrlEx::OnPaint() { CPaintDC dc(this); // device context for painting CRect rcClient; GetClientRect(rcClient); //获取客户区 CDC memDC; memDC.CreateCompatibleDC(&dc); CBitmap bitmap; bitmap.CreateCompatibleBitmap(&dc,rcClient.Width(),rcClient.Height()); CBitmap* pOldBitmap = memDC.SelectObject(&bitmap); CWnd::DefWindowProc(WM_PAINT, (WPARAM)memDC.GetSafeHdc(), 0); GradientFillRect(dc.GetSafeHdc(),rcClient,0xFDE7C5,0xffffff,false); COLORREF cr = GetBkColor(); if (cr == -1) cr = GetSysColor(COLOR_WINDOW); ::TransparentBlt(dc.GetSafeHdc(), 0, 0, rrcClient.Width(), rcClient.Height(), memDC.GetSafeHdc(), 0, 0, rcClient.Width(), rcClient.Height(), cr); memDC.SelectObject(pOldBitmap); }
gfm688 2012-12-21
  • 打赏
  • 举报
回复

void CTreeCtrlEx::OnPaint() 
{
  CPaintDC dc(this); // device context for painting
  CRect rcClient;
  GetClientRect(rcClient); //获取客户区
  CDC memDC;
  memDC.CreateCompatibleDC(&dc);
  CBitmap bitmap;
  bitmap.CreateCompatibleBitmap(&dc,rcClient.Width(),rcClient.Height());
  CBitmap* pOldBitmap = memDC.SelectObject(&bitmap);
  CWnd::DefWindowProc(WM_PAINT, (WPARAM)memDC.GetSafeHdc(), 0);
  GradientFillRect(dc.GetSafeHdc(),rcClient,0xFDE7C5,0xffffff,false);
  ::TransparentBlt(dc.GetSafeHdc(), 0, 0, rrcClient.Width(), rcClient.Height(), memDC.GetSafeHdc(), 0, 0, rcClient.Width(), rcClient.Height(), GetBkColor());
  memDC.SelectObject(pOldBitmap);
}
傻X 2012-12-21
  • 打赏
  • 举报
回复
被楼主覆盖了 在 memDC.SetBkMode(TRANSPARENT); memDC.SetTextColor(RGB(0,0,0)); 之后 使用TextOut再输出一下内容才行

15,979

社区成员

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

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