Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > WinAPI текст под наклоном


Автор: m9yt 4.9.2010, 18:50
Всем привет)
На сайте изучаю WinApi, там возникает куча вопросов. Вот один из них:
-Выбор шрифта текста и поворот
Код

static LOGFONT lf;
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) 
{
        HDC hdc, hmdc;
    PAINTSTRUCT ps;
    HFONT hFont;
    lf.lfCharSet=DEFAULT_CHARSET;
    lf.lfPitchAndFamily=DEFAULT_PITCH;
    lf.lfQuality=CLEARTYPE_QUALITY;
    lf.lfHeight = 40;
    lf.lfWidth  = 20;
    lf.lfWeight = 40;
    lf.lfEscapement=GM_COMPATIBLE;
    lstrcpy( (LPWSTR)lf.lfFaceName, L"Comic Sans MS");   //Потратил кучу времени, чтобы строка прошла через компилятор. Везде пишется такой вариант 
                                                                                                 //strcpy( lf.lfFaceName, "Comic Sans MS"), но 
                                                                                                 //ошибка с преобразование типов
    hFont=CreateFontIndirect(&lf);
        hdc=BeginPaint(hwnd, &ps);
            SelectObject(hdc, hFont);
            SetTextColor(hdc, RGB(44, 41, 11));
            SetBkColor(hdc, RGB(255, 0, 0));
            SetBkMode(hdc, TRANSPARENT);
            XFORM xform;
            xform.eM11=1.0;
            xform.eM12=2.0;
            xform.eM21=15.0;
            xform.eM22=1.0;
            xform.eDx=1.0;
            xform.eDx=1.0;        
            xform.eDy=1.0;
            SetWorldTransform( hdc, &xform);
            TextOut(hdc, 500, 100, L"Привет!!!!!!1", 13);
            DeleteObject(hFont);
            EndPaint( hwnd, & ps);
            break;
        default:
            return DefWindowProc(hwnd,message,wParam,lParam);
        }
} 

Автор: Dem_max 5.9.2010, 11:44
и в чем проблема то ?

Автор: ASMatic 6.9.2010, 05:19
Цитата(m9yt @  4.9.2010,  16:50 Найти цитируемый пост)
 L"Comic Sans MS"

L"Comic Sans MS" - значит что юзаем юникод
TEXT"Comic Sans MS" - анси

strcpy() - сравнивает анси строки
wcscpy() - юникод

и также с 
MessageBoxA( TEXT"Comic Sans MS" ) - ansi
MessageBoxW( L"Comic Sans MS" ) - unicode

Когда ты пишешь MessageBox(), студия уже по настройкам смотрит какую из меседж боксов вписать в импорт..

и так повсюду)
для повышения бістродействия приложения советую юзать юникод, т.к. практически все win32 апи в конечном итоге юникодные, т.е.

testapp.exe!MessageBoxA() -> User32.dll!MultibyteToWideChar() -> user32.dll!MessageBoxW()

но памяти на строки в два раза больше надоsmile

Автор: ИванМ 6.9.2010, 11:50
ASMatic, вы путаете. TEXT - это универсальный макрос, который работает как с ANSI так с Unicode, в зависимости настроек компилятора (define'ов)

Автор: ASMatic 6.9.2010, 19:00
ИванМ, 
да вы правы!
привычка) - по дефолту в студии анси стоит, вот и на тебе)
TEXT вообще никогда не юзаю на асмом деле,)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)