Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Передача параметров из CDialog 
:(
    Опции темы
lavan
Дата 29.6.2011, 15:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 101
Регистрация: 21.4.2011

Репутация: нет
Всего: нет



Народ,подскажите,кто знает.Есть главное окно,на нем кнопка,по нажатию этой кнопки появляется модальное окно CDialog:
Код

class CMyDialog:public CDialog{
private:
    CListBox *lb;
    CString str_dl;
public:
    CMyDialog(UINT,CWnd *ptr=NULL);
    ~CMyDialog();
    void OnOk();
    BOOL OnInitDialog();
    CString getSt(){
      return str_dl;
    }
};

С компонентом CListBox,в этом компоненте есть пару строк.Если пользов не выбрал ни одной строки и нажал на кнопку Ok(в диалоговом окне),то выскакивает сообщение что нужно выбрать строку
Код

CMyDialog::CMyDialog(UINT id,CWnd *ptr):CDialog(id,ptr),lb(NULL){}
BOOL CMyDialog::OnInitDialog(){
    CDialog::OnInitDialog();
    lb=new CListBox();
    lb->Create(WS_CHILD|WS_VISIBLE|WS_TABSTOP|LBS_NOTIFY|WS_VSCROLL|WS_BORDER,
        CRect(100,10,150,70),this,ML);//создали лист_бокс
    lb->AddString("pol");//добавили строки
    lb->AddString("kol");
    return true;
}
void CMyDialog::OnOk(){
    if(lb->GetCurSel()==LB_ERR)
        AfxMessageBox("choice");
    else{
        lb->GetText(lb->GetCurSel(),str_dl);
        CDialog::OnOK();
    }
}
CMyDialog::~CMyDialog(){
  if(lb!=NULL)delete lb;
}

Проблема состоит в тм,что CListBox не взаимодействует с пользователем.даже если я нажал кнопку Ok  и не выбрал ни одной строки,диалоговое окно все равно закрывается.Пытался просто заполнить в обработчике OnOk переменную CString класса CMyDialog,а потом вывести ее в главном окне,тоже не идет
Обработчик кнопки рассположенной на главном окне
Код

void CMyFrame::OnButtonClck(){
    CMyDialog cdd(IDD_MD);//создали диалоговое окно
    if(cdd.DoModal()==IDOK)//сделали его видимым
    str=cdd.getSt();
    else
        str="text";
    InvalidateRect(0);
    
}

В чем ошибка?(хочу сделать без DDX)
PM MAIL   Вверх
Albor
Дата 29.6.2011, 17:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 589
Регистрация: 28.2.2009

Репутация: 7
Всего: 9



А что возвращает lb->GetCurSel(), когда ни одна строка не выбрана?
PM MAIL ICQ   Вверх
lavan
Дата 29.6.2011, 17:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 101
Регистрация: 21.4.2011

Репутация: нет
Всего: нет



Я хочу чтобы выдало сообщение об этом
Код

void CMyDialog::OnOk(){
    if(lb->GetCurSel()==LB_ERR)//строка не выбранна
        AfxMessageBox("choice");
    else{
        lb->GetText(lb->GetCurSel(),str_dl);
        CDialog::OnOK();
    }
}

Если разместить ClistBox на главном окне,то все срабатывает smile 
PM MAIL   Вверх
YDean
Дата 29.6.2011, 18:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 7.9.2009

Репутация: нет
Всего: 1



Думается, что CMyDialog::OnOk вообще не вызывается.
Если бы она была привязана к кнопке через MESSAGE_MAP, она должна быть написана как afx_msg void.
А если имеется в виду переопределение виртуальной CDialog::OnOK, то там большая буква К.
PM   Вверх
Albor
Дата 30.6.2011, 07:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 589
Регистрация: 28.2.2009

Репутация: 7
Всего: 9



Цитата(YDean @  29.6.2011,  17:35 Найти цитируемый пост)
Думается, что CMyDialog::OnOk вообще не вызывается.
Если бы она была привязана к кнопке через MESSAGE_MAP, она должна быть написана как afx_msg void.
А если имеется в виду переопределение виртуальной CDialog::OnOK, то там большая буква К. 

Это так. Если бы lavan поставил точку останова на первый if в данной функции и запустил отладку, то и вопрос бы, наверное, не возник.

Это сообщение отредактировал(а) Albor - 30.6.2011, 07:43
PM MAIL ICQ   Вверх
lavan
Дата 30.6.2011, 11:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 101
Регистрация: 21.4.2011

Репутация: нет
Всего: нет



YDean,спасибо,мне кажется я бы сам никогда не увидел!
Albor,пытался сделать пошаговую отладку,но так и не нашел как.У меня VS-2008,какая кнопка для пошаговой отладки?
PM MAIL   Вверх
Albor
Дата 30.6.2011, 16:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 589
Регистрация: 28.2.2009

Репутация: 7
Всего: 9



Цитата(lavan @  30.6.2011,  10:37 Найти цитируемый пост)
 VS-2008,какая кнопка для пошаговой отладки

F5
PM MAIL ICQ   Вверх
borisbn
Дата 30.6.2011, 18:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 2
Всего: 135



Цитата(Albor @  30.6.2011,  16:02 Найти цитируемый пост)
F5

это для запуска (старта) отладки, а собственно сделать один шаг - F10


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.0896 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.