WM_NOTIFY mit beliebiger ControlID (aus Membervariable)?



  • Hallo!

    Ich habe in meiner Anwendung viele CFormviews mit CListCtrl.
    Aus dem Grund sind viele funktionen nur Copy & Paste und deswegen mache ich jetzt eine Basisklasse dafür. 🙂

    Jetzt habe ich mit den Notifies aber ein Problem.

    Bisher sah das so aus:
    [cpp]BEGIN_MESSAGE_MAP(COrteView, CFormView)
    //{{AFX_MSG_MAP(COrteView)
    ON_NOTIFY(HDN_ITEMCHANGED, 0, OnItemchangedLscOrte)
    ON_NOTIFY(LVN_KEYDOWN, IDC_LSC_ORTE, OnKeydownLscOrte)
    ON_NOTIFY(NM_CLICK, IDC_LSC_ORTE, OnClickLscOrte)
    ON_NOTIFY(LVN_DELETEITEM, IDC_LSC_ORTE, OnDeleteitemLscOrte)
    //}}AFX_MSG_MAP
    END_MESSAGE_MAP()
    [/cpp]
    Und das in JEDEM View. Deswegen wollte ich das so machen:
    [cpp]BEGIN_MESSAGE_MAP(CBasisLscView, CBasisView)
    //{{AFX_MSG_MAP(CBasisLscView)
    ON_NOTIFY(HDN_ITEMCHANGED, 0, OnItemchangedLsc) // Der funktioniert!
    ON_NOTIFY(LVN_KEYDOWN, m_nLscID, OnKeydownLsc) // Und der Rest nicht mehr
    ON_NOTIFY(NM_CLICK, m_nLscID, OnClickLsc)
    ON_NOTIFY(LVN_DELETEITEM, m_nLscID, OnDeleteitemLsc)
    //}}AFX_MSG_MAP
    END_MESSAGE_MAP()
    [/cpp]
    Und nun bekomme ich die folgenden Fehlermeldungen:

    D:\Realisierung\Views\Basis\BasisLscView.cpp(44) : error C2440: 'type cast' : 'unsigned int CBasisLscView::' kann nicht in 'unsigned short' konvertiert werden
    Diese Konvertierung ist eine gueltige Standardkonvertierung, die implizit oder mit dem static_cast-Operator oder mit einer Typumwandlung im C- oder Funktionsformat durchgefuehrt wird
    D:\Realisierung\Views\Basis\BasisLscView.cpp(44) : error C2440: 'type cast' : 'unsigned int CBasisLscView::
    ' kann nicht in 'unsigned short' konvertiert werden
    Diese Konvertierung ist eine gueltige Standardkonvertierung, die implizit oder mit dem static_cast-Operator oder mit einer Typumwandlung im C- oder Funktionsformat durchgefuehrt wird
    D:\Realisierung\Views\Basis\BasisLscView.cpp(44) : error C2440: 'initializing' : 'void (__thiscall CCmdTarget::)(void)' kann nicht in 'unsigned int' konvertiert werden
    Diese Konvertierung ist eine gueltige Standardkonvertierung, die implizit oder mit dem static_cast-Operator oder mit einer Typumwandlung im C- oder Funktionsformat durchgefuehrt wird
    D:\Realisierung\Views\Basis\BasisLscView.cpp(45) : error C2440: 'type cast' : 'unsigned int CBasisLscView::
    ' kann nicht in 'unsigned short' konvertiert werden
    Diese Konvertierung ist eine gueltige Standardkonvertierung, die implizit oder mit dem static_cast-Operator oder mit einer Typumwandlung im C- oder Funktionsformat durchgefuehrt wird
    D:\Realisierung\Views\Basis\BasisLscView.cpp(45) : error C2440: 'type cast' : 'unsigned int CBasisLscView::' kann nicht in 'unsigned short' konvertiert werden
    Diese Konvertierung ist eine gueltige Standardkonvertierung, die implizit oder mit dem static_cast-Operator oder mit einer Typumwandlung im C- oder Funktionsformat durchgefuehrt wird
    D:\Realisierung\Views\Basis\BasisLscView.cpp(45) : error C2440: 'initializing' : 'void (__thiscall CCmdTarget::
    )(void)' kann nicht in 'unsigned int' konvertiert werden
    Diese Konvertierung ist eine gueltige Standardkonvertierung, die implizit oder mit dem static_cast-Operator oder mit einer Typumwandlung im C- oder Funktionsformat durchgefuehrt wird
    D:\Realisierung\Views\Basis\BasisLscView.cpp(46) : error C2440: 'type cast' : 'unsigned int CBasisLscView::' kann nicht in 'unsigned short' konvertiert werden
    Diese Konvertierung ist eine gueltige Standardkonvertierung, die implizit oder mit dem static_cast-Operator oder mit einer Typumwandlung im C- oder Funktionsformat durchgefuehrt wird
    D:\Realisierung\Views\Basis\BasisLscView.cpp(46) : error C2440: 'type cast' : 'unsigned int CBasisLscView::
    ' kann nicht in 'unsigned short' konvertiert werden
    Diese Konvertierung ist eine gueltige Standardkonvertierung, die implizit oder mit dem static_cast-Operator oder mit einer Typumwandlung im C- oder Funktionsformat durchgefuehrt wird
    D:\Realisierung\Views\Basis\BasisLscView.cpp(46) : error C2440: 'initializing' : 'void (__thiscall CCmdTarget::*)(void)' kann nicht in 'unsigned int' konvertiert werden
    Diese Konvertierung ist eine gueltige Standardkonvertierung, die implizit oder mit dem static_cast-Operator oder mit einer Typumwandlung im C- oder Funktionsformat durchgefuehrt wird
    Fehler beim Ausführen von cl.exe.

    In der MSDN habe ich nichts hilfreiches gefunden und hartes Casten geht auch nicht. 😞
    Geht sowas nicht oder muss ich das anders machen?

    Was meint der überhaupt mit: 'unsigned int CBasisLscView::*'? 😕

    Bitte helft mir auf die Sprünge 😞



  • Schieb!

    Habe ich es schlecht beschrieben oder geht es nicht?



  • Hat sich erledigt, habe wieder was neues gelernt und deswegen geht das nicht, was ich vorhatte. 😞

    Muss ich die MessageMap doch für jede abgeleitete Klasse kopieren - so ein Blödsinn...


Anmelden zum Antworten