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

Ваш аккаунт

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

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

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

Как сделать один из контролов активным (с фокусом) при запуске приложения?

8.4K
04 августа 2006 года
Sir
52 / / 28.07.2006
Используя MFC, создал SDI приложение. В главном окне создал контролы в функции CMyView::OnCreate().

Подскажите, пожалуйста, как сделать один из контролов активным (с фокусом) при запуске приложения.

m_MyButton.Create(...);
m_MyButton.SetFocus();
не помогает (фокус остается на главном окне)

Может m_MyButton.SetFocus() нужно сделать не в CMyView::OnCreate(), а в другом месте?
398
05 августа 2006 года
Alexandoros
630 / / 21.10.2005
Попробуй GotoDlgCtrl
1.8K
07 августа 2006 года
Death Knight
139 / / 19.02.2006
Попробуй так:
CWnd * cw = GetdlgItem(IDC_BUTTON_1);
cw->SetFocus(); //or GoToDlgCtrl(cw);

Чуть не забыл прорпиши это в функции
CDialog::OnInitDialog()
Кстати если сдесь прописать то и твой метод должен работать...
8.4K
07 августа 2006 года
Sir
52 / / 28.07.2006
К сожалению у меня главное окно не диалоговое. В нем нет
CDialog::OnInitDialog().

Есть
CMyView::OnCreate()
но там фокус от главного окна не передается,
т.е.
(CWnd * cw = GetDlgItem(IDC_BUTTON_1);
cw->SetFocus();
не помогает,а
GoToDlgCtrl(cw);
не видно.

Вопрос такой:
в какой функции класса CMyView (у меня SDI приложение) можно передать фокус контролам?
(Например вашим способом:
(CWnd * cw = GetDlgItem(IDC_BUTTON_1);
cw->SetFocus();
или другим - не важно)
4.5K
07 августа 2006 года
e-XperT
127 / / 04.07.2006
Делать надо так: в классе С(имя проекта)App есть функция InitInstance()
в ней можно вызвать API функцию SetFocus после отображения главного окна
m_pMainWnd->ShowWindow(SW_SHOW);
m_pMainWnd->UpdateWindow();
::SetFocus(((CMainFrame *)m_pMainWnd)->btn->m_hWnd);
return TRUE;
или просто
((CMainFrame *)m_pMainWnd)->btn->SetFocus();
btn указатель на CButton
16K
07 августа 2006 года
koric
42 / / 06.08.2006
можно пропробовать вызвать из CView::OnActivate или CView::OnActivateView
8.4K
08 августа 2006 года
Sir
52 / / 28.07.2006
e-XperT

У меня кнопка объявлена не в CMainFrame, а в C(имя проекта)View, поэтому в С(имя проекта)App я прописал:

((C(имя проекта)View*)m_pMainWnd)->btn->SetFocus();

К сожалению при запуске вылетел из экзешника. Не прошел функцию

CWnd* CWnd::SetFocus()



koric

CView::OnActivate и CView::OnActivateView вызываются постоянно, поэтому при установке фокуса в них, он остается там на веки.
16K
08 августа 2006 года
koric
42 / / 06.08.2006
[QUOTE=Sir]CView::OnActivate и CView::OnActivateView вызываются постоянно, поэтому при установке фокуса в них, он остается там на веки[/QUOTE]

необязательно, добавь в свой класс переменную BOOL m_isFocused = FALSE;

а в OnActivate() проверь:

 
Код:
if(!m_isFocused){
    ((CMainFrame *)m_pMainWnd)->btn->SetFocus();
    m_isFocused = TRUE;
}


и тогда оно выполнится только один раз ;)
4.5K
08 августа 2006 года
e-XperT
127 / / 04.07.2006
[QUOTE=koric]необязательно, добавь в свой класс переменную BOOL m_isFocused = FALSE;

а в OnActivate() проверь:
и тогда оно выполнится только один раз ;)[/QUOTE]
Зачем добавлять лишнюю переменную, которая используется один раз, если можно сделать проще?
CМ. вложение.
[ATTACH]982[/ATTACH]
1.8K
09 августа 2006 года
Death Knight
139 / / 19.02.2006
Я думаю проще будет если ты выложишь свой проект а мы посмотрим, что можно сделать...:)
4.5K
09 августа 2006 года
e-XperT
127 / / 04.07.2006
Я ж вложил, чо не берется?
8.4K
15 августа 2006 года
Sir
52 / / 28.07.2006
[QUOTE=e-XperT]Я ж вложил, чо не берется?[/QUOTE]

В твоем варианте фокус на кнопке есть, она даже нажимается пробелом, но стоит на нее нажать мышкой и программа виснет.

Это слишком большая цена за фокус.

Может есть другие варианты. У меня кнопки создаются в классе представления CMyView.
4.5K
16 августа 2006 года
e-XperT
127 / / 04.07.2006
Странно в моем варианте ничего не виснет и кнопка даже не нажимается... чтоб она нажималась нужно обрабатывать сообщение WM_LBUTTONDOWN.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог