2016-04-26 4 views
0

Ich habe einen Dialog, CFormView, die einige Tasten und ein Panel hält die TabControl, Radiobuttons, Texteingabefelder usw.Get-Controller, die innerhalb CWnd Fokus hat

Also auf meiner Platte, die CWnd hält, ich meine Eingabefelder wie folgt erstellen:

pEdit = new CEdit(); 
pEdit->CreateEx(WS_EX_CLIENTEDGE, _T("EDIT"), NULL, WS_CHILD | WS_VISIBLE | WS_TABSTOP | nAttrMultiline | m_clRect, pclPanel, iID) 

Wo m_clRect ein CRect ist, pclPanel ist mein CWnd und iID ist nur die Controller-ID.

Ich möchte meine CEdit mit Text füllen, wenn eine Schaltfläche geklickt wird, aber irgendwie kann ich nicht den Controller, der Fokus hat.

Mein erster Versuch war, GetFocus() zu nennen, es in eine zu werfen und den Text hinzuzufügen, aber das ändert natürlich nur den Text auf meiner Taste.

Zweiter Versuch war zu prüfen, WM_SETFOCUS mit ON_WM_SETFOCUS() und behalten Sie die vorherige wnd und umwandeln und fügen Sie Text, aber das ändert nur den Text in meinem Dialogfeld.

Dritter Versuch war, dies zu meinem CWnd zu bewegen, aber soweit ich sehen kann, WM_SETFOCUS wird nie aufgerufen.

Edit:

Versuchte ON_WM_ACTIVATE mit ::OnActivate(UINT nState, CWnd* pWndOther, BOOL bMinimized) in meinem CWnd. Aber das wird auch nicht genannt.

Jeder hat eine Idee, was als nächstes zu versuchen?

+0

pEdit-> SetWindowText ... GetFocus ruft nur das Feld ab, das den Fokus hat. In so einem Fall die Schaltfläche. Es ist also nicht hilfreich – xMRi

+0

Ist das CEdit das einzige in Ihrem Fenster? Wenn ja, warum nicht einfach diesen Zeiger als Mitglied behalten und dann 'SetWindowText()' aufrufen, wenn auf die Schaltfläche geklickt wird? – Andy

+0

Das CEdit ist nicht das einzige auf dem Bildschirm, das Panel hält etwa 5-10. Aber ich habe eine Lösung für mein Problem gefunden. Ich weiß nicht, ob es für irgendjemanden anders ist. Aber in OnCommand kann ich nach dem EN_SETFOCUS suchen und meine ID von wParam bekommen und den Controller von meiner ID bekommen. – Mangs

Antwort

0

Sie haben sich selbst geantwortet. Der richtige Weg, es zu tun ist: auf die Funktion, die die

ON_COMMAND(...) 

jeder Taste Anruf

pEdit->SetWindowText(_T("text"));. 

GetFocus() falsch behandelt, weil sie auf die Schaltfläche zurück, als wenn Sie es angeklickt, Sie gerade fertig, um den Fokus darauf zu legen. Sie können die Bearbeitung erhalten

CEdit* pEdit= (CEdit*) GetDlgItem(ID_OF_EDIT); 

mit dem ID_OF_EDIT der Wert Sie CreateEx als iId Parameter übergeben.

Verwandte Themen