DisplayDraw


StartDrawingに対する簡単な説明。
StartDrawing — hdcにグラフィックインスタンスを用意
ISymbol.SetupDC — hdcに書き込み準備
ISymbol.Draw –指定された図形を描画

ただしこの時 StartRecording/Stopを読んでいないとコントロールの再レンダリング時に書いた図形は消える。
例えばメモ帳のフォームをかぶせる等。

揮発性を有する場合は呼ばなくても良いが。
詳しくはリファレンス参照

IScreenDisplay scDisplay = this.axMapControl1.ActiveView.ScreenDisplay;

using (ComReleaser com = new ComReleaser())
{
  IRgbColor rgbColor = new RgbColorClass();
  com.ManageLifetime(rgbColor);

  rgbColor.Red = 255;
  rgbColor.Green = 0;
  rgbColor.Blue = 0;

  ISimpleLineSymbol lineSymbol = new SimpleLineSymbolClass();
  com.ManageLifetime(lineSymbol);

  lineSymbol.Color = rgbColor;
  lineSymbol.Style = esriSimpleLineStyle.esriSLSSolid;
  lineSymbol.Width = 2;

  IPointCollection pts = new PolylineClass();
  com.ManageLifetime(pts);

  object miss = Type.Missing;

  pts.AddPoint(this.axMapControl1.Extent.UpperLeft, ref miss, ref  miss);
  pts.AddPoint(this.axMapControl1.Extent.LowerRight, ref miss, ref miss);

  ISymbol symbol = (ISymbol)lineSymbol;

  //↓これがだいじ↓
  scDisplay.StartRecording();
  //↑これがだいじ↑

  scDisplay.StartDrawing(scDisplay.hDC, (short)esriScreenCache.esriNoScreenCache);
  symbol.SetupDC(scDisplay.hDC, scDisplay.DisplayTransformation);

  symbol.Draw((IGeometry)pts);

  symbol.ResetDC();

  scDisplay.FinishDrawing();
  //↓これがだいじ↓
  scDisplay.StopRecording();
  //↑これがだいじ↑
}
カテゴリー: 開発 タグ: パーマリンク