Witam,
jak w temacie. Rysuję trackbar'a. Kod:
case WM_NOTIFY:{
switch(((NMHDR*)lParam)->code){
case NM_CUSTOMDRAW:{
NMCUSTOMDRAW * nmc = (NMCUSTOMDRAW *)lParam;
if(nmc -> hdr.hwndFrom){
switch(nmc -> dwDrawStage){
// case CDDS_PREERASE:
case CDDS_PREPAINT:{
RECT r;
GetClientRect(GetDlgItem(hwnd, IDC_TRANSP), &r);
Graphics graph(nmc -> hdc);
LinearGradientBrush linGrBrush(
Point(0, 0),
Point(0, r.bottom),
gClrTlo2,
gClrTlo1);
graph.FillRectangle(&linGrBrush, 0, 0, r.right, r.bottom);
SetWindowLong(hwnd, DWL_MSGRESULT, (LONG)CDRF_NOTIFYITEMDRAW);
}return CDRF_NOTIFYITEMDRAW;
case CDDS_ITEMPREPAINT:{
switch(nmc -> dwItemSpec){
case TBCD_CHANNEL:{
FillRect(nmc -> hdc, &(nmc -> rc), gbETlo);
}break;
case TBCD_THUMB:{
Rectangle(nmc -> hdc, nmc -> rc.left, nmc -> rc.top, nmc -> rc.right, nmc -> rc.bottom);
}break;
}
SetWindowLong(hwnd, DWL_MSGRESULT, (LONG)CDRF_SKIPDEFAULT);
}return CDRF_SKIPDEFAULT;
default:
SetWindowLong(hwnd, DWL_MSGRESULT, (LONG)CDRF_SKIPDEFAULT);
return CDRF_SKIPDEFAULT;
}
}
}break; // customdraw
}
}return 0;
Pytania: dlaczego bez SetWindowLong(... nie działa?
I podczas odswieżania okna rodzica zamalowywany jest SUWAK i PASEK. Muszę kliknąć i ruszyć, żeby się pokazał. Gdzie powinno byc malowanie tła Trackbara? W PREPAINTcie nie może? Nie powinno?
Hmm, problem - zamalowywanie po odświeżaniu - wystepuje dlatego, że okno ma ustawioną przezroczystość przez SetLayeredWindowsAttributes. Gdy usunę ustawianie przezroczystości problem znika. Czy ktoś z Was się spotkał z tym problemem?