[ NomadSOulX @ 13.05.2004. 12:16 ] @
Neznam da li sam postavio pitanje u pravom delu formua (nadam se da ce mi moderatori oprostiti :))

Ovako:
Dosadano teperenje nekih controli zna poprolicno da izludi ljude (a ponajvise one koji to hoce da srede). Evo kako glasi kod:
Inicijalizacija:
Code:

hListView = CreateWindowEx(WS_EX_CLIENTEDGE,WC_LISTVIEW,"",
WS_VISIBLE | WS_CHILD | WS_BORDER | LVS_REPORT | LVS_SINGLESEL,
        iLeft,iTop,iWidth,iHeight,hParentWnd,(HMENU)IDListview,hInst,NULL);
if (hListView == NULL)
    return false;
ListView_SetExtendedListViewStyle(hListView,LVS_EX_FULLROWSELECT);
wpLast = (WNDPROC)SetWindowLong(hListView,GWL_WNDPROC,(LONG)ListViewAddProc);

Subclassovana ListView glavna funkcija:
Code:

LRESULT CALLBACK ListViewAddProc(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM lParam)
{
    switch (Msg)
    {
    case WM_ERASEBKGND:
        return 0;
        break;
    case WM_PAINT:
        {
            HDC hDc = GetDC(hWnd);
            RECT rtRect;
            GetClipBox(hDc,&rtRect);
            rtRect.top+=17; //da izostavim header
            FillRect(hDc,&rtRect, CreateSolidBrush(RGB(0,0,0)));
            ReleaseDC(hWnd,hDc);
        }
        break;
    }
    return CallWindowProc(wpLast,hWnd,Msg,wParam,lParam);
}

Problem je sledeci:
Flickering je ovako nestao (ne sasvim, ali je podnosljivo), ali su se pojavile neke anomalije koje ne mogu da objasnim. Kada promenim poziciju glavnog prozora tako da ode iza bordera desktopa i kada ga vratim, stavke listview-a (listview je u Report rezimu) nestanu sa prozora (?!?). Ali onog trenutka kada promenim velicinu prozora sve se vrati kako treba. Ista anomalija se desava i kada scrolujem listview pomocu horizontalnog klizaca u njegovom prozoru (isto se sve resava ponovnom promenom velicine glavnog prozora). Pomocu Spy++ sam pokusao da vidim da li se mozda slucajno ne salje neka poruka koji nisam obradio, ali nista nisam primetio sto bi moglo da bude. Video sam jedino da se salje NM_CUSTODRAW u obliku WM_NOTIFY. Da li je ovo poruka koju treba da obradim ili ima neka druga, ili nesto sasvim deseto sto nisam uradio...
Ako nesto znaci glavni prozor sadrzi parametar WS_CLIPCHILDREN, kako ne bi docrtavao deo prozora na kojem stoje kontrole.
Unapred hvala
[ hwfanatic @ 25.06.2004. 22:22 ] @
Jesi li uzeo u obzir da WM_PAINT poruka u jednom svom delu sadrži i tačne koordinate dela prozora koji je zaista potrebno osvežiti?