Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/21: Рейтинг темы: голосов - 21, средняя оценка - 5.00
CEO
Эксперт С++
 Аватар для Alligieri
2258 / 1248 / 57
Регистрация: 16.03.2009
Сообщений: 3,588

"Мертвый" немодальный диалог в WinAPI

03.05.2009, 00:20. Показов 4174. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В теле проги вызывается немодальное диалоговое окно:

DialogBox(hInst,MAKEINTRESOURCE(IDD_DIAL OGBAR),hWnd,MainDlgProc);
Ну и как обычно есть диалоговая процедура:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
BOOL CALLBACK MainDlgProc(HWND hDlg,UINT uMsg,WPARAM wParam,LPARAM IParam)
{
switch (uMsg) { 
case WM_INITDIALOG: 
return TRUE; 
case WM_COMMAND: 
switch (LOWORD(wParam)) { 
case ID_OKE:
EndDialog(hDlg,TRUE); 
return TRUE; 
} 
break; 
} 
return FALSE;
}
Как понятно в окне есть кнопочка "ОК" которая вызывает закрытие диалогового окна. Вроде б все гуд, НО после запуска диалога программа не реагирует ни на какие действия (ну это понятно - диалоговая процедура берет управление на себя), но и диалог не хочет закрыватся кнопкой. где ошибка? премного благодарен за ответ.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
03.05.2009, 00:20
Ответы с готовыми решениями:

