Finde Parent nicht



  • Habe eine Dialog-Applikation (CMyAppDlg), da befindet sich ein Zeichenbereich drauf (Picture Control, IDC_GRPH_AREA_ONE). Die Zeichenroutinen sind in einer anderen Klasse (CGraphic). Dort möchte ich auch diesen Bereich initialisieren, aber irgendwie versteht er mich nicht:

    class CGraphic
    {	
    	public:
    		CGraphic ();
    		~CGraphic ();
    		void InitInterface ();
    		CWnd* m_hDH;
    };
    
    void CGraphic::InitInterface ()
    {
        m_hDH = GetDlgItem(IDC_GRPH_AREA_ONE);
        // error C2660: 'GetDlgItem': Funktion akzeptiert keine 1 Argumente
    }
    

    Wieso kennt er diese Funktion nicht? Die Funktion CWnd:GetDlgItem hat nur 1 Parameter. Muss ich den Handle etwa aus dem Hauptprogram übergeben? Oder funktioniert es auch anders?

    zwette



  • Eigentlich gibst du dir die Antwort schon selber, musst nur genau hingucken.
    Ich helfe mal:

    class CGraphic
    {
    

    Die Klasse CGraphic hat keine Basisklasse.

    Die Funktion CWnd:GetDlgItem hat nur 1 Parameter.

    CGraphic hat aber nix mit CWnd zu tun, siehe erste Anmerkung.

    Erkannt? 🙂



  • Ja, jetzt wo Du es sagst... 😉

    Aber habe es mit Vererbung versucht, ist kein schöner Weg. Dann doch lieber übergeben...

    void CMyAppDlg::OnButtonClicked()
    {
        CGraphic* m_pGraphic = new CGraphic();
        CWnd* m_hWndGraphArea = GetDlgItem(IDC_GRPH_AREA_ONE);
        m_pGraphic->InitInterface(m_hWndGraphArea);
        ...
    }
    
    void CGraphic::InitInterface(CWnd* DH)
    {
        CClientDC dc(DH);
        LPRECT PaintRect = new RECT;
        DH->GetClientRect(PaintRect);
        ...
    }
    


  • So hätte ich es dir auch vorgeschlagen. 🙂

    Man könnte es noch als Member machen (wenn man es öfters braucht) und im Konstruktor übergeben.
    Aber so ist es auch schon schön.
    🙂


Anmelden zum Antworten