使用双缓冲中的错误

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 ;
}
...全文
126 点赞 收藏 3
写回复
3 条回复
coldplay968 2006年11月24日
up
回复 点赞
LiChenYue 2006年11月23日
哇,好难!
蹭点分!
回复 点赞
coldplay968 2006年11月23日
up
回复 点赞
发动态
发帖子
界面
创建于2007-09-28

7973

社区成员

11.5w+

社区内容

VC/MFC 界面
社区公告
暂无公告