Немодальный диалог в DLL
Пытаюсь в функции DLL создать немодальный диалог с помощью CreateDialog. Функция возвращает ошибку 1813 (указанный тип ресурса в файле...

Создать немодальный диалог
Написать программу, в которой используется диалог для работы со структурами данных, определяющими списки. Ввод элементов данных...

Заменить немодальный диалог на модальный
Всем привет. У меня появилась некоторая проблема, при изучении языка С++Bilder 6.0 Так как я пропустил некоторое кол-во пар ( я учусь в...

17
 Аватар для Шерсть-На-Носу
48 / 48 / 8
Регистрация: 30.01.2009
Сообщений: 168
03.05.2009, 11:11
Проверь идентификатор ID_OKE, соответствует ли он кнопке в этом диалоговом окне? Так вроде все в порядке, только есть пара замечаний: во-первых DialogBox() создает МОДАЛЬНОЕ диалоговое окно, во-вторых - второй параметр EndDialog() - значение, которое вернет функция DialogBox() после закрытия диалога, тут лучше ставить wParam.
0
CEO
Эксперт С++
 Аватар для Alligieri
2258 / 1248 / 57
Регистрация: 16.03.2009
Сообщений: 3,588
03.05.2009, 11:31  [ТС]
Цитата Сообщение от Шерсть-На-Носу Посмотреть сообщение
Проверь идентификатор ID_OKE, соответствует ли он кнопке в этом диалоговом окне? Так вроде все в порядке, только есть пара замечаний: во-первых DialogBox() создает МОДАЛЬНОЕ диалоговое окно, во-вторых - второй параметр EndDialog() - значение, которое вернет функция DialogBox() после закрытия диалога, тут лучше ставить wParam.
Хм, да насчет 1 замечания - согласен просто перепрограмировался немного вот и делаю ошибки. Идентификатор соответствует - поставил ID_OKE чтоб не путало с какой нить стандартной ID_OK кнопкой.

Добавлено через 4 минуты 9 секунд
Упорно не хочет нажиматся кнопка хотя и Tabstop поставлен на ней и процедура вроде правильная
0
 Аватар для Шерсть-На-Носу
48 / 48 / 8
Регистрация: 30.01.2009
Сообщений: 168
03.05.2009, 13:41
Хорошо бы посмотреть, как твое диалоговое окно объявлено в rc-файле.
0
CEO
Эксперт С++
 Аватар для Alligieri
2258 / 1248 / 57
Регистрация: 16.03.2009
Сообщений: 3,588
03.05.2009, 15:12  [ТС]
Прошу-с

/////////////////////////////////////////////////////////////////////////////
//
// Dialog
//

IDD_DIALOGBAR DIALOGEX 0, 0, 330, 75
STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_VISIBLE | WS_CAPTION
CAPTION "New Task"
FONT 8, "MS Shell Dlg", 400, 0, 0x0
BEGIN
CTEXT "Task Editor v1.0",IDC_STATIC,126,4,77,8
EDITTEXT IDC_EDIT1,19,39,224,14,ES_AUTOHSCROLL | NOT WS_TABSTOP
PUSHBUTTON "OK",ID_OKE,250,38,50,14
END
0
2343 / 499 / 22
Регистрация: 01.04.2009
Сообщений: 2,200
03.05.2009, 15:26
Alligieri, простите за идиотский вопрос, но где объявлена hDlg?
И в каком месте ей присваивается значение?
Можно кусок кода?
0
CEO
Эксперт С++
 Аватар для Alligieri
2258 / 1248 / 57
Регистрация: 16.03.2009
Сообщений: 3,588
03.05.2009, 15:44  [ТС]
BOOL CALLBACK MainDlgProc(HWND hDlg, - разве здесь нет обьявления?

Вызов:
static HINSTANCE hInst;
hInst=GetModuleHandle(NULL);

//в блоке обработки WM_PAINT
if (task_ptr==1) {task_ptr=0ialogBox(hInst,MAKEINTRESOU RCE(IDD_DIALOGBAR),hWnd,MainDlgProc);}
0
2343 / 499 / 22
Регистрация: 01.04.2009
Сообщений: 2,200
03.05.2009, 15:50
хм... ну ладно, то что есть выглядит нормально, вот и цепляюсь за все подряд...
а до MainDlgProc дело вообще доходит?
хоть какой-то вызов? отладчиком проверить надо.
0
CEO
Эксперт С++
 Аватар для Alligieri
2258 / 1248 / 57
Регистрация: 16.03.2009
Сообщений: 3,588
03.05.2009, 16:09  [ТС]
Да, доходит. но вот после обработки

case WM_INITDIALOG:
return TRUE;

отладчик прыгнул на
}
и застрял. думаю ошибка в этом

Добавлено через 4 минуты 46 секунд
case WM_COMMAND: обработку нажатия клавиш не получает
0
2343 / 499 / 22
Регистрация: 01.04.2009
Сообщений: 2,200
03.05.2009, 16:15
Т.е. WM_INITDIALOG он не опознал... как говорится, УПС!
а у вас там не Vista, случайно?
0
CEO
Эксперт С++
 Аватар для Alligieri
2258 / 1248 / 57
Регистрация: 16.03.2009
Сообщений: 3,588
03.05.2009, 16:18  [ТС]
Цитата Сообщение от Patch Посмотреть сообщение
Т.е. WM_INITDIALOG он не опознал... как говорится, УПС!
а у вас там не Vista, случайно?
Нет ХР нормальный, и гравное раньше работал с диалоговыми окнами и все было ОК.
0
2343 / 499 / 22
Регистрация: 01.04.2009
Сообщений: 2,200
03.05.2009, 16:19
похоже, что-то у вас в настройках поменялось...
MS VC 2005/2008?
0
CEO
Эксперт С++
 Аватар для Alligieri
2258 / 1248 / 57
Регистрация: 16.03.2009
Сообщений: 3,588
03.05.2009, 16:21  [ТС]
MS VS 2008 Pro, закоментил WM_INITDIALOG - результата нет, главное заголовок окна диалога кажется неактивным и обработка нажатия кнопки отсутствует.
0
2343 / 499 / 22
Регистрация: 01.04.2009
Сообщений: 2,200
03.05.2009, 16:27
Понятно. Я как MS VS 2008 Pro поставил - тоже с забодался... все работает не так как надо. После полу дня лазенья в справках и настройках обычно удается сделать как надо. И каждый новый проект приходится настраивать заново.
Какое счастье, что у меня MS VS 6.0 сохранился.
0
125 / 123 / 0
Регистрация: 30.03.2009
Сообщений: 766
03.05.2009, 17:22
Цитата Сообщение от Alligieri Посмотреть сообщение
//в блоке обработки WM_PAINT
а это что за ололо?!! создавать диалог при обработке wm_paint&!!
0
CEO
Эксперт С++
 Аватар для Alligieri
2258 / 1248 / 57
Регистрация: 16.03.2009
Сообщений: 3,588
03.05.2009, 19:05  [ТС]
Цитата Сообщение от Lolcht0 Посмотреть сообщение
а это что за ололо?!! создавать диалог при обработке wm_paint&!!
во 1 - он создается при перерисовке окна при выполнении неких условий
во 2 - какая разница?!
в 3 - переставлял в другие блоки - проблема совсем не в том
0
 Аватар для Шерсть-На-Носу
48 / 48 / 8
Регистрация: 30.01.2009
Сообщений: 168
03.05.2009, 23:11
Лучший ответ Сообщение было отмечено Alligieri как решение

Решение

Стиль диалогового окна сделай

Code
1
STYLE WS_POPUP | WS_DLGFRAME | DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_VISIBLE | WS_CAPTION
Если уж это не поможет, тогда я не знаю... Во всяком случае у меня и в 6-й и в 2005 Студии все работает, как надо.

Добавлено через 10 минут 9 секунд
Вобщем, я тут поигрался и думаю, что поможет Так, к слову - а что, 2008-я Студия такая же тормознутая, как и 2005-я?
1
CEO
Эксперт С++
 Аватар для Alligieri
2258 / 1248 / 57
Регистрация: 16.03.2009
Сообщений: 3,588
04.05.2009, 00:39  [ТС]
Цитата Сообщение от Шерсть-На-Носу Посмотреть сообщение
Стиль диалогового окна сделай

Code
1
STYLE WS_POPUP | WS_DLGFRAME | DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_VISIBLE | WS_CAPTION
Если уж это не поможет, тогда я не знаю... Во всяком случае у меня и в 6-й и в 2005 Студии все работает, как надо.

Добавлено через 10 минут 9 секунд
Вобщем, я тут поигрался и думаю, что поможет Так, к слову - а что, 2008-я Студия такая же тормознутая, как и 2005-я?
Спасибо большое изменение стиля помогло. 2008 вроде наиболее соответствует стандарту, но ошибки возникают почти всегда на пустом месте
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
04.05.2009, 00:39
Помогаю со студенческими работами здесь

Как создать немодальный диалог на Win64 API?
Собственно в Win32 API все довольно легко, а с Win64 возникли траблы. Вот таким образом создаем на Win32 API. #include...

Сабклассирование и немодальный диалог с нажатием ENTER/ESC
Проблема в использовании клавиш Enter и Escape при сабклассировании с испольщованием в качестве родителя - немодального диалога. (меню -...

Немодальный диалог для изменения цвета фона окна
Нужно создать немодальный диалог для изменения цвета фона главного окна. На окне диалога есть 3 элемента Slider и 3 элемента Edit для...

Диалог открытия файла на winApi
Здратвуйте как вызвать диалог открытия/сохранения файла в winApi?

Диалог в стиле MFC на WinAPI
Windows 7. Создаю диалог по шаблону с помощью DialogBoxIndirect. Шаблон - массив байт, выдран из exe-шника использующего MFC. Диалог...


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
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