Как найти ширину Строки (в пикселях) в WIN32

Если Вы не вынуждены использовать C, Вы должны никогда использование malloc. Всегда используйте new.

, Если Вам нужен большой блок данных просто, делают что-то как:

char *pBuffer = new char[1024];

Быть осторожным, хотя это не корректно:

//This is incorrect - may delete only one element, may corrupt the heap, or worse...
delete pBuffer;

Вместо этого необходимо сделать это при удалении массива данных:

//This deletes all items in the array
delete[] pBuffer;

new ключевое слово является C++ способ сделать его, и это гарантирует, что Ваш тип будет иметь , конструктор звонил . new ключевое слово - также больше безопасный с точки зрения типов , тогда как malloc не безопасно с точки зрения типов вообще.

единственный способ, которым я мог думать, что это будет выгодно для использования malloc, состоял бы в том, если бы Вы должны были к [1 128] изменить размер своего буфера из данных. new ключевое слово не имеет аналогичного пути как [1 111]. Эти realloc функция могла бы быть в состоянии расширить размер блока памяти для Вас более эффективно.

стоит упомянуть, что Вы не можете смешаться new / free и malloc / delete.

Примечание: Некоторые ответы в этом вопросе недопустимы.

int* p_scalar = new int(5);  // Does not create 5 elements, but initializes to 5
int* p_array  = new int[5];  // Creates 5 elements
17
задан Draemon 14 July 2009 в 17:12
поделиться

4 ответа

Попробуйте использовать GetTextExtentPoint32 . Это использует текущий шрифт для данного контекста устройства для измерения ширины и высоты отображаемой строки в логических единицах. Для режима отображения по умолчанию, MM_TEXT, логическая единица 1 равна 1 пикселю.

Однако, если вы изменили режим отображения для текущего контекста устройства, логическая единица может не совпадать с пикселем. Вы можете прочитать о различных режимах отображения в MSDN . В режиме отображения вы можете преобразовать размеры, возвращаемые вам GetTextExtentPoint32, в пиксели.

22
ответ дан 30 November 2019 в 11:22
поделиться

Точно не знаю, но похоже, что:

HDC hDC = GetDC(NULL);
RECT r = { 0, 0, 0, 0 };
char str[] = "Whatever";
DrawText(hDC, str, strlen(str), &r, DT_CALCRECT);

может сработать.

15
ответ дан 30 November 2019 в 11:22
поделиться

В зависимости от того, как вы это используете, вы можете использовать DrawText с указанным DT_CALCRECT, и он (он всегда делал это довольно точно для меня) вычисляет размер необходимого прямоугольника на основе текста / шрифт / и т. д.

1
ответ дан 30 November 2019 в 11:22
поделиться

Графика :: MeasureString ?

 VOID Example_MeasureString (HDC hdc)
{
 Графическая графика (HDC);
 // Устанавливаем строку.
 Строка WCHAR [] = L "Текст измерения";
 Шрифт шрифта (L «Arial», 16);
 RectF layoutRect (0, 0, 100, 50);
 RectF boundRect;
 // Измеряем строку.
 graphics.MeasureString (строка, 12, & шрифт, layoutRect, & boundRect);
 // Рисуем прямоугольник, представляющий размер строки.
 graphics.DrawRectangle (& Pen (Цвет (255, 0, 0, 0)), boundRect);
} 
3
ответ дан 30 November 2019 в 11:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: