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:
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.
}}
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);
}