Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.190.152.38] |
|
Сообщ.
#1
,
|
|
|
Microsoft Visual C++ 2012
В главном окне есть статик. Клик обрабатываю так: BOOL Ctest1Dlg::PreTranslateMessage(MSG* pMsg) { if( pMsg->message==WM_LBUTTONUP ) { if( pMsg->hwnd && ::GetDlgCtrlID( pMsg->hwnd ) == ID_STATIC_TEST) { CSoo ss; ss.DoModal(); } } return CDialogEx::PreTranslateMessage(pMsg); } CSoo - окно диалога, созданное студией - ничего не добавлял. После его закрытия появляется ошибка: Прикреплённая картинка
Не пойму почему вылазит эта ошибка? |
Сообщ.
#2
,
|
|
|
А что в CSoo?
|
Сообщ.
#4
,
|
|
|
А что в твоем wincore.cpp где строка 994?
|
Сообщ.
#5
,
|
|
|
а у меня диска F нет! Похоже компилятор его создает во время компиляции...
|
Сообщ.
#6
,
|
|
|
Цитата Vladimir_ @ а у меня диска F нет! Похоже компилятор его создает во время компиляции... А может просто где-то какие-то пути прописаны |
Сообщ.
#7
,
|
|
|
Нигде ничего не прописано: просто создал проект и на статике ловлю килик - см. исходник
|
Сообщ.
#8
,
|
|
|
Объект не создается здесь.
Ctest1Dlg dlg; |
Сообщ.
#9
,
|
|
|
Не понял, какой объект?
|
Сообщ.
#10
,
|
|
|
dlg у тебя 0. Память для него даже выделяется, но он не инициализирован. Поэтому когда DoModal вызываешь у неинициализированного объекта все и падает.
Добавлено Грубо говоря представь если после это строчки memset(&dlg,0,sizeof(dlg)); |
Сообщ.
#11
,
|
|
|
dlg это главное окно со статиком. этот код создала студия.
если закомментировать, то все работает: BOOL Ctest1Dlg::PreTranslateMessage(MSG* pMsg) { if( pMsg->message==WM_LBUTTONUP ) { if( pMsg->hwnd && ::GetDlgCtrlID( pMsg->hwnd ) == ID_STATIC_TEST) { CSoo ss; // ss.DoModal(); } } return CDialogEx::PreTranslateMessage(pMsg); } |
Сообщ.
#12
,
|
|
|
Цитата Vladimir_ @ а у меня диска F нет! Похоже компилятор его создает во время компиляции... Просто поищи указанный файл на своём компе. И посмотри, что там в этой строке. Скрытый текст А не может быть проблемой то, что указатель на "Parent" равен NULL ? |
Сообщ.
#13
,
|
|
|
Кликаю по статику - появляется окно CSoo - закрываю это окно и появляется ошибка.
Т.е. либо главное окно чего-то не существующее пытается обработать, либо в окне CSoo чего-то... Прикреплённая картинка
Добавлено Сам себе и ответил! return TRUE забыл! BOOL Ctest1Dlg::PreTranslateMessage(MSG* pMsg) { if( pMsg->message==WM_LBUTTONUP ) { if( pMsg->hwnd ) { CSoo ss; ss.DoModal(); return TRUE; // !!!!!!!!!!!! и все заработало } } return CDialogEx::PreTranslateMessage(pMsg); |
Сообщ.
#14
,
|
|
|
Цитата ter_nk_ @ dlg у тебя 0. Память для него даже выделяется, но он не инициализирован. Поэтому когда DoModal вызываешь у неинициализированного объекта все и падает. Добавлено Вчера, 21:23 Грубо говоря представь если после это строчки memset(&dlg,0,sizeof(dlg)); Конструктор по умолчанию - не? Это же плюсы. |
Сообщ.
#15
,
|
|
|
Цитата Vladimir_ @ dlg это главное окно со статиком. этот код создала студия. если закомментировать, то все работает: Так у тебя объект не инициализирован, понятно, что ты комментируешь функцию обращения к неинициализированному объекту. Ты можешь создать указать и все нормально, но когда ты попытаешься записать по неинициализированному указателю, то будет тоже - неопределенное поведение. Если ты попробуешь вызвать не DoModal, а какой-то другой метод будет тоже самое. Не знаю, что там и как делает библиотека MFC, вообще ее стараются не использовать, и я не использовал. Может пойти другим путем? Добавлено Цитата VisualProg @ Конструктор по умолчанию - не? Это же плюсы. Там конструктор берет хендл родителя вроде, но можно NULL, с конструктором там все нормально вроде. А почему возвращает объект заполненный нулями - ну хрен его знает, это библиотеку копать надо. |
Сообщ.
#16
,
|
|
|
А вообще мне не понятно: почему, если я поставлю кнопку и по ее нажатию выведу это же окно, то ошибки нет.
Т.е. со статиком вывод из PreTranslateMessage(), а по кнопке - OnBnClicked() |