5

我正在编写一个带有对话框窗口和一些按钮的简单 MFC 应用程序。我还添加了一个编辑控件,以便让用户插入一个文本字符串。

我想读取编辑控件中存在的值并将其存储在字符串中,但我不知道如何执行此操作。

我没有编译错误,但我总是只读一个“。” 标记。

我在文本编辑控件中添加了一个变量名,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 "."
4

3 回答 3

6
_cprintf("Value %S\n", txtname.GetString());

注意大写的“S”

或者你可以投:

_cprintf("Value %S\n", (LPCTSTR)txtname);

最好使用编辑控件。要创建 CEdit 变量,请在 VS 中的编辑框上单击鼠标右键并选择“添加成员变量”,为变量命名并单击“确定”。

然后,您可以像这样检索编辑框中的文本:

CEdit m_EditCtrl;
// ....
CString filePath1 = m_EditCtrl.GetWindowText()
于 2012-06-16T18:31:33.963 回答
2

我认为您的原始代码可以用于 DDX 和 CString。使用控制变量并避免使用 DDX/DDV 函数的建议实际上是一种偏好,而不是问题。

我怀疑您正在使用 UNICODE 库进行编译,但显式调用了 ASCII 函数_cprintf。UNICODE 保存为两个字节,对于 ASCII 字符,其中一个为 0。如果将其传递给 ASCII 字符串函数,它将在第一个字符之后停止。

如果您使用的是 UNICODE,则调用_cwprintf或使用将为编译器开关调用正确版本的tchar.h宏。_tcprintf

提示:如果您只针对 UNICODE 并且永远不需要 MBCS 支持,那么请避免使用tchar.h宏,因为它们会掩盖任何char数据TCHAR类型混合问题。

于 2012-07-18T13:17:04.217 回答
0

第 1 步:使用“添加变量列表”创建 CEdit 控制变量。第 2 步:使用 GetDlgItemText() 保存该命令控件的文本。

示例:如CEdit控制列表变量为mc_strChatPane,则GetDlgItemText(mc_strChatPane, message) 其中message为用户定义的CString变量。

于 2013-09-05T01:03:38.927 回答