読者です 読者をやめる 読者になる 読者になる

1ドット間隔の点線を描画するペンを作成する

C++Builder Tips

TPenのStyleプロパティにpsDotを設定しても1ドット間隔の点線を描画してくれない。この場合はExtCreatePen APIでジオメトリックペンを作成し、それをTPenに結びつける。

  LOGBRUSH logBrush;
  logBrush.lbColor = RGB(0x00, 0x00, 0x00);
  logBrush.lbHatch = 0;
  logBrush.lbStyle = BS_SOLID;
  DWORD s[] = {1, 1};

  // 1ドット間隔のジオメトリックペンを生成する
  HPEN hPen = ExtCreatePen(PS_GEOMETRIC | PS_ENDCAP_FLAT | PS_USERSTYLE, 1, &logBrush, 2, s);

  // APIレベルで描画するのであれば、ハンドルをTPenへ結びつける必要は無し
  TPen* pDashPen = new TPen();
  pDashPen->Handle = hPen;

TPenやTBrushのようなVCLの描画オブジェクトに結びつけたハンドルはVCLの内部で自動的に管理してくれる。ハンドルをExtCreatePenなどで作成してもDeleteObjectを明示的に呼び出す必要はない。ただし、operator newで作成したVCLオブジェクトはスマートポインタで管理するか明示的にoperator deleteで破棄しなければならない。