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使用不对,可是我又不知道是哪错了,谁能帮我看看

解决方案 »

  1.   

    转vc版吧。那里关注windows api的人多一些。
      

  2.   

    g_hBitMap=CreateCompatibleBitmap(s_MemHdc,1800,1600);
    改为
    g_hBitMap=CreateCompatibleBitmap(hdc,1800,1600);
      

  3.   

    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); 以上代码错误多多,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资源释放
      

  4.   

    g_hBitMap=CreateCompatibleBitmap(s_MemHdc,1800,1600);      
      SelectObject(s_MemHdc, g_hBitMap);  
    加上                     
     s_MemHdc.BitBlt(......)函数,不然会出现问题
    否则位图的信息不能读取!