Шаг 74.
Microsoft Visual C++ 2010. Начала.
Программирование. Графика. Графические примитивы. Текст (окончание)

    На этом шаге мы рассмотрим определение местоположения выводимого текста.

    Часто надо знать, сколько места займет текст, например, для того, чтобы правильно разместить его на графической поверхности. Так, чтобы разместить текст по центру формы, надо знать ширину области вывода. Очевидно, что размер области вывода зависит от шрифта, который используется для отображения текста.

    Информацию о размере области вывода текста возвращает метод MeasureString. В инструкции вызова метода надо указать строку и шрифт, который будет использован для ее отображения. Значением метода MeasureString является объект типа SizeF, свойства Width и Height которого содержат информацию о размере области вывода текста.

    В примере ниже приведен фрагмент программы, которая демонстрирует использование метода MeasureString. Функция обработки события Paint выводит текст в центре формы (рисунок 1). Кроме обработки события Paint программа выполняет обработку события Resize, которое возникнет, если пользователь изменит размер окна. Обработка заключается в вызове метода Refresh, который информирует систему о необходимости обновить (перерисовать) окно, что приводит к возникновению события Paint.

private: System::Void Form1_Paint(System::Object^  sender, 
          System::Windows::Forms::PaintEventArgs^  e) {
	 String^ st1 = "Microsoft Visual Studio 2010"; 

	 System::Drawing::Font^ h1 = gcnew System::Drawing::Font("Tahoma",12); 
	 System::Drawing::Font^ h2 = gcnew System::Drawing::Font("Tahoma",10);
	 System::Drawing::Font^ h3 = gcnew System::Drawing::Font("Tahoma",9);

	 float x,y;
	 float w,h;

	 w = e->Graphics->MeasureString(st1, h1).Width;
	 h = e->Graphics->MeasureString(st1, h1).Height;
	 x = (this->ClientSize.Width - w)/2;
	 y = 10;

	 e->Graphics->DrawString(st1, h1, Brushes::Black, x, y);
			 
	 w = e->Graphics->MeasureString(st1, h2).Width;
	 h = e->Graphics->MeasureString(st1, h2).Height;
	 x = (this->ClientSize.Width - w)/2; 
	 y += h;

	 e->Graphics->DrawString(st1,h2, Brushes::Black, x, y);

	 w = e->Graphics->MeasureString(st1, h3).Width;
	 h = e->Graphics->MeasureString(st1, h3).Height;
	 x = (this->ClientSize.Width - w)/2;
	 y += h; 

	 e->Graphics->DrawString(st1,h3, Brushes::Black, x, y);
}

// изменился размер формы
private: System::Void Form1_Resize(System::Object^  sender, System::EventArgs^  e) {
	 // Сообщить системе о необходимости перерисовать окно. 
	 // В результате будет сгенерировано событие Paint.
	 this->Refresh(); 
 }
Архив проекта можно взять здесь.


Рис.1. Метод MeasureString позволяет получить информацию о размере области вывода текста, чтобы расположить текст по центру формы

    На следующем шаге мы рассмотрим битовые образы.




Предыдущий шаг Содержание Следующий шаг