Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/18: Рейтинг темы: голосов - 18, средняя оценка - 4.50
12 / 11 / 2
Регистрация: 03.04.2016
Сообщений: 502

ShowWindow под MFC и под Winapi

17.11.2019, 19:47. Показов 3757. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Столкнулся с такой заморочкой.
Под MFC - BOOL ShowWindow( int nCmdShow );
Под Winapi - BOOL ShowWindow(HWND hWnd, int nCmdShow);
У меня Winapi функция(CreateDialog) возвращает HWND. Но как мне теперь это HWND использовать под MFC, если там принимается только один аргумент?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
17.11.2019, 19:47
Ответы с готовыми решениями:

Есть ли аналог winapi функции showWindow в Linux?
Есть ли аналог winapi функции showWindow в Linux? Заранее спасибо.

Воткнуть 3 харда в комп (2 из которых SSD) 1 под систему 1 под игры и 1 под файлопомойку
И так задумываюсь о сборке пк для "Покатать" посетила такая мысль а что если воткнуть 3 харда в комп (2 из которых SSD) 1 под систему 1...

Двойная буферизация под Win на VC++ (MFC)
Двойная буферизация под Win на VC++(MFC) - кто-нибудь знает - это вообще возможно?? Или по-другому: можно-ли создать в MFC SDI копию...

10
фрилансер
 Аватар для Алексей1153
6466 / 5688 / 1131
Регистрация: 11.10.2019
Сообщений: 15,131
17.11.2019, 20:07
zombivadim, используй апишные функции. MFC - это тот же WinAPI, только с обёртками, "из MFC" можно спокойно вызывать WinAPI
0
12 / 11 / 2
Регистрация: 03.04.2016
Сообщений: 502
17.11.2019, 20:09  [ТС]
Цитата Сообщение от Алексей1153 Посмотреть сообщение
"из MFC" можно спокойно вызывать WinAPI
Подскажите как мне в данном случае вызвать ShowWindow?
0
фрилансер
 Аватар для Алексей1153
6466 / 5688 / 1131
Регистрация: 11.10.2019
Сообщений: 15,131
17.11.2019, 20:11
zombivadim, а, ты вон, про что. Так создавай диалог при помощи CDialog
0
12 / 11 / 2
Регистрация: 03.04.2016
Сообщений: 502
17.11.2019, 20:12  [ТС]
Цитата Сообщение от Алексей1153 Посмотреть сообщение
Так создавай диалог при помощи CDialog
не могу мне надо воспользоваться именно CreateDialog.
0
фрилансер
 Аватар для Алексей1153
6466 / 5688 / 1131
Регистрация: 11.10.2019
Сообщений: 15,131
17.11.2019, 20:14
Цитата Сообщение от zombivadim Посмотреть сообщение
ShowWindow(HWND hWnd, int nCmdShow)
ну а что мешает вызвать данную функцию, указав хендл диалога?
0
12 / 11 / 2
Регистрация: 03.04.2016
Сообщений: 502
17.11.2019, 20:15  [ТС]
Цитата Сообщение от Алексей1153 Посмотреть сообщение
"из MFC" можно спокойно вызывать WinAPI
Так можно вызвать ShowWindow, без обертки MFC или нет.

Добавлено через 38 секунд
Цитата Сообщение от Алексей1153 Посмотреть сообщение
ну а что мешает вызвать данную функцию, указав хендл диалога?
А как?
0
фрилансер
 Аватар для Алексей1153
6466 / 5688 / 1131
Регистрация: 11.10.2019
Сообщений: 15,131
17.11.2019, 20:20
zombivadim, да как нравится, так и вызывай. Хендл же есть? Не пойму, в чём проблема то

Добавлено через 2 минуты
C++
1
2
HWND dlgH=...;
ShowWindow(dlgH, SW_SHOW);
Добавлено через 2 минуты
можно ещё попробовать такой трюк

C++
1
2
3
4
5
6
7
8
9
10
HWND h=...;
CDialog dlg;
dlg.Attach(h);
 
//вызываем функции dlg
 
