Win32 DrawText Stange Aligment проблема

Использование Win7 x64 c ++ с MSVC2010 pro.

Я заметил действительно странную ошибку при использовании Win32 DrawText для рисования текста для пользовательского элемента управления. Я уверен, что это довольно стандартная вещь. Я видел сообщение о чем-то похожем, и решение было использовать один из вызовов TextOut, но это не решило мою проблему.

У меня есть подкласс «Static», используя SetWindowSubClass, и я передаю сообщение wm_paint как:

case WM_PAINT:
{
RECT rect;
PAINTSTRUCT ps;

HDC hdc = BeginPain(hWnd,&ps);

// Create a back buffer to draw to
HDC hdcBack = CreateCompatibleDC(hdc);
GetClientRect(hWnd,&rect);
HBITMAP hbmBackbuffer= CreateCompatibleBitmap(hdc,rect.right,rect.bottom);

size_t iLength = 0;
StringCchLength(LCDText,240,&Length);

SelectObject(hdcBack,hbmBackbuffer);

// Draw a black background to clear previous text
SelectObject(hdcBack,GetSysColour(1)); // Black
Rectangle(hdcBack,rect.left,rect.top,rect.right,rect.bottom);

// Set the font, tranparency and text colour
SelectObject(hdcBack,LCDFont);
SetBkMode(hdcBack,TRANSPARENT);
SetTextColor(hdcBack,0x0000ff00);
DrawText(hdcBack,LCDText,(int)iLength,&rect,DT_LEFT);

// display
BitBlt(hdc,0,0,rect.right,rect.bottom,hdcBack,0,0,SRCCOPY);

// cleanup
DeleteObject(hbmBackbuffer);
DeleteDC(hdcBack);

EndPaint(hWnd,&ps);

break;
}

Это на самом деле работает очень хорошо. Проблема в том, что метка может отображать 3 строки по 40 символов, и после 27 символов в каждой строке следующие символы до конца этой строки на 1 или 2 пикселя выше экрана. Это не сразу видно, но как только вы заметите это, это как бы привлекает ваше внимание.

У кого-нибудь есть идеи или опыт с этим?

PS — Я набрал код вручную на форуме, так что могут быть некоторые глупые опечатки, но реальный код работает правильно, кроме проблемы выравнивания.

С уважением
Дэйв.

0

Решение

Задача ещё не решена.

Другие решения


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector