CUSTOMDRAW для header'a

Тема в разделе "WASM.WIN32", создана пользователем cresta, 8 апр 2005.

  1. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    Доброго времени суток всем.

    Требуется помощь с хидером листвью. В режиме CUSTOMDRAW не хочет нормально функционировать.

    Получаю в WndProc WM_NOTIFY->NM_CUSTOMDRAW для header'a листвью. Передаю (NMCUSTOMDRAW*) lParam в проц. рисования. Тут 2 проблемы:

    1. Рисую колонки хидера, вывожу текст, но не по стандартным для данной ситуации состояниям поля NMCUSTOMDRAW->uItemState (CDIS_HOT, CDIS_FOCUS, CDIS_DEFAULT), а по uItemState = 512(WM_MOUSEMOVE) и uItemState(WM_LBUTTONDOWN) = 513. А те uItemState, которые должны были быть - их нет :dntknw: Соответственно, не могу отследить, когда мышь покидает пределы хидера. Почему в uItemState такие константы?

    2. Колонки ресайзятся все, кроме второй... Колонок 5 шт.

    Тоже непонятно, чем вторая отличается от остальных?



    Тут процедура рисования:


    Код (Text):
    1. int HeaderDrawProc(LPARAM lParam){
    2.     NMCUSTOMDRAW*     lpNMCustDraw;
    3.     HBRUSH            hBrushFill, hBrushFrame;
    4.     char              buffer[32];
    5.    
    6.     lpNMCustDraw = (NMCUSTOMDRAW*) lParam;
    7.     switch(lpNMCustDraw->dwDrawStage) {
    8.         case CDDS_PREPAINT :
    9.             return CDRF_NOTIFYITEMDRAW;
    10.         case CDDS_ITEMPREPAINT:
    11.             if (lpNMCustDraw->uItemState == 512) {
    12.                 hBrushFill= CreateSolidBrush(0x0000cc00);
    13.                 hBrushFrame= CreateSolidBrush(0x00cc0000);
    14.                 }
    15.             else if (lpNMCustDraw->uItemState == 513) {
    16.                 hBrushFrame = CreateSolidBrush(0x0000cc00);
    17.                 hBrushFill = CreateSolidBrush(0x00cc0000);
    18.                 }
    19.             SelectObject(lpNMCustDraw->hdc, hFont);
    20.             SetTextColor(lpNMCustDraw->hdc, 0x000000ff);
    21.             SetBkMode(lpNMCustDraw->hdc,TRANSPARENT);
    22.             LoadString(hInstance,lpNMCustDraw->dwItemSpec+1100,buffer,32);
    23.             FillRect(lpNMCustDraw->hdc, &(lpNMCustDraw->rc), hBrushFill);
    24.             FrameRect(lpNMCustDraw->hdc, &(lpNMCustDraw->rc), hBrushFrame);
    25.             DrawText(lpNMCustDraw->hdc, buffer, -1, &lpNMCustDraw->rc, 0x65);
    26.             DeleteObject(hBrushFrame);
    27.             DeleteObject(hBrushFill);
    28.             return CDRF_SKIPDEFAULT;
    29.         }
    30.     return 0;
    31. }




    Где тут капкан может быть, подскажите.

    P.S.

    На всякий случай - родитель хидера - virtual listview.