Datenabfrage nach verlassen des Feldes

thodtie

Mitglied
Hallo,

folgender Codeausschnitt (wichtig ist die letzte Methode)

Code:
// dlg1Dlg.cpp : Implementierungsdatei
 
//
 
#include "stdafx.h"
 
#include "dlg1.h"
 
#include "dlg1Dlg.h"
 
#include ".\dlg1dlg.h"
 
#ifdef _DEBUG
 
#definenew DEBUG_NEW
 
#endif
 
 
 
// Cdlg1Dlg Dialogfeld
 
 
 
 
 
Cdlg1Dlg::Cdlg1Dlg(CWnd* pParent /*=NULL*/)
 
: CDialog(Cdlg1Dlg::IDD, pParent)
 
 
 
{
 
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
 
}
 
void Cdlg1Dlg::DoDataExchange(CDataExchange* pDX)
 
{
 
CDialog::DoDataExchange(pDX);
 
DDX_Text(pDX,IDC_EDIT1,m_sEdit);
 
AfxMessageBox(m_sEdit);
 
}
 
BEGIN_MESSAGE_MAP(Cdlg1Dlg, CDialog)
 
ON_WM_PAINT()
 
ON_WM_QUERYDRAGICON()
 
//}}AFX_MSG_MAP
 
ON_EN_KILLFOCUS(IDC_EDIT1, OnEnKillfocusEdit1)
 
END_MESSAGE_MAP()
 
 
 
// Cdlg1Dlg Meldungshandler
 
BOOL Cdlg1Dlg::OnInitDialog()
 
{
 
CDialog::OnInitDialog();
 
// Symbol für dieses Dialogfeld festlegen. Wird automatisch erledigt
 
// wenn das Hauptfenster der Anwendung kein Dialogfeld ist
 
SetIcon(m_hIcon, TRUE); // Großes Symbol verwenden
 
SetIcon(m_hIcon, FALSE); // Kleines Symbol verwenden
 
// TODO: Hier zusätzliche Initialisierung einfügen
 

 
return TRUE; // Geben Sie TRUE zurück, außer ein Steuerelement soll den Fokus erhalten
 
}
 
// Wenn Sie dem Dialogfeld eine Schaltfläche "Minimieren" hinzufügen, benötigen Sie 
 
// den nachstehenden Code, um das Symbol zu zeichnen. Für MFC-Anwendungen, die das 
 
// Dokument/Ansicht-Modell verwenden, wird dies automatisch ausgeführt.
 
void Cdlg1Dlg::OnPaint() 
 
{
 
if (IsIconic())
 
{
 
CPaintDC dc(this); // Gerätekontext zum Zeichnen
 
SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
 
// Symbol in Clientrechteck zentrieren
 
int cxIcon = GetSystemMetrics(SM_CXICON);
 
int cyIcon = GetSystemMetrics(SM_CYICON);
 
CRect rect;
 
GetClientRect(&rect);
 
int x = (rect.Width() - cxIcon + 1) / 2;
 
int y = (rect.Height() - cyIcon + 1) / 2;
 
// Symbol zeichnen
 
dc.DrawIcon(x, y, m_hIcon);
 
}
 
else
 
{
 
CDialog::OnPaint();
 
}
 
}
 
// Die System ruft diese Funktion auf, um den Cursor abzufragen, der angezeigt wird, während der Benutzer
 
// das minimierte Fenster mit der Maus zieht.
 
HCURSOR Cdlg1Dlg::OnQueryDragIcon()
 
{
 
returnstatic_cast<HCURSOR>(m_hIcon);
 
}
 
 
 
void Cdlg1Dlg::OnEnKillfocusEdit1()
 
{
 
DoDataExchange(IDD_DLG1_DIALOG);
 
}

Wenn ich das Editierfeld verlasse, dann soll der DataExchanger aufgerufen werden, leider weiß ich nicht was ich als Pointer übergeben muss.

Kann mir da jemand weiterhelfen

Oder gibt es eine andere Möglichkeit die Daten gleich auszulesen vor dem Schließen auszulesen beim Wechsel des Steuerelements?

Grüße Christoph
 
Zuletzt bearbeitet:
Ich rate generell von dem UpdateData Dingen ab, das macht nicht immer, was es soll. Du kannst bei einer Edit ganz normal mit GetWindowText den Text rausholen, in ein char-Array (bäh!) oder direkt in einen CString.
 
Hi,

ich habs gefunden. Danke für den Hinweis.

Mit folgender Zeile, kann ich das auslesen ohne den DoDataExchanger

Code:
GetDlgItem(IDC_EDIT1)->GetWindowText(m_sEdit);

aber es würde auch so gehen mit

Code:
UpdateData(TRUE);

damit würde dann der DoDataExchanger aufgerufen, beide Möglichkeiten funktionieren.

Besten Dank ;-)
 

Neue Beiträge

Zurück