Еще раз про сабклассинг...
От: KaSA  
Дата: 05.02.02 08:02
Оценка:
Блин, думал все, разобрался...ан нет. Обработчик WM_DRAWITEM, который в
COwnerDraw, не срабатывает и все тут.
Вот кусок кода:

это диалог...
class CLogviewDlg : public CDialogImpl<CLogviewDlg>  ,
        CWinDataExchange<CLogviewDlg>,
        CDialogResize<CLogviewDlg>
{
public:
    CLogviewDlg::CLogviewDlg();
    
    enum { IDD = IDD_LOGVIEW_DIALOG };

    BEGIN_MSG_MAP_EX(CLogviewDlg)
        MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
        COMMAND_ID_HANDLER(IDOK, OnCloseCmd)
        COMMAND_ID_HANDLER(IDCANCEL, OnCloseCmd)
        COMMAND_ID_HANDLER(IDC_AUTOUPDATE_CHECK, OnAutoUpdate)
        COMMAND_ID_HANDLER(IDC_UPDATE_BUTTON, OnUpdate)
        MSG_WM_SHOWWINDOW(OnShowWindow)
        MSG_WM_TIMER(OnTimer)
    END_MSG_MAP()

    BEGIN_DLGRESIZE_MAP(CLogviewDlg)
        DLGRESIZE_CONTROL(IDC_LOG_LIST, DLSZ_SIZE_X | DLSZ_SIZE_Y)
        DLGRESIZE_CONTROL(IDCANCEL, DLSZ_MOVE_X | DLSZ_MOVE_Y)
    END_DLGRESIZE_MAP()

    BEGIN_DDX_MAP(CLogviewDlg)
        DDX_CONTROL(IDC_LOG_LIST, clb)
    END_DDX_MAP()

    LRESULT OnInitDialog(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/);
    LRESULT OnAutoUpdate(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
    {
        CButton b(GetDlgItem(IDC_AUTOUPDATE_CHECK));
        if (b.GetCheck())
            SetTimer(1, 1000);
        else
            KillTimer(1);
        return 0;    
    }

    LRESULT OnUpdate(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
    {
        UpdateAppend();
        return 0;
    }

    void OnShowWindow(BOOL bShow, int nStatus){ if (bShow) Update(); }
    
    void OnTimer(UINT id, TIMERPROC* proc)
    {
        UpdateAppend();
    }

    LRESULT OnCloseCmd(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
    {
        ShowWindow(SW_HIDE);
        return 0;
    }

public:
    void SetLogPath(const char* lpath);
    void Update();
    void UpdateAppend();

private:
    char m_LogFile[MAX_PATH];
    CColorListBox clb;
    DWORD m_dwLastLogSize;



а это контрол...
class CColorListBox : public CWindowImpl<CColorListBox, CListBox> , 
        COwnerDraw<CColorListBox>        
                    
{
public:
    DECLARE_WND_SUPERCLASS(NULL, CListBox::GetWndClassName())

    BEGIN_MSG_MAP_EX(CColorListBox)
    CHAIN_MSG_MAP(COwnerDraw<CColorListBox>)
    END_MSG_MAP()


    void DrawItem(LPDRAWITEMSTRUCT lpdis)
    {
        ATLASSERT(false);
    }

};


Дык, вот, в DrawItem попасть не удается...почему?
Где тут ошибка? Помогите, кто знает!

Спасибо.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.