if(!m_isFocused){
((CMainFrame *)m_pMainWnd)->btn->SetFocus();
m_isFocused = TRUE;
}
Как сделать один из контролов активным (с фокусом) при запуске приложения?
Подскажите, пожалуйста, как сделать один из контролов активным (с фокусом) при запуске приложения.
m_MyButton.Create(...);
m_MyButton.SetFocus();
не помогает (фокус остается на главном окне)
Может m_MyButton.SetFocus() нужно сделать не в CMyView::OnCreate(), а в другом месте?
Попробуй GotoDlgCtrl
CWnd * cw = GetdlgItem(IDC_BUTTON_1);
cw->SetFocus(); //or GoToDlgCtrl(cw);
Чуть не забыл прорпиши это в функции
CDialog::OnInitDialog()
Кстати если сдесь прописать то и твой метод должен работать...
CDialog::OnInitDialog().
Есть
CMyView::OnCreate()
но там фокус от главного окна не передается,
т.е.
(CWnd * cw = GetDlgItem(IDC_BUTTON_1);
cw->SetFocus();
не помогает,а
GoToDlgCtrl(cw);
не видно.
Вопрос такой:
в какой функции класса CMyView (у меня SDI приложение) можно передать фокус контролам?
(Например вашим способом:
(CWnd * cw = GetDlgItem(IDC_BUTTON_1);
cw->SetFocus();
или другим - не важно)
в ней можно вызвать 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
можно пропробовать вызвать из CView::OnActivate или CView::OnActivateView
У меня кнопка объявлена не в CMainFrame, а в C(имя проекта)View, поэтому в С(имя проекта)App я прописал:
((C(имя проекта)View*)m_pMainWnd)->btn->SetFocus();
К сожалению при запуске вылетел из экзешника. Не прошел функцию
CWnd* CWnd::SetFocus()
koric
CView::OnActivate и CView::OnActivateView вызываются постоянно, поэтому при установке фокуса в них, он остается там на веки.
необязательно, добавь в свой класс переменную BOOL m_isFocused = FALSE;
а в OnActivate() проверь:
Код:
и тогда оно выполнится только один раз ;)
а в OnActivate() проверь:
и тогда оно выполнится только один раз ;)[/QUOTE]
Зачем добавлять лишнюю переменную, которая используется один раз, если можно сделать проще?
CМ. вложение.
[ATTACH]982[/ATTACH]
Я думаю проще будет если ты выложишь свой проект а мы посмотрим, что можно сделать...:)
Я ж вложил, чо не берется?
В твоем варианте фокус на кнопке есть, она даже нажимается пробелом, но стоит на нее нажать мышкой и программа виснет.
Это слишком большая цена за фокус.
Может есть другие варианты. У меня кнопки создаются в классе представления CMyView.
Странно в моем варианте ничего не виснет и кнопка даже не нажимается... чтоб она нажималась нужно обрабатывать сообщение WM_LBUTTONDOWN.