Поиск:

Ответ в темуСоздание новой темы Создание опроса
> CEdit и SetFocus 
:(
    Опции темы
mrgloom
Дата 3.12.2012, 09:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



хочу поставить фокус на CEdit в окне которое вызывается как DoModal()

использую код
Код

BOOL CProfileNameSelect::OnInitDialog()
{
    m_profile_name.SetFocus();

    return FALSE/*TRUE*/;
}


падает в winocc.cpp 359
Цитата

на строчке ASSERT(::IsWindow(m_hWnd) || (m_pCtrlSite != NULL));


не могу понять в чем дело.
PM MAIL   Вверх
Earnest
Дата 3.12.2012, 11:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

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



А чего тут непонятного? Не окно это (в текущий момент).
Где код, связывающий m_profile_name с контролом в диалоге?
Обычно это делается в DoDataExchange через DDX_Control. А Do DataExchange вызывается из базового OnInitDialog, который ты зачем-то простил.


--------------------
...
PM   Вверх
mrgloom
Дата 3.12.2012, 11:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



заметил что  и когда GetWindowTextA от переменной CEdit

Код

void COptProfileNameSelect::OnBnClickedOk()
{
    CString str;
    m_profile_name.GetWindowTextA(str); //тут
}


происходит ошибка
Код

void CWnd::GetWindowText(CString& rString) const
{
    ASSERT(::IsWindow(m_hWnd)); //тут
...


похоже дело в самом CEdit? только непонятно в чём всёравно.

т.к. в самом коде он определен как 
Код

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

    DECLARE_MESSAGE_MAP()
public:
    afx_msg void OnBnClickedOk();
    afx_msg void OnBnClickedCancel();
    CEdit m_profile_name;


Код

void CProfileNameSelect::DoDataExchange(CDataExchange* pDX)
{
    CDialog::DoDataExchange(pDX);
    DDX_Control(pDX, IDC_SELECT_PROFILE_NAME, m_profile_name);
}


и больше нигде не встречается

Это сообщение отредактировал(а) mrgloom - 3.12.2012, 11:07
PM MAIL   Вверх
Earnest
Дата 3.12.2012, 11:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

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



Цитата(Earnest @  3.12.2012,  12:06 Найти цитируемый пост)
Обычно это делается в DoDataExchange через DDX_Control. А Do DataExchange вызывается из базового OnInitDialog, который ты зачем-то простил. 




--------------------
...
PM   Вверх
mrgloom
Дата 3.12.2012, 11:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата

простил

я сначала подумал "постил", а потом понял "пропустил".

да нужно
Код

CDialog::OnInitDialog();


кстати давно назревал вопрос когда это нужно и когда нет?
т.е. использовать какой то код от родителя руками и почему он не вызывается сам?

опять же почему тут нужен OnOK() и почему не CDialog::OnOK()?
Цитата

void CProfileNameSelect::OnBnClickedOk()
{
...
OnOK();
}

PM MAIL   Вверх
Earnest
Дата 3.12.2012, 11:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

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



1) Вызывать базовый OnInitDialog из своего переопределенного нужно всегда. Причем ДО обращения к связанным контролам.
Само вообще никогда ничего не делается. Либо ты делаешь, либо кто-то другой за тебя.
2) Возвращать TRUE или FALSE - ты, видимо, знаешь, когда: если фокус выставляешь сам, то возвращай FALSE
3) CDialog::OnOk и просто OnOk теоретически разные ф-и (унаследованная и переопределенная в твоем классе). Так что какую вызывать - зависит от ситуации. Если в своем классе не переопределяешь - не важно, будет одно и то же.


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


 




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


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

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