好像就是个双缓冲的问题吧
给段代码看看
给段代码看看
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
void
DrawSomething(
HWND
hWnd,
LPCTSTR
szText)
{
if
(IsWindow(hWnd))
{
//获取窗口客户区尺寸信息
RECT rcRect;
GetClientRect(hWnd, &rcRect);
int
nWidth = rcRect.right - rcRect.left;
int
nHeight = rcRect.bottom - rcRect.top;
//创建内存DC过程
HDC
hSrceenDC = GetDC(NULL);
//获取屏幕DC
HDC
hMemDC = CreateCompatibleDC(hSrceenDC);
//创建兼容内存DC
HBITMAP
hMemBitmap = CreateCompatibleBitmap(hSrceenDC, nWidth, nHeight);
//创建兼容位图
HBITMAP
hOldBitmap = (
HBITMAP
)SelectObject(hMemDC, hMemBitmap);
//将位图选入内存DC
//在内存DC上绘制
FillRect(hMemDC, &rcRect, (
HBRUSH
)GetStockObject(WHITE_BRUSH));
//填充白色背景
SetTextColor(hMemDC, RGB(200, 0, 0));
// GetSysColor(COLOR_WINDOWTEXT)); //红色字体颜色
SetBkMode(hMemDC, TRANSPARENT);
//字体背景色透明
TextOut(hMemDC, 0, 0, szText, _tcslen(szText));
//绘制字体
//其它绘制代码就不列举了
//将内存DC贴图到目标客户区
HDC
hClientDC = GetDC(hWnd);
//获取hWnd窗口的客户区DC
BitBlt(hClientDC, 0, 0, nWidth, nHeight, hMemDC, 0, 0, SRCCOPY);
//贴图
ReleaseDC(hWnd, hClientDC);
//释放GetDC获取的HDC
//结束清理工作
SelectObject(hMemDC, hOldBitmap);
//恢复内存DC的位图句柄
DeleteObject(hMemBitmap);
//删除内存位图
DeleteDC(hMemDC);
//删除内存DC
ReleaseDC(NULL, hSrceenDC);
//释放GetDC获取的屏幕HDC
}
}
|