我正在编写一个简单的MFC应用程序,其中包含一个Dialog窗口和一些按钮。 我还添加了一个编辑控件,以便让用户插入文本字符串。
我想读取编辑控件中存在的值并将其存储在字符串中,但我不知道如何执行此操作。
我没有编译错误,但我总是只读“。”标记
我在文本编辑控件中添加了一个变量名称filepath1
,这是代码:
// 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 "."
答案 0 :(得分:5)
_cprintf("Value %S\n", txtname.GetString());
注意首都'S'
或者你可以施放:
_cprintf("Value %S\n", (LPCTSTR)txtname);
使用编辑控件会更好。要创建CEdit变量,请右键单击VS中的编辑框并选择“添加成员变量”,为变量命名并单击“确定”。
然后,您可以在编辑框中检索文本,如下所示:
CEdit m_EditCtrl;
// ....
CString filePath1 = m_EditCtrl.GetWindowText()
答案 1 :(得分:2)
我认为您的原始代码可以用于DDX和CString。使用控制变量并避免DDX / DDV功能的建议实际上是首选,而不是问题。
我怀疑您正在使用UNICODE库进行编译,但显式调用了ASCII函数_cprintf
。 UNICODE保存为两个字节,对于ASCII字符,其中一个将为0.如果将其传递给ASCII字符串函数,它将在第一个字符后停止。
如果您使用的是UNICODE,请调用_cwprintf
或使用tchar.h
宏_tcprintf
,它将为编译器开关调用正确的版本。
提示:如果您仅定位UNICODE且永远不需要MBCS支持,请避免使用tchar.h
宏,因为它们会模糊char
和TCHAR
数据类型混合的任何问题。< / p>
答案 2 :(得分:0)
步骤1:使用“添加变量列表”创建CEdit控制变量。 第2步:使用GetDlgItemText()来保存该edict控件的文本。
示例:如CEdit控件列表变量是mc_strChatPane,然后是GetDlgItemText(mc_strChatPane,message),其中message是用户定义的CString变量。