Static-Text Feld ändern

Hallo,
ich verwende Microsoft Visual C++ 2005 und möchte gerne ein Static-Text Feld innerhalb einer Dialogbox zur Laufzeit ändern.
Das Text Feld hat die ID: IDC_STATIC und den Namen: IDC_STATIC4 (automatisch vergeben).
Ich habe bereits folgendes versucht:

#include „afxwin.h“
CStatic Text;
CDataExchange *pDX;

DDX_Control(pDX, IDC_STATIC4, Text);
Text.SetWindowText((LPCTSTR)„Test-String“);

Ich bekomme aber die Fehlermeldung: error C2065: ‚IDC_STATIC4‘ : undeclared identifier
Weiss jemand wie das geht?

MFC: Static-Text Feld ändern
Hallo!

DDX_Control(pDX, IDC_STATIC4, Text);
Text.SetWindowText((LPCTSTR)„Test-String“);

Ich bekomme aber die Fehlermeldung: error C2065: ‚IDC_STATIC4‘

DDX_Control braucht die ID, nicht diesen Namen. IDC_STATIC ist aber per Voreinstellung die ID für alle Static-Ctrls. Deswegen musst Du die ID in IDC_STATIC4 ändern.

Den Text ändern geht übrigens bequemer mit CWnd::SetDlgItemText(). Dann brauchst du zumindest dafür nicht extra eine Membervariable anlegen.

hth
M.

Hallo,
ich hab die ID geändert. Dieser Fehler ist weg. Aber wenn ich SetDlgItemText() einbaue erhalte ich folgende Fehlermeldung:
error C2660: ‚SetDlgItemTextW‘ : function does not take 2 arguments
Es scheint als ob er die falsche Library nimmt.

Hallo!

ich hab die ID geändert. Dieser Fehler ist weg. Aber wenn ich
SetDlgItemText() einbaue erhalte ich folgende Fehlermeldung:
error C2660: ‚SetDlgItemTextW‘ : function does not take 2
arguments

Der Aufruf muss in einer Member-Funktion der Klasse erfolgen, die von CWnd abgeleitet ist, also z.B. in einer Funktion einer View- oder Dialogklasse. Das geschieht wohl nicht, und so wird die Winapi-Funktion ::SetDlgItemText() aufgerufen, die tats. 3 Argumente erwartet.

Gruß M.

Hallo M.,
kannst du mal ein Beispiel machen? Ich kann eigentlich nur C und nicht C++.

Hallo M.,
kannst du mal ein Beispiel machen? Ich kann eigentlich nur C
und nicht C++.

Wenn du diese funktion nicht in einer Classe aufrufst die vom kolegen beschrieben ist, dann wird folgende funktion genutzt

SetDlgItemText Function

The SetDlgItemText function sets the title or text of a control in a dialog box.

Syntax

 BOOL SetDlgItemText( 
 HWND hDlg,
 int nIDDlgItem,
 LPCTSTR lpString
 );

Parameters

 hDlg
 [in] Handle to the dialog box that contains the control. 
 nIDDlgItem
 [in] Specifies the control with a title or text to be set. 
 lpString
 [in] Pointer to the null-terminated string that contains the text to be copied to the control

Du aber brauchst sowas

CWnd::SetDlgItemText 

Sets the caption or text of a control owned by a window or dialog box.

void SetDlgItemText(
 int nID,
 LPCTSTR lpszString 
);

Parameters

nID

 Identifies the control whose text is to be set.

lpszString

 Points to a CString object or null-terminated string that contains the text to be copied to the control.

was dann so aussieht

BOOL CDataDlg::open\_mouth:nInitDialog() 
{
 CDialog::open\_mouth:nInitDialog();

 // Initialize dialog controls
 SetDlgItemText(IDC\_EDIT\_NAME,"Type in text"); 
 SetDlgItemInt(IDC\_EDIT\_NUM, 100);
 return TRUE; // return TRUE unless you set the focus to a control
}

es geht also nur innerhalb einer Classe z.b. CDialog :smile:

weil
CDialog.SetDlgItemText != ::SetDlgItemText

wenn ich das mal richtig geschrieben hab mit dem ::

Ich glaube das OO-Zeug werde ich nie verstehen! Warscheinlich bin ich zu alt dafür.
Ich habe jetzt folgenden Code eingefügt (IDC_TEXT ist die ID des Static Text Feldes):

#include „stdafx.h“
#include „TEST_Win32.h“
#include „afxwin.h“

BOOL CDataDlg::open_mouth:nInitDialog()
{
CDialog::open_mouth:nInitDialog();

// Initialize dialog controls
SetDlgItemText(IDC_TEXT,„12345678“);
return TRUE;
}

Da windows.h bereits in afxwin.h enthalten ist (Fehlermeldung), habe ich #include in stdafx.h auskommentiert. Daraufhin erhalte ich die Fehlermeldung:
fatal error C1189: #error : Building MFC application with /MD[d] (CRT dll version) requires MFC shared dll version. Please #define _AFXDLL or do not use /MD[d]

Also habe ich ein #define _AFXDLL in stdafx.h eingefügt.
Darafhin erhalte ich die Fehlermeldungen:
error C2653: ‚CDataDlg‘ : is not a class or namespace name
error C2352: ‚CDialog::open_mouth:nInitDialog‘ : illegal call of non-static member function
error C2660: ‚SetDlgItemTextW‘ : function does not take 2 arguments

Fehlt noch was? Null raff!

mach doch erstmal das richtige grundgerüst. wenn nicht mit dem assistenten MFC Anwendung dann

hier

http://www.henkessoft.de/C++/MFC/mfc_einsteigerbuch_…

dann fügst du ein CDialog mit dem Classen assitenten hinzu, der macht mehr als nur einen trivialen eintrag :smile: GErade was Dialog und steuerelemnte angeht.

dann kannst du dein stuff machen :smile:

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

mach doch erstmal das richtige grundgerüst.

Kann ich das Ganze nicht auch ohne MFC machen? Ich habe ein fertiges Projekt (Win32 nicht MFC) und muss nur an einer bestimmten Stelle innerhalb einer DialogBox zur Laufzeit eine Textzeile ausgeben.
Erschwerend kommt hinzu das ich die Resorce-Files nur von Hand editieren kann. VS-2005 versteht das Format nicht mehr. Keine Ahnung mit was dieses Projekt ursprünglich entwickelt wurde. Eine saubere Umstellung auf MFC ist daher nur mit grossem Aufwand machbar. Kennt jemand eine quick-and-dirty Lösung für dieses Problem?

Ich hab das Problem inzwischen mit SetDlgItemText() gelöst.
Dank an alle.