使用双缓冲中的错误
使用双缓冲后,得到的既然是透明的效果,根本就画不上去
望有人来改正
::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 ;
}