Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
14 / 14 / 4
Регистрация: 10.07.2010
Сообщений: 130

CDialog::OnKillFocus

18.09.2011, 09:25. Показов 2631. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
почему не работает? закрываю диалог и нифига....
C++
1
2
3
4
5
6
void CDlg_testDlg::OnKillFocus(CWnd* pNewWnd) 
{
    CDialog::OnKillFocus(pNewWnd);
    
    MessageBox("");
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
18.09.2011, 09:25
Ответы с готовыми решениями:

функция Get Document не работает в CDialog. как получить документ в CDIalog
пишу прогу на DOc/view в MFc. есть обычный диалог с кнопкой. при нажатии на кнопку хочу получить указатель на документ используя функцию...

Перерисовка CDialog
Задание такое. При выборе радиобатона создавать 2 обьекта статик текст и эдит. Вот мой пример кода, только у меня не показывается объект...

ресайз CDialog
Привет, народ! Помогите новичку. Работаю с CDialog. Нужно чтобы окно могло растягиваться. Как программно добавить такое свойство?

11
Модератор
Эксперт по электронике
8979 / 6745 / 921
Регистрация: 14.02.2011
Сообщений: 23,856
18.09.2011, 11:23
А что ты хочешь поймать???
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
18.09.2011, 11:26
Цитата Сообщение от Xtir Посмотреть сообщение
CDialog::OnKillFocus(pNewWnd);
- после этой строки уже идёт выход из функции и эта строка врядли отрабатывает
Цитата Сообщение от Xtir Посмотреть сообщение
MessageBox("");
0
Модератор
Эксперт по электронике
8979 / 6745 / 921
Регистрация: 14.02.2011
Сообщений: 23,856
18.09.2011, 11:31
сейчас попробовал
у меня заходит при закрытии
кстати
CDialog::OnKillFocus(pNewWnd)
вообще вот сюда приходит
C++
1
2
3
4
5
6
7
LRESULT CWnd::Default()
{
    // call DefWindowProc with the last message
    _AFX_THREAD_STATE* pThreadState = _afxThreadState.GetData();
    return DefWindowProc(pThreadState->m_lastSentMsg.message,
        pThreadState->m_lastSentMsg.wParam, pThreadState->m_lastSentMsg.lParam);
}
т.е ничего не делает

Добавлено через 56 секунд
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
после этой строки уже идёт выход из функции
с какого перепугу???
это дестрой чтоли

Добавлено через 1 минуту
Цитата Сообщение от Xtir Посмотреть сообщение
почему не работает? закрываю диалог и нифига....
пройди отладчиком
0
14 / 14 / 4
Регистрация: 10.07.2010
Сообщений: 130
18.09.2011, 11:53  [ТС]
в общем я немного не в том направлении проверять OnKillFocus пошёл )
у меня на диалоге есть несколько созданных динамически диалога, с несколькими EditBox'ами, необходимо отследить как бы "переключение" между этими диалогами. Конечно можно отслеживать OnKillFocus каждого EditBox'а, но этот вариант я рассмотрю если с тем ничего не выйдет
0
Модератор
Эксперт по электронике
8979 / 6745 / 921
Регистрация: 14.02.2011
Сообщений: 23,856
18.09.2011, 11:56
успокоились и еще раз
один диалог с несколькими едитами
или
много диалогов каждый с едитом ?
0
14 / 14 / 4
Регистрация: 10.07.2010
Сообщений: 130
18.09.2011, 12:12  [ТС]
я спокоен
например вот такой диалог, но как я уже понял, CDialog::OnKillFocus тут не поможет, и похоже придётся отслеживать каждый EditBox
Миниатюры
CDialog::OnKillFocus  
0
Делаю внезапно и красиво
Эксперт С++
 Аватар для Deviaphan
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
18.09.2011, 12:17
Цитата Сообщение от Xtir Посмотреть сообщение
например вот такой диалог, но как я уже понял, CDialog::OnKillFocus тут не поможет, и похоже придётся отслеживать каждый EditBox
CDialog::OnKillFocus для потери фокуса самим диалогом. Чтобы отследить потерю фокуса конкретным контролом, нужно отслеживать конкретный контрол.

Добавлено через 52 секунды
Цитата Сообщение от Xtir Посмотреть сообщение
закрываю диалог и нифига
Закрыться диалог может и без потери фокуса. Активируй любое другое окно и диалог фокус потеряет.
0
Модератор
Эксперт по электронике
8979 / 6745 / 921
Регистрация: 14.02.2011
Сообщений: 23,856
18.09.2011, 12:25
а зачем ты хочешь отслеживать переключения
скорее всего есть другой путь

