使用双缓冲中的错误

coldplay968 2006-11-23 11:37:30
使用双缓冲后,得到的既然是透明的效果,根本就画不上去
望有人来改正

::HandleNCPaint(WPARAM wp,LPARAM lp)
{
CRect rc;
GetWindowRect(m_hwndHooked,&rc);
rc.OffsetRect(-rc.left,-rc.top);

HDC hWinDC;
hWinDC = ::GetWindowDC(m_hwndHooked);

HDC MemDC; //首先定义一个显示设备对象
HBITMAP MemBitmap;//定义一个位图对象
//随后建立与屏幕显示兼容的内存显示设备
MemDC=CreateCompatibleDC(NULL);
//这时还不能绘图,因为没有地方画 ^_^
//下面建立一个与屏幕显示兼容的位图,至于位图的大小嘛,可以用窗口的大小
MemBitmap = CreateCompatibleBitmap(hWinDC,rc.Width(),rc.Height());
//将位图选入到内存显示设备中
//只有选入了位图的内存显示设备才有地方绘图,画到指定的位图上
HBITMAP *pOldBit=(HBITMAP *)SelectObject(MemDC,&MemBitmap);
//先用背景色将位图清除干净,
CBrush brush1 ;
brush1.CreateSolidBrush(RGB(231,239,255)) ;
FillRect( MemDC , &rc ,brush1) ;

DWORD dwStyle = GetWindowLong(m_hwndHooked,GWL_STYLE);

HBITMAP bitmap;
HDC bitmapDC;
bitmapDC =CreateCompatibleDC(NULL);
HBITMAP pOldBitmap ;
BITMAP bm;

int offset = 30;


if(dwStyle & WS_CAPTION)
{
//绘制标题图片
bitmap = LoadBitmap(m_hPictureDLL,MAKEINTRESOURCE(pBTInfo->id_head) );
pOldBitmap = (HBITMAP)SelectObject( bitmapDC , bitmap ) ;
GetObject( bitmap , sizeof(bm) , &bm ) ;
StretchBlt(MemDC,0,0,140,25,bitmapDC,0,0,bm.bmWidth,bm.bmHeight,SRCCOPY) ;
::SelectObject( bitmapDC, pOldBitmap ) ;
::DeleteObject( bitmap ) ;
}
BitBlt(hWinDC,0,0,rc.Width(),rc.Height(),MemDC,0,0,SRCCOPY) ;
::DeleteObject(&brush) ;
::DeleteObject( bitmap ) ;
::ReleaseDC(m_hwndHooked,hWinDC);
::ReleaseDC(m_hwndHooked,bitmapDC) ;
return TRUE ;
}
...全文
155 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
coldplay968 2006-11-24
  • 打赏
  • 举报
回复
up
LiChenYue 2006-11-23
  • 打赏
  • 举报
回复
哇,好难!
蹭点分!
coldplay968 2006-11-23
  • 打赏
  • 举报
回复
up

15,978

社区成员

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

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