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.