CListCtrl NM_CLICK kann man da an NM_MOUSE heran?



  • ON_NOTIFY(NM_CLICK, IDC_LIST1, OnClickList1)
    
    void CTest001Dlg::OnClickList1(NMHDR* pNMHDR, LRESULT* pResult) 
    {
        CString str;
        str.Format("Code: %i  IdFrom: %i  FensterFrom: %i", 
            pNMHDR->code, pNMHDR->idFrom, pNMHDR->hwndFrom);
    
        MessageBox(str);
    
        *pResult = 0;
    }
    

    Kann man über die Nachricht NM_CLICK an weitere Infos kommen außer an diese in NMHDR, z.B. an die NMMOUSE Struktur? Was kann man mit pResult anfangen außer auf 0 setzen?

    Auszug aus commctrl.h:

    typedef NMMOUSE NMCLICK;
    
    typedef struct tagNMMOUSE 
    {
        NMHDR   hdr;
        DWORD   dwItemSpec;
        DWORD   dwItemData;
        POINT   pt;
        DWORD   dwHitInfo; // any specifics about where on the item or control the mouse is
    } NMMOUSE, FAR* LPNMMOUSE;
    
    #define NM_FIRST                (0U-  0U)       // generic to all controls
    #define NM_LAST                 (0U- 99U)
    
    //====== Generic WM_NOTIFY notification codes =================================
    #define NM_OUTOFMEMORY          (NM_FIRST-1)
    #define NM_CLICK                (NM_FIRST-2)    // uses NMCLICK struct
    #define NM_DBLCLK               (NM_FIRST-3)
    #define NM_RETURN               (NM_FIRST-4)
    #define NM_RCLICK               (NM_FIRST-5)    // uses NMCLICK struct
    #define NM_RDBLCLK              (NM_FIRST-6)
    #define NM_SETFOCUS             (NM_FIRST-7)
    #define NM_KILLFOCUS            (NM_FIRST-8)
    #if (_WIN32_IE >= 0x0300)
    #define NM_CUSTOMDRAW           (NM_FIRST-12)
    #define NM_HOVER                (NM_FIRST-13)
    #endif
    #if (_WIN32_IE >= 0x0400)
    #define NM_NCHITTEST            (NM_FIRST-14)   // uses NMMOUSE struct
    #define NM_KEYDOWN              (NM_FIRST-15)   // uses NMKEY struct
    #define NM_RELEASEDCAPTURE      (NM_FIRST-16)
    #define NM_SETCURSOR            (NM_FIRST-17)   // uses NMMOUSE struct
    #define NM_CHAR                 (NM_FIRST-18)   // uses NMCHAR struct
    #endif
    
    #ifndef CCSIZEOF_STRUCT
    #define CCSIZEOF_STRUCT(structname, member)  (((int)((LPBYTE)(&((structname*)0)->member) - ((LPBYTE)((structname*)0)))) + sizeof(((structname*)0)->member))
    #endif
    
    #if (_WIN32_IE >= 0x0400)
    //====== Generic WM_NOTIFY notification structures ============================
    

    Wie komme ich an das pt in NM_MOUSE?


  • Mod

    Durch einen cast
    NMCLICK *pnmClick = (NMCLICK*)pNMHDR;
    Aber Du kommst auch per GetMessagePos an die Cursor Position der Maus ran.



  • Befindet sich NMHDR und NMCLICK an der gleichen Adresse?



  • BOOL CLVCDlg::OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult)
    {
    if( wParam == IDC_LIST1 && ((NMHDR*)lParam)->code == NM_CLICK)
    {
    static int i = 0;
    i++;
    CString str;
    str.Format("%i %i",((NMCLICK*)lParam)->pt.x, ((NMCLICK*)lParam)->pt.y);
    m_List2.InsertItem(i,str);
    }

    return CDialog::OnNotify(wParam, lParam, pResult);
    }

    Ergibt 0 und 1031 egal, wohin in IDC_LIST1 geklickt wird. Warum?
    ...->dwHitInfo funktioniert z.B.



  • BOOL CLVCDlg::OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult)
    {
    if( wParam == IDC_LIST1 && ((NMHDR*)lParam)->code == NM_CLICK)
    {
    static int i = 0;
    i++;
    CString str;
    str.Format("%i %i",((NMCLICK*)lParam)->pt.x, ((NMCLICK*)lParam)->pt.y);
    m_List2.InsertItem(i,str);
    }

    return CDialog::OnNotify(wParam, lParam, pResult);
    }

    Ergibt 0 und 1031 egal, wohin in IDC_LIST1 geklickt wird. Warum?
    ...->dwHitInfo funktioniert z.B.



  • ..



  • void CListCtrlDemoDlg::OnClickListCtrl(NMHDR* pNMHDR, LRESULT* pResult) 
    {	
    	CPoint point;
    	::GetCursorPos(&point);
    	CString str;
    	str.Format(_T("OnClickListCtrl.  Cursor position is x: %d, y: %d"), point.x, point.y);
    	m_Log.AppendString(str);
    
    	*pResult = 0;
    }
    

    Das ist die Variante mit

    ::GetCursorPos(...)
    

    Hier allerdings nicht auf das Listenelement, sondern auf den Dialog bezogen,
    aus: http://www.codeproject.com/listctrl/listctrldemo.asp


Anmelden zum Antworten