hdc = BeginPaint (hWnd, &ps);
s_MemHdc=CreateCompatibleDC(hdc); // 创建一个和主窗体相对应的内存dc
g_hBitMap=CreateCompatibleBitmap(s_MemHdc,1800,1600); // 根据主窗体中的dc创建一个位图对象 SelectObject(s_MemHdc, g_hBitMap); // 位图选取到MemHdc
SelectObject(s_MemHdc,WHITE_BRUSH); // 将背景刷成白色
Rectangle(s_MemHdc,0,0,1800,1600); if (s_BmpInf!=NULL) // 如果有背景位图则进行加载
SetDIBitsToDevice (s_MemHdc, // 设备DC
-g_IPlaHscrollPos*10, // 左上角x坐标
-g_IPerVscrollPos*10, // 左上角y坐标
s_cxDib, // 图像宽度
s_cyDib, // 图像高度
0, // 右下角x坐标
0, // 右下角y坐标
0, // 第一行的位子
s_cyDib, // 行数
s_pBits, // 图像信息
s_pbmi, // bitmap指针
DIB_RGB_COLORS // 配色表
) ;
Step *PTemp; // 申请临时Step结构体指针
PTemp=g_PHStep;
SelectObject(s_MemHdc,GetStockObject(NULL_BRUSH)); // 设置画笔为无填充色
while(PTemp!=g_PStep)
{
SelectObject(s_MemHdc,CreatePen(PS_SOLID,PTemp->ILineWidth,PTemp->IColor));// 设置画笔的颜色和线宽
iTempDx=PTemp->IDx // 获取重绘图形的坐标
iTempDy=PTemp->IDy;
iTempUx=PTemp->IUx;
iTempUy=PTemp->IUy;
MoveToEx(s_MemHdc,iTempDx,iTempDy,NULL);
LineTo(s_MemHdc,iTempUx,iTempUy);
PTemp++;
} DrawText (s_MemHdc, "", -1, &s_Rrect,DT_CENTER | DT_VCENTER | DT_SINGLELINE);
EndPaint (hWnd, &ps);
SelectObject(hdc,g_hBitMap); hdc=GetDC(gMF_hWnd); BitBlt(hdc,-g_IPlaHscrollPos*10,-g_IPerVscrollPos*10,1800,1600,s_MemHdc,-g_IPlaHscrollPos*10,-g_IPerVscrollPos*10,SRCCOPY);
ReleaseDC(gMF_hWnd,s_MemHdc);
以上代码为什么绘制的图像是黑白色的呀?有人说我可能是CreateCompatibleBitmap使用不对,可是我又不知道是哪错了,谁能帮我看看
s_MemHdc=CreateCompatibleDC(hdc); // 创建一个和主窗体相对应的内存dc
g_hBitMap=CreateCompatibleBitmap(s_MemHdc,1800,1600); // 根据主窗体中的dc创建一个位图对象 SelectObject(s_MemHdc, g_hBitMap); // 位图选取到MemHdc
SelectObject(s_MemHdc,WHITE_BRUSH); // 将背景刷成白色
Rectangle(s_MemHdc,0,0,1800,1600); if (s_BmpInf!=NULL) // 如果有背景位图则进行加载
SetDIBitsToDevice (s_MemHdc, // 设备DC
-g_IPlaHscrollPos*10, // 左上角x坐标
-g_IPerVscrollPos*10, // 左上角y坐标
s_cxDib, // 图像宽度
s_cyDib, // 图像高度
0, // 右下角x坐标
0, // 右下角y坐标
0, // 第一行的位子
s_cyDib, // 行数
s_pBits, // 图像信息
s_pbmi, // bitmap指针
DIB_RGB_COLORS // 配色表
) ;
Step *PTemp; // 申请临时Step结构体指针
PTemp=g_PHStep;
SelectObject(s_MemHdc,GetStockObject(NULL_BRUSH)); // 设置画笔为无填充色
while(PTemp!=g_PStep)
{
SelectObject(s_MemHdc,CreatePen(PS_SOLID,PTemp->ILineWidth,PTemp->IColor));// 设置画笔的颜色和线宽
iTempDx=PTemp->IDx // 获取重绘图形的坐标
iTempDy=PTemp->IDy;
iTempUx=PTemp->IUx;
iTempUy=PTemp->IUy;
MoveToEx(s_MemHdc,iTempDx,iTempDy,NULL);
LineTo(s_MemHdc,iTempUx,iTempUy);
PTemp++;
} DrawText (s_MemHdc, "", -1, &s_Rrect,DT_CENTER | DT_VCENTER | DT_SINGLELINE);
EndPaint (hWnd, &ps);
SelectObject(hdc,g_hBitMap); hdc=GetDC(gMF_hWnd); BitBlt(hdc,-g_IPlaHscrollPos*10,-g_IPerVscrollPos*10,1800,1600,s_MemHdc,-g_IPlaHscrollPos*10,-g_IPerVscrollPos*10,SRCCOPY);
ReleaseDC(gMF_hWnd,s_MemHdc);
以上代码为什么绘制的图像是黑白色的呀?有人说我可能是CreateCompatibleBitmap使用不对,可是我又不知道是哪错了,谁能帮我看看
改为
g_hBitMap=CreateCompatibleBitmap(hdc,1800,1600);
EndPaint (hWnd, &ps);SelectObject(hdc,g_hBitMap);hdc=GetDC(gMF_hWnd);BitBlt(hdc,-g_IPlaHscrollPos*10,-g_IPerVscrollPos*10,1800,1600,s_MemHdc,-g_IPlaHscrollPos*10,-g_IPerVscrollPos*10,SRCCOPY);
ReleaseDC(gMF_hWnd,s_MemHdc); 以上代码错误多多,EndPaint之后hdc就无效了,gMF_hWnd和hWnd是不同的窗口? 改成下面的试试
DrawText (s_MemHdc, "", -1, &s_Rrect,DT_CENTER ¦ DT_VCENTER ¦ DT_SINGLELINE);
BitBlt(hdc,-g_IPlaHscrollPos*10,-g_IPerVscrollPos*10,1800,1600,s_MemHdc,-g_IPlaHscrollPos*10,-g_IPerVscrollPos*10,SRCCOPY);
EndPaint (hWnd, &ps);...GDI资源释放
SelectObject(s_MemHdc, g_hBitMap);
加上
s_MemHdc.BitBlt(......)函数,不然会出现问题
否则位图的信息不能读取!