阅读从编辑控件文本MFC和VS2010(Read text from edit control in

2019-06-25 13:01发布

我正在写一个对话窗口和一些按钮简单的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 "."

Answer 1:

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

注资本“S”

或者你可以投:

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

你会关闭使用编辑控制更好。 要创建一个CEdit变量,右击VS中编辑框中,选择“添加成员变量”,给变量的名称,然后单击确定。

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

CEdit m_EditCtrl;
// ....
CString filePath1 = m_EditCtrl.GetWindowText()


Answer 2:

我认为你原来的代码是为DDX使用和CString的确定。 使用控制变量,避免DDX / DDV函数的建议是真正的偏好之一,而不是问题。

我怀疑你与UNICODE库编译但显式调用一个ASCII功能_cprintf 。 UNICODE保持为两个字节,ASCII字符其中之一将是0。如果它传递给一个ASCII字符串函数的第一个字符后停止。

如果使用的是UNICODE然后调用_cwprintf或使用tchar.h_tcprintf它将调用编译器开关正确的版本。

提示:如果你只指定UNICODE,绝不会要求MBCS支持则避免使用tchar.h宏,因为它们将混淆的任何问题charTCHAR数据类型的混合。



Answer 3:

步骤1:创建使用“添加变量列表”一个CEdit控制变量。 第2步:使用GetDlgItemText()来保存法令控制的文本。

例如:如CEdit的控制列表变量是mc_strChatPane,然后GetDlgItemText(mc_strChatPane,消息),其中消息是一个用户定义的CString变量。



文章来源: Read text from edit control in MFC and VS2010