Уроки Iczelion'а




Урок 4. Отрисовка текста - часть 5


DrawText proto hdc:HDC, lpString:DWORD, nCount:DWORD, lpRect:DWORD, uFormat:DWORD

DrawText = это высокоуровневая AрI функция вывода текста. Она берет на себя такие вещи как перенос слов, центровка и т.п., так что вы можете сконцентрироваться на строке, которую вы хотите нарисовать. Ее низкоуровневый брат, TextOut, будет описан в следующем Урок е. DrawText подгоняет строку под прямоугольник. Она использует выбранный в настоящее время фонт, цвет и фон для отрисовки текста. Слова переносятся так, чтобы строка влезла в границы прямоугольника. DrawText возвращает высоту выводимого текста в единицах устройства, в нашем случае в пикселях. Давайте посмотрим на ее параметры:

  • hdc - хэндл контекста устройства
  • lрString - указатель на строку, которую вы хотите нарисовать в прямоугольнике. Строка должна заканчиваться NULL'ом, или же вам придется указывать ее длину в следующем параметре, nCount.
  • nCount - количество символов для вывода. Если строка заканчивается NULL'ом, nCount должен быть равен -1. В противоположном случае, nCount должен содержать количество символов в строке.
  • lрRect - указатель на прямоугольник (структура типа RECT), в котором вы хотите рисовать строку. Заметьте, что прямоугольник ограничен, то есть вы не можете нарисовать строку за его пределами.
  • uFormat - значение, определяющее как строка отображается в прямоугольнике. Мы используем три значения, скомбинированные оператором "or":
  • DT_SINGLELINE указывает, что текст будет располагаться в одну линию
  • DT_CENTER центрирует текст по горизонтали
  • DT_VCNTER центрирует тест по вертикали. Должен использоваться вместе с DT_SINGLELINE.
  • После того, как вы отрисовали клиентскую область, вы должны вызвать функцию EndPaint, чтобы освободить хэндл устройства контекста.

    Вот и все. Мы можем указать главные идеи:

  • Вы вызываете связку BeginPaint-EndPaint в ответ на сообщение WM_PAINT. Делайте все, что вам нужно с клиентской областью между вызовами этих двух функций.
  • Если вы хотите перерисовать вашу клиентскую область в ответе на другие сообщения, у вас есть два выбора:
  • Используйте связку GetDC-ReleaseDC и делайте отрисовку между вызовами этих функций.
  • Вызовите Invalidaterect или UpdateWindow, чтобы Windows послала сообщение WM_PAINT вашему окну.
  • [C] Iczelion, пер. Aquila.






    Содержание  Назад  Вперед