2014-03-24 5 views
0

У меня есть следующий код в попытке установить текст в текстовом поле Cedit:Установка CEDIT текста

class CMetaDlg : public CDialogEx 
{ 
public: 
CMetaDlg(); 

// Dialog Data 
enum { IDD = IDD_META }; 

protected: 
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support 

// Implementation 
protected: 
DECLARE_MESSAGE_MAP() 
public: 
CEdit m_author; 
CEdit m_sources; 
afx_msg void OnBnClickedOk(); 
}; 

CMetaDlg::CMetaDlg() : CDialogEx(CMetaDlg::IDD) 
{ 
} 

void CMetaDlg::DoDataExchange(CDataExchange* pDX) 
{ 
CDialogEx::DoDataExchange(pDX); 
DDX_Control(pDX, IDC_AUTHOR, m_author); 
DDX_Control(pDX, IDC_SOURCES, m_sources); 
} 

BEGIN_MESSAGE_MAP(CMetaDlg, CDialogEx) 
ON_BN_CLICKED(IDOK, &CMetaDlg::OnBnClickedOk) 
END_MESSAGE_MAP() 

void CEmergenceApp::OnFileMeta() 
{ 


CMetaDlg md;  
md.DoModal(); 
md.m_author.SetWindowTextW(CEmergenceView::GetDoc()->author); 
md.m_sources.SetWindowTextW(CEmergenceView::GetDoc()->sources); 
} 

Это дает мне ошибку отладки утверждения. Я предполагаю, что проблема заключается в линиях:

md.m_author.SetWindowTextW(CEmergenceView::GetDoc()->author); 
md.m_sources.SetWindowTextW(CEmergenceView::GetDoc()->sources); 

Как комментирует их, все работает нормально.

+0

Я думаю, вы хотите установить эти значения в OnInitDailog() класса CMetaDlg. – rrirower

+0

нет. попробовал ваше предложение. не работает. – user3396028

+0

Тогда я бы предположил, что указатель, возвращенный из GetDoc(), недействителен. Вы проверили это? – rrirower

ответ

0

Когда вы вызываете DoModal, создается диалог, элементы управления редактированием создаются, а затем, когда пользователь нажимает кнопку «ОК» или «Отмена», элементы управления редактированием и диалоговое окно уничтожаются. Затем возвращается DoModal. Я не понимаю, что вы пытаетесь сделать, пытаясь установить текст элемента управления после закрытия диалогового окна.

+0

Я поставил его перед DoModal и в OnInitDialog ... ни одна из этих работ не работает. – user3396028

+0

OnInitDialog - единственное место, где он может работать. Элементы редактирования не существуют перед DoModal, и они не существуют после DoModal. Вам нужно установить диалоговые переменные-члены CString перед DoModal. Затем в OnInitDialog установите элементы управления из переменных элемента CString. У вас много проблем с очень основными операциями MFC, потому что вы, по-видимому, не использовали книгу или учебник, чтобы узнать, как все работает. Небольшое изучение проделало бы долгий путь. –