Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

.rc скрипт: скалярность контролов: есть пара "добрых" слов

282
04 апреля 2010 года
Bard
481 / / 26.02.2006
Такая задача:
пишу парсер .rc скриптов и проверяю работоспособность его путем создания окна с контролами что описаны в скрипте. Все ок. НО! Почему-то размер всех котролов меньше примерно в два раза. Нет, я не делю все значения загруженные из файла на два :)

Кто сталкивался с такой проблемой?

[SIZE="1"][COLOR="DimGray"]PS:
Не удивлюсь, если выяснится что rc скрипты в м$ придуманы.[/COLOR][/SIZE]
14
05 апреля 2010 года
Phodopus
3.3K / / 19.06.2008
MapDialogRect()
Цитата: Bard

[SIZE="1"][COLOR="DimGray"]PS:
Не удивлюсь, если выяснится что rc скрипты в м$ придуманы.[/COLOR][/SIZE]


[SIZE="1"][COLOR="DimGray"]удивлюсь, если это сильно не так[/COLOR][/SIZE]

282
05 апреля 2010 года
Bard
481 / / 26.02.2006



пасибки за ссылку.

Цитата: Phodopus

[SIZE="1"][COLOR="DimGray"]удивлюсь, если это сильно не так[/COLOR][/SIZE]



[SIZE="1"][COLOR="DimGray"]тобиш?[/COLOR][/SIZE]

253
05 апреля 2010 года
Proger_XP
1.5K / / 07.08.2004
Цитата: Bard
[SIZE="1"][COLOR="DimGray"]тобиш?[/COLOR][/SIZE]


Это формат описания ресурсов, придуманный для Windows.

Кстати, как я понимаю, ничего странного в растяжении контролов нет - у каждого может быть своё разрешение экрана (DPI), под это они и масштабируются.

14
06 апреля 2010 года
Phodopus
3.3K / / 19.06.2008
Цитата: Proger_XP
Эу каждого может быть своё разрешение экрана (DPI), под это они и масштабируются.


Они масштабируются в соответствии с выбранным для диалога шрифтом. В референсах к функции, ссылку на которую я дал, об этом и говорится (в общем-то я и давал не функцию а "чтобы почитать").

253
06 апреля 2010 года
Proger_XP
1.5K / / 07.08.2004
Цитата: Phodopus
Они масштабируются в соответствии с выбранным для диалога шрифтом. В референсах к функции, ссылку на которую я дал, об этом и говорится (в общем-то я и давал не функцию а "чтобы почитать").


Я так понял, что "screen units" - это как раз DPI:

Цитата:
The MapDialogRect function converts the specified dialog box units to screen units (pixels).


Хотя там дальше про SETFONT говорится, но не понятно, в дополнение к этому или как определение "screen units".

14
06 апреля 2010 года
Phodopus
3.3K / / 19.06.2008
Цитата: Proger_XP
Я так понял, что "screen units" - это как раз DPI:


Цитата:
... to screen units (pixels)


тоесть скрин юниты - это пикселы. А св-ва диалога задаются в неких абстрактных dialog units, и взаимно однозначное соответствие между первыми и вторыми устанавливается конкретным шрифтом диалога - там же формулы через некие baseunits, которые суть

Цитата:
the average width and height, in pixels, of the characters in the font specified


или же GetDialogBaseUnits().
На самом деле с DPI тут связи прямой нет, но т.к. для экранов с большим DPI зачастую устанавливают большие шрифты, объяснить это сложно. :)

282
10 апреля 2010 года
Bard
481 / / 26.02.2006
Вообщем на простом окне MapDialogRect() не работает. Но такая вот абракадабра катит:

Код:
void my_MapDialogRect (HWND hwnd, RECT *r) {
   
    int base_x, base_y;
    TEXTMETRIC tm;
    HDC hdc = GetDC (hwnd);
    SIZE size;
   
    SelectObject (hdc, hfont);
    GetTextMetrics (hdc, &tm);
    GetTextExtentPoint32 (hdc, "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz", 52, &size);
    ReleaseDC (hwnd, hdc);
   
    base_x = (size.cx / 26 + 1) / 2;
    base_y = tm.tmHeight;
   
    r->left = MulDiv (r->left, base_x, 4);
    r->right = MulDiv (r->right, base_x, 4);
    r->top = MulDiv (r->top, base_y, 8);
    r->bottom = MulDiv (r->bottom, base_y, 8);
   
}


главная фича здесь конечно в

 
Код:
GetTextExtentPoint32 (hdc, "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz", 52, &size);
base_x = (size.cx / 26 + 1) / 2;


ети две строчки нашел в сети

msdn:

Цитата:

For a dialog box that does not use the system font, the base units are the average width and height, in pixels, of the characters in the dialog's font. You can use the GetTextMetrics and GetTextExtentPoint32 functions to calculate these values for a selected font.



GetTextMetrics - ето еще понятно, но вот что скормить GetTextExtentPoint32 - ето была задача :)

Теперь, хоть я и непонимаю как, но оно работает.

Вопрос решен. Всем спасибо.

14
12 апреля 2010 года
Phodopus
3.3K / / 19.06.2008
Цитата: Bard
Вообщем на простом окне MapDialogRect() не работает.


Естественно. Но я специально дал ссылкой чтоб почитать описание к этой функции, а не то что бы ее сразу так использовать. А потом даже заострил на этом внимание.

Цитата: Bard

GetTextMetrics - ето еще понятно


а как насчет tmAveCharWidth?

282
13 апреля 2010 года
Bard
481 / / 26.02.2006
Цитата: Phodopus

а как насчет tmAveCharWidth?



Та никак.

[FONT="Courier New"]tmAveCharWidth[/FONT] обычно меньше чем [FONT="Courier New"](size.cx / 26 + 1) / 2[/FONT]

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог