【C++/CLI】文字列の右寄せ、左寄せ、中央寄せ描画

文字列を描画する時にはSystem::Drawing::Graphics::DrawStringメソッドを用いますが、文字列を描画するのに、右寄せ、左寄せ、中央寄せを指定するには、6つあるオーバーロードのうち、System::Drawing::StringFormatのあるメソッドを用います。

 

具体的には、

  • Graphics.DrawString (String, Font, Brush, PointF, StringFormat)
  • Graphics.DrawString (String, Font, Brush, Single, Single, StringFormat)
  • Graphics.DrawString (String, Font, Brush, RectangleF, StringFormat)

のいづれかを用います。

 

この3つのメソッドのうち、上の2つが点を基準として文字列を描画し、最後の1つは領域を基準として文字列を描画します。

 

また、基準位置に対して、StringFormatクラスを用いて上下方向左右方向に位置を調整します。

 

StringFormat.Alignmentプロパティ水平方向を調整し、
StringFormat.LineAlignmentプロパティ垂直方向を調整します。

 

何はともあれ、サンプルコードと実行結果を見て頂くと分かり易いと思います。

 

【実行結果】

 

【サンプルコード】

private: System::Void pictureBox1_Paint(System::Object^  sender, System::Windows::Forms::PaintEventArgs^  e) {

	Graphics^ g = e->Graphics;

	System::Drawing::Font^ drawFont = gcnew System::Drawing::Font( "Arial",10 );

	// テキスト レイアウト情報
	StringFormat^ drawFormat = gcnew StringFormat;

	//////////////////////////////////////////
	//
	// 点基準
	//
	//////////////////////////////////////////

	// 基準点の描画 (350, 60)
	g->FillEllipse(Brushes::Red, Rectangle(345, 55, 10, 10));
	// 右左寄せ
	drawFormat->Alignment = StringAlignment::Far;
	g->DrawString("右寄せ(StringAlignment::Far)", drawFont, Brushes::Black, 350, 60, drawFormat);

	// 基準点の描画 (50, 100)
	g->FillEllipse(Brushes::Red, Rectangle(45, 95, 10, 10));
	// 左寄せ
	drawFormat->Alignment = StringAlignment::Near;
	g->DrawString("左寄せ(StringAlignment::Near)", drawFont, Brushes::Black, 50, 100, drawFormat);

	// 基準点の描画 (200, 140)
	g->FillEllipse(Brushes::Red, Rectangle(195, 135, 10, 10));
	// 中央寄せ
	drawFormat->Alignment = StringAlignment::Center;
	g->DrawString("中央寄せ(StringAlignment::Center)", drawFont, Brushes::Black, 200, 140, drawFormat);

	//////////////////////////////////////////
	//
	// 領域基準
	//
	//////////////////////////////////////////

	// 基準領域の描画 (50, 200)-(350, 300)
	Rectangle rect = Rectangle(50, 200, 300, 100);
	g->DrawRectangle(Pens::Red, rect);
	g->DrawLine(Pens::Cyan, 50, 250, 350, 250);
	g->DrawLine(Pens::Cyan, 200, 200, 200, 300);

	// 左上寄せ
	drawFormat->Alignment = StringAlignment::Near;
	drawFormat->LineAlignment = StringAlignment::Near;
	g->DrawString("(Near, Near)", drawFont, Brushes::Black, rect, drawFormat);
	// 中央上寄せ
	drawFormat->Alignment = StringAlignment::Center;
	drawFormat->LineAlignment = StringAlignment::Near;
	g->DrawString("(Center, Near)", drawFont, Brushes::Black, rect, drawFormat);
	// 右上寄せ
	drawFormat->Alignment = StringAlignment::Far;
	drawFormat->LineAlignment = StringAlignment::Near;
	g->DrawString("(Far, Near)", drawFont, Brushes::Black, rect, drawFormat);

	// 左中央寄せ
	drawFormat->Alignment = StringAlignment::Near;
	drawFormat->LineAlignment = StringAlignment::Center;
	g->DrawString("(Near, Center)", drawFont, Brushes::Black, rect, drawFormat);
	// 中央中央寄せ
	drawFormat->Alignment = StringAlignment::Center;
	drawFormat->LineAlignment = StringAlignment::Center;
	g->DrawString("(Center, Center)", drawFont, Brushes::Black, rect, drawFormat);
	// 右中央寄せ
	drawFormat->Alignment = StringAlignment::Far;
	drawFormat->LineAlignment = StringAlignment::Center;
	g->DrawString("(Far, Center)", drawFont, Brushes::Black, rect, drawFormat);

	// 左下寄せ
	drawFormat->Alignment = StringAlignment::Near;
	drawFormat->LineAlignment = StringAlignment::Far;
	g->DrawString("(Near, Far)", drawFont, Brushes::Black, rect, drawFormat);
	// 中央下寄せ
	drawFormat->Alignment = StringAlignment::Center;
	drawFormat->LineAlignment = StringAlignment::Far;
	g->DrawString("(Center, Far)", drawFont, Brushes::Black, rect, drawFormat);
	// 右下寄せ
	drawFormat->Alignment = StringAlignment::Far;
	drawFormat->LineAlignment = StringAlignment::Far;
	g->DrawString("(Far, Far)", drawFont, Brushes::Black, rect, drawFormat);

}

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください