Lire le texte de modifier le contrôle dans les MFC et VS2010
Je suis en train d'écrire une simple application MFC avec une fenêtre de Dialogue et de quelques boutons.
J'ai aussi ajouté un contrôle d'édition afin de permettre à l'utilisateur d'insérer une chaîne de texte.
J'aimerais lire la valeur qui est présent dans le contrôle d'édition et de le stocker dans une chaîne de caractères, mais je ne sais pas comment faire.
Je n'ai aucune erreur de compilation, mais j'ai toujours lu qu'un "." de la marque.
J'ai ajouté un nom de variable pour le contrôle d'édition de texte qui est filepath1
et c'est le code:
//CMFC_1Dlg dialog
class CMFC_1Dlg : public CDialogEx
{
//Construction
public:
CMFC_1Dlg(CWnd* pParent = NULL); //standard constructor
//Dialog Data
enum { IDD = IDD_MFC_1_DIALOG };
protected:
virtual void DoDataExchange(CDataExchange* pDX); //DDX/DDV support
//Implementation
protected:
HICON m_hIcon;
//Generated message map functions
virtual BOOL OnInitDialog();
afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
DECLARE_MESSAGE_MAP()
public:
afx_msg void OnBnClickedButton1();
afx_msg void OnBnClickedButton2();
afx_msg void OnEnChangeEdit1();
CString filePath1;
}
//...
void CMFC_1Dlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialogEx::OnSysCommand(nID, lParam);
}
}
CMFC_1Dlg::CMFC_1Dlg(CWnd* pParent /*=NULL*/)
: CDialogEx(CMFC_1Dlg::IDD, pParent)
,filePath1(("..\\Experiments\\Dirs\\"))
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CMFC_1Dlg::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
DDX_Text(pDX, IDC_EDIT1, filePath1);
}
//then i try to get the string value with
CString txtname=filePath1;
_cprintf("Value %s\n", txtname); //but i always read just a "."
- Vous devez d'abord ajouter une variable de contrôle qui contrôle la zone d'édition. De cette façon, vous pouvez utiliser la variable pour lire le texte.
- oui, j'ai déjà ajouté ça que j'ai précisé dans le sujet. Le problème est que de cette façon, je suis seulement capable de lire le premier caractère et pas la totalité de la chaîne. Par exemple, si j'écris "Bonjour" dans la zone de texte, txtname ne contient que des "H"
- Essayez txrname.GetString()
- Je ne vois pas une
CEdit
variable. - Pour être honnête, je ne comprenais pas très bien le CEdit variable. Quand j'ai ajouter une variable à un contrôle de texte, VS m'ajouter le CEdit variable, mais ce n'est pas une variable Chaîne de caractères, alors comment je dois l'utiliser?
Vous devez vous connecter pour publier un commentaire.
Note la capitale "S"
ou vous pouvez lancer:
Vous serait mieux d'utiliser un contrôle d'édition. Pour créer un CEdit variable, cliquez du bouton droit sur la zone d'édition dans VS et sélectionnez "Ajouter une Variable Membre", donner à la variable un nom et cliquez sur OK.
Vous pouvez ensuite récupérer le texte dans la zone d'édition comme ceci:
CEdit
variable. Vous pouvez utiliser la variable pour obtenir le texte dans la zone d'édition avecCEdit::GetWindowText()
. Pour créer unCEdit
variable, cliquez du bouton droit sur la zone d'édition dans VS et sélectionnez "Ajouter une Variable Membre".CString
, pasCEdit
Je pense que votre code d'origine est OK pour DDX utilisation et de CString. Les conseils pour l'utilisation d'une variable de contrôle et d'éviter le DDX/DDV fonctions est vraiment l'un de préférence, et non la question.
Je soupçonne que vous compilez avec l'UNICODE des bibliothèques, mais explicitement à l'appel d'une fonction ASCII
_cprintf
. UNICODE est de deux octets pour les caractères ASCII de l'un de ces sera de 0. Si vous passer dans une chaîne de caractères ASCII fonction, il s'arrête après le premier caractère.Si vous êtes en utilisant UNICODE puis appel
_cwprintf
ou utiliser letchar.h
macro_tcprintf
qui va appeler la version correcte pour le commutateur de compilateur.Astuce: Si vous ciblez uniquement UNICODE et n'aura jamais besoin de MBCS soutien de l'éviter à l'aide de la
tchar.h
macros comme ils cachent des problèmes avecchar
etTCHAR
type de données de mixage.Étape 1: Créer un CEdit variable de contrôle à l'aide de "Ajouter une Variable de la Liste".
Étape 2: Utilisation de GetDlgItemText() pour contenir le texte de l'édit de contrôle.
Exemple: comme CEdit liste de contrôle variable est mc_strChatPane, puis GetDlgItemText(mc_strChatPane, message) où le message est un utilisateur défini la variable CString.