none
在OpenGL环境下使用GDI绘图的问题 RRS feed

  • 常规讨论

  •     现在在OpenGL环境下使用OpenGL打开位图显示,主要使用glDrawPixels。现在实现一个拉框放大功能,这个拉框还是用GDI来画,现在拉框放大可以实现,但是那个拉框画得有点问题,如下图:

             

             可以看到,那个框的颜色并不统一。我原想用黄色画框的,但是在图像内黄色产生了变化。我的代码如下:

      
    // NewPt为当前鼠标移动到达的那一点
    void CStereoMapView::DrawZoomRect(CPoint NewPt)
    {
    
         CDC *pDC;
         pDC = GetDC();
             // 将画笔选入设备环境
         CPen myPen1(PS_SOLID, 5, RGB(0,0,255));
         pDC->SelectObject(&myPen1);
    
         pDC->SetROP2(R2_NOTXORPEN);
    
             // 将之前的框覆盖掉
             pDC->MoveTo(mg_cStartPos.x,mg_cStartPos.y);
             pDC->LineTo(mg_cEndPos.x,mg_cStartPos.y);
             pDC->LineTo(mg_cEndPos.x,mg_cEndPos.y);
             pDC->LineTo(mg_cStartPos.x,mg_cEndPos.y);
             pDC->LineTo(mg_cStartPos.x,mg_cStartPos.y);
    
             // 画新的拉框
         mg_cEndPos = NewPt;
    
         pDC->MoveTo(mg_cStartPos.x,mg_cStartPos.y);
         pDC->LineTo(mg_cEndPos.x,mg_cStartPos.y);
         pDC->LineTo(mg_cEndPos.x,mg_cEndPos.y);
         pDC->LineTo(mg_cStartPos.x,mg_cEndPos.y);
             pDC->LineTo(mg_cStartPos.x,mg_cStartPos.y);
    
         ReleaseDC(pDC);
    }
    

        
      我想问题主要出现在pDC->SetROP2(R2_NOTXORPEN);这一句代码上。在覆盖原来的拉框上可以做到,但是在画新的拉框上会有问题,因为SetROP2(R2_NOTXORPEN); 这样绘图像素是画笔颜色异或屏幕颜色再取反,而屏幕颜色取自位图颜色。这样拉框自然是随着位图颜色的变化而变化。那么该怎么设置才能用统一的颜色画拉框呢?

    前无古人,后无来者
    2009年8月5日 6:22

全部回复