WWW.ИСХОДНИКИ.РУ cpp.sources.ru
java.sources.ru web.sources.ru soft.sources.ru
jdbc.sources.ru asp.sources.ru api.sources.ru

  Форум на исходниках
  C / C++ / Visual C++
  text resize

СПРОСИТЬ  ОТВЕТИТЬ
профайл | регистрация | faq

Автор Тема:   text resize
sudv опубликован 21-08-2001 15:32 MSK   Click Here to See the Profile for sudv   Click Here to Email sudv  
Скажите каким образом можно масштабировать текст в окне?
Этот код при изменении размера окна должен изменять размер содержимого. Если добавить графические объекты(линии,прямоугольники и т.д.), то они ресайзятся. А текст нет. Почему?
case WM_SIZE:
xClientView=LOWORD(lParam);
yClientView=HIWORD(lParam);


hdc=BeginPaint(hWnd,&ps);
SetMapMode(hdc,MM_ISOTROPIC);
SetWindowExtEx(hdc,500,500,NULL);
SetViewportExtEx(hdc,xClientView,yClientView,NULL);
SetViewportOrgEx(hdc,0,0,NULL);
myFont=CreateFont(12,12,0,0,FW_NORMAL,
TRUE,TRUE,FALSE,
DEFAULT_CHARSET,
OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS,
DEFAULT_QUALITY,
FF_DONTCARE,
"Times New Roman");
oldFont=SelectObject(hdc,&myFont);
TextOut(hdc,100,100,"ABCDE",5));
SelectObject(hdc,oldFont);
DeleteObject(myFont);
ValidateRect(hWnd,NULL);
EndPaint(hWnd,&ps);

Kosha опубликован 21-08-2001 15:39 MSK     Click Here to See the Profile for Kosha  Click Here to Email Kosha     
Потому что делаешь вывод через TextOut.
Эта функция по определению Resize не поддерживает (т.к. самая простая).
Вроде было что-то похожее в DrawText, но я не уверен.

В любом случае, у меня сильные сомнения, что Windows сможет заресайзить текст, у которого явно указан шрифт и размер этого шрифта...
Попробуй подгонять шрифт.

talex опубликован 21-08-2001 15:49 MSK     Click Here to See the Profile for talex  Click Here to Email talex     
по-моему и не получится, я думаю причина в том что буквы, это отдельные картинки, т.е. текст представляет собой их набор, а не одно целое, а т.к windows может менять масштаб отдельного куска изображ, то следовательно
отдельные быквы не сможет, наверное придется соответственно изменениям менять font изображаемого текста.
P.S.но я не уверен, может и есть способ, но он будет довольно таки сложным....
sudv опубликован 21-08-2001 15:52 MSK     Click Here to See the Profile for sudv  Click Here to Email sudv     
Я и не хочу чтобы текст ресайзился функцией TextOut. Вариант с подбором разного размера шрифтов не подходит. Кстати в тексте программы надо добавить

break;
сase WM_PAINT:

перед hdc=BeginPaint(hWnd,&ps);

Kosha опубликован 22-08-2001 02:23 MSK     Click Here to See the Profile for Kosha  Click Here to Email Kosha     
Хорошо. Ну как хочешь:

Делаешь memory DC (например, через
CreateCompatibleDC) размера, в который выводит TextOut.

Потом делаешь BitBlt на сам экран с ресайзом по нужному RECT'у. (почитай MSDыN)

Но качество будет - <beep>...

Лучше выводить, например, шрифтом эдак 70-80, потом ресайзить поменьше. Качество все равно <beep>, но уже лучше. Только блиттинг с таких больших memDC тормозить будет
(20-30fps)

Можешь использовать DirectX - тормозить не будет, можно для повышения качества использовать Antialising...

А ЕЩЕ ЛУЧШЕ - не <eBEEp> мозги и возьми какой-нить контрол, который все это делает.

ЗЫ: Почитал MSDN, чего-то не нашел даже намека на то, что текст можно ресайзить.
Просвети глупого, где ты это нарыл?

sudv опубликован 22-08-2001 05:34 MSK     Click Here to See the Profile for sudv  Click Here to Email sudv     
Нашел!
Шрифт должен выбираться этой строкой:
oldFont=SelectObject(hdc,myFont);
Сообщение об ошибке не выдавалось и мой шрифт не выбирался и винды писали в окне своим системным шрифтом, который не ресайзится. А теперь все ОК!
Мне это нужно для печати и предварительного просмотра отчетов.
Кстати изменение размеров происходит за счет вот этих строк:

SetMapMode(hdc,MM_ISOTROPIC);
SetWindowExtEx(hdc,400,400,NULL);
SetViewportExtEx(hdc,xClientView,yClientView,NULL);

Все просто. Масштаб зависит от соотношения величин в третьей и второй строке.

СПРОСИТЬ  ОТВЕТИТЬ
Перейти:


E-mail | WWW.ИСХОДНИКИ.RU

Powered by: Ultimate Bulletin Board, Freeware Version 5.10a
Purchase our Licensed Version- which adds many more features!
© Infopop Corporation (formerly Madrona Park, Inc.), 1998 - 2000.