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

Ваш аккаунт

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

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

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

Прокрутка текста относительно точки

32K
28 ноября 2007 года
AVS
3 / / 28.11.2007
Здравствуйте!

Мне надо сделать так, чтобы некий текст прокрутился относительно некой точки компонента Image на 360 градусов. Я не могу понять как это реализовать по той причине, что функция TextOut не задает угла поворота или конечкой точки. Помогите реализовать это. Спасибо.
1.9K
28 ноября 2007 года
max_dark
256 / / 11.11.2005
Вот пример из Win32SDK
Цитата:
You can rotate TrueType fonts at any angle. This is useful for labeling charts and other illustrations. The following example rotates a string in 10-degree increments around the center of the client area by changing the value of the lfEscapement and lfOrientation members of the LOGFONT structure used to create the font.
Код:
RECT rc;  
int angle;
HFONT hfnt, hfntPrev;
LPSTR lpszRotate = "String to be rotated.";
 
/* Allocate memory for a LOGFONT structure. */
 
PLOGFONT plf = (PLOGFONT) LocalAlloc(LPTR, sizeof(LOGFONT));
 
 
/* Specify a font typeface name and weight. */
 
lstrcpy(plf->lfFaceName, "Arial");
plf->lfWeight = FW_NORMAL;
 
/* Retrieve the client-rectangle dimensions. */
 
GetClientRect(hwnd, &rc);
 
/*
 * Set the background mode to transparent for the

 * text-output operation.
 */
 
SetBkMode(hdc, TRANSPARENT);
 
/*
 * Draw the string 36 times, rotating 10 degrees
 * counter-clockwise each time.
 */
 
for (angle = 0; angle < 3600; angle += 100) {
    plf->lfEscapement = angle;
    hfnt = CreateFontIndirect(plf);
    hfntPrev = SelectObject(hdc, hfnt);
    TextOut(hdc, rc.right / 2, rc.bottom / 2,
        lpszRotate, lstrlen(lpszRotate));
    SelectObject(hdc, hfntPrev);
    DeleteObject(hfnt);

}
 
/* Reset the background mode to its default. */
 
SetBkMode(hdc, OPAQUE);
 
/* Free the memory allocated for the LOGFONT structure. */
 
LocalFree((LOCALHANDLE) plf);

32K
28 ноября 2007 года
AVS
3 / / 28.11.2007
Компилятор выдает мне ошибки:

[C++ Error] Unit1.cpp(37): E2451 Undefined symbol 'hwnd'
[C++ Error] Unit1.cpp(37): E2227 Extra parameter in call to _fastcall TCustomForm::GetClientRect()
[C++ Error] Unit1.cpp(45): E2451 Undefined symbol 'hdc'

В чем проблема?
1.9K
28 ноября 2007 года
max_dark
256 / / 11.11.2005
Цитата:

[C++ Error] Unit1.cpp(37): E2451 Undefined symbol 'hwnd'
[C++ Error] Unit1.cpp(37): E2227 Extra parameter in call to _fastcall TCustomForm::GetClientRect()
[C++ Error] Unit1.cpp(45): E2451 Undefined symbol 'hdc'


Ошибка: Неопределен символ hwnd
Ошибка: Лишние параметры в вызове TCustomForm::GetClientRect()
Ошибка: Неопределен символ hdc
hwnd можно заменить на Handle - это хендл окна
hdc - на Canvas->Handle - это хендл контекста рисования
А перед GetClientRect(hwnd, &rc) поставь ::

 
Код:
::GetClientRect(hwnd, &rc);

Это сменит область видимости на глобальную
P.S.: Проверить свои предположения не могу за отссутствием Borland C++ Builder
246
28 ноября 2007 года
GIZMO
1.8K / / 30.07.2004
Цитата: AVS

Мне надо сделать так, чтобы некий текст прокрутился относительно некой точки компонента Image на 360 градусов.


Здесь

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