C++/MFC/DDX проблемы...
Если попытаться ее вызвать из своего метода класса CMyDialog То программа падает в ходе выполнения...
public:
virtual BOOL OnInitDialog(); // инициализация
virtual void DoDataExchange(CDataExchange* pDX);
CMyDialog( UINT nIDTemplate,CWnd* pParentWnd = NULL); // конструктор
CString cm1_Combo;
CComboBox m1_Combo;
};
void CMyDialog::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX); // функция папы
DDX_Control(pDX,IDC_COMBO1,m1_Combo);
DDX_Text(pDX,IDC_COMBO1,cm1_Combo);
}
BOOL CMyDialog::OnInitDialog()
{
CDialog::OnInitDialog(); // метод предка
m1_Combo.AddString("Black"); // Так можно сделать
return TRUE;
}
void СMyDialog::MyMetod(){
m1_Combo.AddString("Black"); // А вот так почему то нет
}
about.MyMetod();
Т.е. при подобном вызове
about.MyMetod();
m1_Combo еще не инициализирована
Если я провожу по окну своей программы другим окном то стираются все кнопки, поля ввода и тд, кроме картинки, которую я рисую в OnPiant.
Проблема такая - не могу найти функции перерисовки, которая не посылала бы сообщение WM_PAINT, так как остальные, будучи поставленные в OnPiant, зацикливают все и вся.
Т.е. при подобном вызове
about.MyMetod();
m1_Combo еще не инициализирована
Для m1_Combo я вообще не вызываю Create. VS просто поставил его на диалог и все. Да и как же m1_Combo остается не инициализирована если диалог показывается? При это опять же почему я тогда могу спокойно выполнить DDX_Text(pDX,IDC_COMBO1,cm1_Combo);?
about.DoModal(); //функция показывает диалог с ComboBox
about.MyMetod();
Если я провожу по окну своей программы другим окном то стираются все кнопки, поля ввода и тд, кроме картинки, которую я рисую в OnPiant.
Проблема такая - не могу найти функции перерисовки, которая не посылала бы сообщение WM_PAINT, так как остальные, будучи поставленные в OnPiant, зацикливают все и вся.
:confused: Я не совсем понял фразу "найти функции перерисовки, которая не посылала бы сообщение WM_PAINT". Мне казалось перерисовка окна происходит только с помощью сообщения WM_PAINT или я ошибаюсь?
Не могу точно сказать в чем дело, без кода.. но может нужно использовать функцию обновления окна: Invalidate(TRUE)
+как дополнение: http://www.firststeps.ru/mfc/steps/mfc1.html Шаг-10
about.DoModal(); //функция показывает диалог с ComboBox
about.MyMetod();
мля, в приведенном выше коде DoModal нигде не вызывается, а он как раз и отвечает в диалогах за вызов Create
а в последнем приведенном коде после DoModal все разрушается, в том числе и cm1_Combo
а в последнем приведенном коде после DoModal все разрушается, в том числе и cm1_Combo
Ааа вот оно что ...:) спасибо теперь буду знать
Если я провожу по окну своей программы другим окном то стираются все кнопки, поля ввода и тд, кроме картинки, которую я рисую в OnPiant.
Проблема такая - не могу найти функции перерисовки, которая не посылала бы сообщение WM_PAINT, так как остальные, будучи поставленные в OnPiant, зацикливают все и вся.
Можно вызывать InvalidateRect и сделать счетчик, чтобы каждый второй, например, раз функция не вызывалась.
Это полный ахтунг. Никто в здравом уме не вызывает функции перерисовки внутри функции перерисовки. Из-за этого небось и кнопки не рисуются.