Добавлено через 5 минут
Цитата Сообщение от Deviaphan Посмотреть сообщение
Активируй любое другое окно и диалог фокус потеряет.
не ка
никогда не задавался этим вопросом
а тут решил проверить

при модальном диалоге все перещелкал запускал новые окна
не приходит сообщение
Я так понял все действует в пределах приложения
а в нем модальное окно не теряет фокус
пойду теорию учить
0
14 / 14 / 4
Регистрация: 10.07.2010
Сообщений: 130
18.09.2011, 12:35  [ТС]
Цитата Сообщение от ValeryS Посмотреть сообщение
а зачем ты хочешь отслеживать переключения
нада

сделал вот так, не совсем компактно, но работает
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
void CDlg_testDlg::OnKillfocusEdit1() 
{
    CWnd* pFocus = GetFocus();
    CWnd* pEdit1 = GetDlgItem(IDC_EDIT1);
    CWnd* pEdit2 = GetDlgItem(IDC_EDIT2);
    CWnd* pEdit3 = GetDlgItem(IDC_EDIT3);
 
    if(pFocus != pEdit1 && pFocus != pEdit2 && pFocus != pEdit3)
        MessageBox("");
}
 
void CDlg_testDlg::OnKillfocusEdit2() 
{
    CWnd* pFocus = GetFocus();
    CWnd* pEdit1 = GetDlgItem(IDC_EDIT1);
    CWnd* pEdit2 = GetDlgItem(IDC_EDIT2);
    CWnd* pEdit3 = GetDlgItem(IDC_EDIT3);
 
    if(pFocus != pEdit1 && pFocus != pEdit2 && pFocus != pEdit3)
        MessageBox("");
}
 
void CDlg_testDlg::OnKillfocusEdit3() 
{
    CWnd* pFocus = GetFocus();
    CWnd* pEdit1 = GetDlgItem(IDC_EDIT1);
    CWnd* pEdit2 = GetDlgItem(IDC_EDIT2);
    CWnd* pEdit3 = GetDlgItem(IDC_EDIT3);
 
    if(pFocus != pEdit1 && pFocus != pEdit2 && pFocus != pEdit3)
        MessageBox("");
}
0
375 / 322 / 32
Регистрация: 24.02.2011
Сообщений: 1,512
Записей в блоге: 1
18.09.2011, 19:29
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
void CDlg_testDlg::OnKillfocusEditX() 
{
        // При таком раскладе, раз мы сюда попали, то pEditX потерял фокус.
        // Следовательно, всегда выполняется pFocus != pEditX.
        // И все, что делаем здесь с pEditX лишнее.
        CWnd* pFocus = GetFocus();
//      CWnd* pEditX = GetDlgItem(IDC_EDITX);
        CWnd* pEditY = GetDlgItem(IDC_EDITY);
        CWnd* pEditZ = GetDlgItem(IDC_EDITZ);
 
        if(/*pFocus != pEditX && */ pFocus != pEditY && pFocus != pEditZ)
                MessageBox("");
}
0
Модератор
Эксперт по электронике
8979 / 6745 / 921
Регистрация: 14.02.2011
Сообщений: 23,856
18.09.2011, 20:01
Цитата Сообщение от bigredcat Посмотреть сообщение
CWnd* pEditY = GetDlgItem(IDC_EDITY);
а вот это зачем
завести переменную не судьба???
шелкаешь правой кнопкой мыши
создать переменную (режим контрол а не значения ) создастся переменная производная от CEdit
примерно вот так
DDX_Control(pDX, 1090, wEdit1);

Добавлено через 2 минуты
а потом можно так
if(wEdit1==(CEdit)GetFocus())
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
18.09.2011, 20:01
Помогаю со студенческими работами здесь

MFC CDialog
Простейший случай - подключаю диалог к SDI. При компиляции не видит класс диалога, хотя по нажатию точки выдает список его элементов ... ...

трабл с CDialog
это сам код : void CChemistView::OnNMDblclk(NMHDR *pNMHDR, LRESULT *pResult) { CTabForm_AddNew* pTab; ...

Рисование в CDialog (MFC)
Кто нибудь подскажите как узнать HWND диалога или любого его элемента А вообще мне нужно как-то при нажатии кнопки создавать окно в...

Как сделать переносимый CDialog
Создаем в VC++ простой проект в виде диалогового окна (главная форма). Помимо главного окна добавляем ещё один диалог (дочернее окно) с...

CDialog::PumpMessage виснет (бесконечный WM_PAINT?)
У меня есть следующая странная проблема на компьютере заказчика (куда я не имею доступа): OS: WinXP Приложение: MFC приложение Visual...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru