jak ograniczyć strukturą RECT wpisywanie tekstu funkcją DrawText() ?

0

Witajcie!
Ma sobie kontrolkę (listę). Po wywołaniu WM_PAINT

void LIST::Proc_WM_PAINT(WPARAM wParam, LPARAM lParam){
    PAINTSTRUCT ps;
    HDC hdc = BeginPaint(cWindow->Window(), &ps);

    BitBlt(hdc, 0, 0, cWindow->GetWidth(), cWindow->GetHeight(), hDC, cWindow->GetWidth()*sList.iCheck, 0, SRCCOPY);
    f_ElementDraw(hdc);

    EndPaint(cWindow->Window(), &ps);
} 

przechodzimy do funkcji rysującej poszczególne elementy, przekazując uchwyt do kontekstu całej kontrolki.
W tejże funkcji najpierw jest rysowane tło elementu, następnie przechodzimy do funkcji rysującej dodatki np. tekst.
Wartościami jakimi dysponuję m.in. to:
a) Który element rysujemy i jakie są jego atrybuty
b) pozycja X i Y określonego elementu
c) szerokość i wysokość elementu
d) ile przyciąć element od góry

Przycinanie bitmap idzie wzorowo, lecz tekstu już nie bardzo. Jest on wyświetlany poza obszar {x, y, x+width, y+height). Powodem jest pewnie to, że napis jest dłuższy i chce się napisać cały, skoro ma miejsce i nikt mu tego nie zabronił... :(
Tutaj screen jak to mniej więcej wygląda:
ba5839b4ec.png
Ktoś ma pomysł jak można zabronić funkcji DrawTekst rysować poza regionem {x, y, x+width, y+height) ?

EDIT:
Udało mi się przyciąć tekst w poziomie, lecz w pionie jest o tyle gorzej, że muszę wyświetlić np. dolną część tekstu.
{{Image:74391042c5.png}}
Póki co, używam:

void ListElementDraw( HWND hwnd, HDC *hDC, int x, int y, int width, int height, int yCut, class LIST *wsk, struct sLISTEL *myListEl ){
    if(myListEl->iCheck == LIST_TYPE_ACTIVE || myListEl->iCheck == LIST_TYPE_CLICKED || myListEl->iCheck == LIST_TYPE_SPECIAL1 || myListEl->iCheck == LIST_TYPE_SPECIAL2)
     myTEXT->TEXT_DrawText(*hDC, "Times New Roman 16", (char*)myListEl->vData, x, y, width, height, RGB(155, 155, 155), TA_LEFT);
    if(myListEl->iCheck == LIST_TYPE_MACTIVE || myListEl->iCheck == LIST_TYPE_MCLICKED || myListEl->iCheck == LIST_TYPE_MSPECIAL1 || myListEl->iCheck == LIST_TYPE_MSPECIAL2)
     myTEXT->TEXT_DrawText(*hDC, "Times New Roman 16", (char*)myListEl->vData, x, y, width, height, RGB(255, 255, 255), TA_LEFT);

} 
void cTEXT::TEXT_DrawText(HDC &hdc, string strFontID, const char chText[], int x, int y, int width, int height, COLORREF crTextColor, unsigned int TextAlign){
    FONT_SetFont(strFontID, hdc);
    SetTextColor(hdc, crTextColor);
    SetBkMode(hdc,0);
    SetTextAlign(hdc, TextAlign); //DT_MODIFYSTRING
    RECT r = {x, y, width, height};
    DrawText(hdc, chText, strlen(chText), &r, DT_MODIFYSTRING);
} 

1 użytkowników online, w tym zalogowanych: 0, gości: 1