Твой софтовый форум > Тематические форумы > Программирование

помогите с С++

,

надо разобраться с Edit

Дата публикации: 20.06.2007 - 00:55
mirex1000
Подскажите пожалуйста, как после изменений в строке редактирования Edit взять полученную строку и поместить в переменную m_edit?
(Это также, как мы вводим пароль, а программа проверяет правильность)


CODE

#include "afxwin.h"
#include "resource.h"


class CTestDlg : public CDialog  // класс диалогового окна
{
public:
CTestDlg(CWnd* pParent=NULL);
virtual void DoDataExchange(CDataExchange* pDX);// функция обмена данными

void SetPas(CString csPas);
CString GetPas();
void CheckPassword();
protected:
CString m_edit;   // данные
DECLARE_MESSAGE_MAP();
};

CTestDlg::CTestDlg(CWnd* pParent)
 :CDialog(IDD_DIALOG1, pParent)
{
}

BEGIN_MESSAGE_MAP(CTestDlg, CDialog)
ON_BN_CLICKED(IDC_BUTTON1, CheckPassword)
ON_EN_CHANGE(IDC_EDIT1, GetPas)                   //???
END_MESSAGE_MAP()


void CTestDlg::DoDataExchange(CDataExchange *pDX)
{
CDialog::DoDataExchange(pDX);  // функция папы
DDX_Text(pDX, IDC_EDIT1, m_edit);//обмен строки
DDV_MaxChars(pDX, m_edit, 3);
}


void CTestDlg::CheckPassword()
{
CTestDlg dlg;          //а это вообще
m_edit=dlg.m_edit; //нужно или нет?
//AfxMessageBox(GetPas()); //так или
AfxMessageBox(m_edit);      //вот так
/*if(GetPas()=="111")      //???
{
 AfxMessageBox("Right");
}
else
{
 AfxMessageBox("Wrong");
}*/
}
void CTestDlg::SetPas(CString csPas)
{
m_edit=csPas;
}
CString CTestDlg::GetPas()
{return m_edit;}



class CTestApp : public CWinApp
{
public:
virtual BOOL InitInstance();
};

BOOL CTestApp::InitInstance()
{
CTestDlg dlg;  // Создать объект диалогового окна
m_pMainWnd=&dlg; // главное окно программы это диалоговое окно
dlg.DoModal();
return FALSE;
}

CTestApp theApp;


Вот так выглядит окно:
Присоединённый файл Скачать / Download attachment 4751
LightGoth
Если не ошибаюсь
m_edit = Edit1 -> Text.c_str() ;
записивает в переменюу m_edit стрингового типа, все что было введено в поле Едит1
mirex1000
Не прошло:

Compiling...
MyStep40_1.cpp
E:\...\MyStep40_1.cpp(45) : error C2065: 'Edit1' : undeclared identifier
E:\...\MyStep40_1.cpp(45) : error C2227: left of '->Text' must point to class/struct/union
E:\...\MyStep40_1.cpp(45) : error C2228: left of '.c_str' must have class/struct/union type
Error executing cl.exe.

MyStep40_1.obj - 3 error(s), 0 warning(s)

Также не проходят варианты:
m_edit = IDC_EDIT1 -> Text.c_str() ;
и в объявлении CString нет функции c_str().
Может быть что-то похожее прошло бы при нажати на кнопку OK и данные передались бы в переменную, но у меня одно окно и тут надо все проверить на месте (не выходя из этого окна).

Еще есть дополнительный вопрос:
DDX_Text(pDX, IDC_EDIT1, m_edit); - заносит данные из строки IDC_EDIT1 в переменную m_edit - это можно видеть при нажатии на F5 в области Debug, но почему же тогда GetPas() не возвращает значение переменной m_edit?
Может это потому-что DDX - виртуальный???
mirex1000
Как говорится: молодец сынок, задавай умные вопросы - получай умные ответы...
Вот и решение нашлось (методом проб и ошибок):

CODE

#include "afxwin.h"
#include "resource.h"

class CTestDlg : public CDialog  // класс диалогового окна
{
public:
CTestDlg(CWnd* pParent=NULL);
virtual void DoDataExchange(CDataExchange* pDX);// функция обмена данными
void CheckPassword();
protected:
CString m_edit;   // данные, первая строка
DECLARE_MESSAGE_MAP();
};

CTestDlg::CTestDlg(CWnd* pParent)
 :CDialog(IDD_DIALOG1, pParent)
{
}

BEGIN_MESSAGE_MAP(CTestDlg, CDialog)
ON_BN_CLICKED(IDC_BUTTON1, CheckPassword)
END_MESSAGE_MAP()

void CTestDlg::DoDataExchange(CDataExchange *pDX)
{
CDialog::DoDataExchange(pDX);  // функция папы
DDX_Text(pDX, IDC_EDIT1, m_edit); //обмен строки
DDV_MaxChars(pDX, m_edit, 3);
}

void CTestDlg::CheckPassword()
{
CWnd* pWnd = GetDlgItem(IDC_EDIT1);
CString str;
pWnd->GetWindowText(str);
ASSERT(str);

if(str=="111")
AfxMessageBox("Right");
else
AfxMessageBox("Wrong");
}

class CTestApp : public CWinApp
{
public:
virtual BOOL InitInstance();
};

BOOL CTestApp::InitInstance()
{
CTestDlg dlg;  // Создать объект диалогового окна
m_pMainWnd=&dlg; // главное окно программы это диалоговое окно
dlg.DoModal();
return FALSE;
}

CTestApp theApp;


Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке: помогите с С++
SoftoRooM © 2004-2024