//когда будет момент вызова деструктора,
//в деструкторе произойдёт его DestroyWindow(h)
//Если нужно это избежать отсоединяем хендл
dlg.Detach();
0
12 / 11 / 2
Регистрация: 03.04.2016
Сообщений: 502
17.11.2019, 21:35  [ТС]
Алексей1153, Я упростил описание вопроса, и потому вы не поняли.
Я создаю диалог функцией CreateDialogIndirect, для того чтобы считать из памяти структуру LPDLGTEMPLATE,
Мы про это разговаривали в прошлом моем посте. Как ни странно все прекрасно заработало, диалоги показываются,
но непонятки втыкают палки в колеса. Мне необходимо во первых включить, отображене этих диалогов, потому что по умолчанию у них нет флага, WS_VISIBLE. Можно конечно пропарсить структуру, что я на данный момент и делаю.
А так же необходимо потом вызвать DestroyWindow, для них. Получается что хендла нет у диалога, есть HWND. Возможно я что то делаю не правильно, пока не понял.
Цитата Сообщение от Алексей1153 Посмотреть сообщение
HWND dlgH=...;
ShowWindow(dlgH, SW_SHOW);
Функция не принимает двух параметров, что собственно и должно быть.
Цитата Сообщение от Алексей1153 Посмотреть сообщение
HWND h=...;
CDialog dlg;
dlg.Attach(h);
Падает в исключение
AppMsg - Warning: calling DestroyWindow in CWnd::~CWnd; OnDestroy or PostNcDestroy in derived class will not be called.
Вот и .

Добавлено через 4 минуты
Причем падает просто на этой строчке (dlg.Attach(hWnd);, дальше я ничего не писал еще.
0
фрилансер
 Аватар для Алексей1153
6466 / 5688 / 1131
Регистрация: 11.10.2019
Сообщений: 15,131
17.11.2019, 21:42
Лучший ответ Сообщение было отмечено zombivadim как решение

Решение

Цитата Сообщение от zombivadim Посмотреть сообщение
Получается что хендла нет у диалога, есть HWND
это и есть хендл диалога. То есть, винапи не знает, что это диалог или, скажем, кнопка. Это знает оконная процедура, привязанная к хендлу

попробуй явно указать глобальную область видимости
::ShowWindow(dlgH, SW_SHOW);

Добавлено через 2 минуты
Цитата Сообщение от zombivadim Посмотреть сообщение
Падает в исключение
то есть, прямо на аттаче падает? Возможно. Я и не обещал, что это будет работать. С CDC и HDC такое прокатывает, однако.

Или всё же забыл вызвать dlg.Detach(); ?
1
12 / 11 / 2
Регистрация: 03.04.2016
Сообщений: 502
17.11.2019, 21:53  [ТС]
Цитата Сообщение от Алексей1153 Посмотреть сообщение
Или всё же забыл вызвать dlg.Detach();
Забыл простите. Заработало.

Добавлено через 1 минуту
::ShowWindow(hWnd, SW_HIDE);
Да глобальная область видимости, как же я забыл то. Спасибо вам большое!!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.11.2019, 21:53
Помогаю со студенческими работами здесь

WinApi в DevCpp под Windows 8.1
Создаю стандартный проэкт Windows Aplication в DevCpp, ничего не меняю. Скомпилировать и выполнить. Линкует, говорит "Проэкт не...

Поддерживает ли библиотека MFC программирование под OpenGL?
У меня возник такой вопрос: Поддерживает ли библиотека MFC программирование под OpenGL?

Рисование эллипса под углом, WinApi
Всем привет, в WinApi для рисования эллипса используется функция Ellipse(), но она рисует только горизонтальное или вертикальное...

LPT порт в winapi под winXP
Здравствуйте ПРОГРАММИСТЫ ! Подскажите пожайлуста (а то я целых два дня потратил так и не разобрался) где доступно можно понять как в...

Не модальное окно (без MFC) под Visual Studio
Есть диалоговое окно, которое создавалось через методы Visual Studio(2005) -> New Dialog в окне списков диалоговых окон. В меню Properties...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru