WinXPでMemDCを使ったら。。。


カネゴン  2003-09-21 05:32:37  No: 52168  IP: [192.*.*.*]

MFCで、MemDCを利用した描画系のアプリを作っているのですが、
WinXPと他のOS(Win9X,Win2000)で動作が異なってしまい
困っています。どなたか原因と対策をご教授ください。

具体的な内容は以下のとおりです。

  下記のソースにて描画すると、
WinXPでは、MemDCに描いたX座標1024以降の
CPenの結果(Rectangleのエッジ)が表示されません。
(「pen.CreatePen(PS_SOLID, 2, color2)」で
CPenを作成すると表示されるのですが。。。)

WinXPマシンの画面の解像度は1024×768です。


--ソース--------
void CBitTestView::OnDraw(CDC* pDC)
{
  int x=1000; //MemDCのテスト描画視点

  CDC MemDC;
  CBitmap Bitmap;

  //四角形描画用のRECT構造体
  RECT rt;
  rt.left = x;
  rt.top = 0;
  rt.right = x+200;
  rt.bottom = 50;

  DWORD color = RGB(255, 0, 0);
  DWORD color2 = RGB(0, 0, 255);

  //メモリDCを作成
  MemDC.CreateCompatibleDC(pDC);
  Bitmap.CreateCompatibleBitmap(pDC, x+1000, 100);
  CBitmap *oldBitmap = MemDC.SelectObject(&Bitmap);


  //描画モードにR2_MASKPEN を指定
  int bkMode = MemDC.SetROP2(R2_MASKPEN);

  CPen pen;
  pen.CreatePen(PS_SOLID, 1, color2);
  CPen *oldPen = MemDC.SelectObject(&pen);

  CBrush brush2;
  brush2.CreateSolidBrush(color);
  CBrush *oldBrush2 = MemDC.SelectObject(&brush2);
  
          //描画
  MemDC.PatBlt(0, 0, x+1000, 100, WHITENESS);
  MemDC.Rectangle(&rt);

  //BitBltにてメモリDCからDCへ転送
  pDC->BitBlt(0,0, 1000, 100, &MemDC, x, 0, SRCCOPY);
  MemDC.SetROP2(bkMode);

  MemDC.SelectObject(oldBitmap);
  MemDC.SelectObject(oldBrush2);
  MemDC.SelectObject(oldPen);  
  
return   ;
}

編集 削除