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:
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.
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.
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.
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
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):
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:nInitDialog‘ : illegal call of non-static member function
error C2660: ‚SetDlgItemTextW‘ : function does not take 2 arguments
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?