Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

C++/MFC/DDX проблемы...

52K
21 сентября 2009 года
Ultimateorb
6 / / 21.09.2009
В общем у меня приложение написанное на MFC. Окно->Меню->Диалог, а в нем есть ComboBox. Почему m1_Combo.AddString("Black"); можно применить только из инициализирующей функции?

Если попытаться ее вызвать из своего метода класса CMyDialog То программа падает в ходе выполнения...
Код:
class CMyDialog:public CDialog{
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"); //  А вот так почему то нет
}
4.5K
22 сентября 2009 года
e-XperT
127 / / 04.07.2006
А MyMetod когда вызывается? Может он вызывается когда диалог еще не создан?
52K
22 сентября 2009 года
Ultimateorb
6 / / 21.09.2009
Да не вроде бы... Я ведь делаю так:

 
Код:
CMyDialog about(IDD_DIALOG1);
about.MyMetod();
11
23 сентября 2009 года
oxotnik333
2.9K / / 03.08.2007
DoDataExchange вызывается методом OnInitDialog, который в свою очередь вызывается методом Create.
Т.е. при подобном вызове
 
Код:
CMyDialog about(IDD_DIALOG1);
about.MyMetod();

m1_Combo еще не инициализирована
53K
25 сентября 2009 года
Toxast
1 / / 25.09.2009
Здраствуйте. Нужна помощь.

Если я провожу по окну своей программы другим окном то стираются все кнопки, поля ввода и тд, кроме картинки, которую я рисую в OnPiant.

Проблема такая - не могу найти функции перерисовки, которая не посылала бы сообщение WM_PAINT, так как остальные, будучи поставленные в OnPiant, зацикливают все и вся.
52K
25 сентября 2009 года
Ultimateorb
6 / / 21.09.2009
Цитата: oxotnik333
DoDataExchange вызывается методом OnInitDialog, который в свою очередь вызывается методом Create.
Т.е. при подобном вызове
 
Код:
CMyDialog about(IDD_DIALOG1);
about.MyMetod();

m1_Combo еще не инициализирована



Для m1_Combo я вообще не вызываю Create. VS просто поставил его на диалог и все. Да и как же m1_Combo остается не инициализирована если диалог показывается? При это опять же почему я тогда могу спокойно выполнить DDX_Text(pDX,IDC_COMBO1,cm1_Combo);?

 
Код:
CMyDialog about(IDD_DIALOG1);
about.DoModal(); //функция показывает диалог с ComboBox
about.MyMetod();
52K
25 сентября 2009 года
Ultimateorb
6 / / 21.09.2009
Цитата: Toxast
Здраствуйте. Нужна помощь.

Если я провожу по окну своей программы другим окном то стираются все кнопки, поля ввода и тд, кроме картинки, которую я рисую в OnPiant.

Проблема такая - не могу найти функции перерисовки, которая не посылала бы сообщение WM_PAINT, так как остальные, будучи поставленные в OnPiant, зацикливают все и вся.




:confused: Я не совсем понял фразу "найти функции перерисовки, которая не посылала бы сообщение WM_PAINT". Мне казалось перерисовка окна происходит только с помощью сообщения WM_PAINT или я ошибаюсь?

Не могу точно сказать в чем дело, без кода.. но может нужно использовать функцию обновления окна: Invalidate(TRUE)

+как дополнение: http://www.firststeps.ru/mfc/steps/mfc1.html Шаг-10

11
25 сентября 2009 года
oxotnik333
2.9K / / 03.08.2007
Цитата: Ultimateorb
Для m1_Combo я вообще не вызываю Create. VS просто поставил его на диалог и все. Да и как же m1_Combo остается не инициализирована если диалог показывается? При это опять же почему я тогда могу спокойно выполнить DDX_Text(pDX,IDC_COMBO1,cm1_Combo);?

 
Код:
CMyDialog about(IDD_DIALOG1);
about.DoModal(); //функция показывает диалог с ComboBox
about.MyMetod();


мля, в приведенном выше коде DoModal нигде не вызывается, а он как раз и отвечает в диалогах за вызов Create
а в последнем приведенном коде после DoModal все разрушается, в том числе и cm1_Combo

52K
25 сентября 2009 года
Ultimateorb
6 / / 21.09.2009
Цитата: oxotnik333
мля, в приведенном выше коде DoModal нигде не вызывается, а он как раз и отвечает в диалогах за вызов Create
а в последнем приведенном коде после DoModal все разрушается, в том числе и cm1_Combo



Ааа вот оно что ...:) спасибо теперь буду знать

311
25 сентября 2009 года
plastictown
309 / / 08.01.2006
Цитата: Toxast
Здраствуйте. Нужна помощь.

Если я провожу по окну своей программы другим окном то стираются все кнопки, поля ввода и тд, кроме картинки, которую я рисую в OnPiant.

Проблема такая - не могу найти функции перерисовки, которая не посылала бы сообщение WM_PAINT, так как остальные, будучи поставленные в OnPiant, зацикливают все и вся.



Можно вызывать InvalidateRect и сделать счетчик, чтобы каждый второй, например, раз функция не вызывалась.

14
28 сентября 2009 года
Phodopus
3.3K / / 19.06.2008
Цитата: Toxast
Проблема такая - не могу найти функции перерисовки, которая не посылала бы сообщение WM_PAINT, так как остальные, будучи поставленные в OnPiant, зацикливают все и вся.


Это полный ахтунг. Никто в здравом уме не вызывает функции перерисовки внутри функции перерисовки. Из-за этого небось и кнопки не рисуются.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог