Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
1 / 1 / 1
Регистрация: 15.05.2010
Сообщений: 54
1

Использование Attach(HWND) и Detach()

04.07.2011, 19:28. Показов 1955. Ответов 4
Метки нет (Все метки)

Привет всем!
Что делают функции Attach(HWND) и Detach() объявленные в классе CWnd. В MSDN для Attach написано, что она присоединяет Windows окно к CWnd объекту, а в Detach, наоборот отоединяет дескриптор от CWnd объекта.
Пишу:
C++
1
2
    m_hWnd=m_static->Detach();
    m_static->Attach(m_hWnd);
Поидее, первая функция отсоединяет дискриптор, а потом обратно присоединяет этот дескриптор к объекту. Но при удалении объекта или через функцию DestroyWindow, или delete (m_static была создана динамически) я лезу в другую область памяти, короче ошибка возникает типа 'Интрукция по адресу ...'.
Как вообще эти функции используются, каково их предназначение?
0
Заказывайте контрольные, курсовые и дипломы здесь.
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.07.2011, 19:28
Ответы с готовыми решениями:

Thread::Detach() в c++
Добрый день или что у вас там! По заголовку понятно о чём будет вопрос ,я прочитал достаточно много...

Std::thread::detach()
Что произойдет, если main - поток завершится раньше чем child.detach()? Добавлено через 3 минуты...

Потоки без join() или detach()
Почему такой код выводит данные в консоль, не смотря на выбрасывание исключения? void...

Как отделить поток с помощью detach?
Вообщем, не могу понять в чем проблема, хочу подвесить фоновый поток для отлавливания нажатий...

4
1 / 1 / 2
Регистрация: 05.08.2009
Сообщений: 96
05.07.2011, 18:13 2
Вообще-то Вы делаете всё правильно.
Возможно ошибка в том,что у Вас m_hWnd - скажем родительского окна.
А Вы ей присваиваете m_static->Detach()
Запишите следующим образом:
Код
HWND hWnd=m_static->Detach();
m_static->Attach(hWnd);
0
1 / 1 / 1
Регистрация: 15.05.2010
Сообщений: 54
05.07.2011, 20:21  [ТС] 3
Точно! Это ж был дескриптор родителя.
По-идее должно и так работать:
Код
m_static->hWnd=m_static->Detach();
m_static->Attach(m_static->hWnd);
Сейчас проверю. Спасибо!
0
1 / 1 / 1
Регистрация: 15.05.2010
Сообщений: 54
05.07.2011, 20:25  [ТС] 4
Вернее так:
Код
m_static->m_hWnd=m_static->Detach();
m_static->Attach(m_static->m_hWnd);
0
1 / 1 / 1
Регистрация: 15.05.2010
Сообщений: 54
05.07.2011, 20:35  [ТС] 5
Вот и проверил! В итоге мой вышеописанный код не работает, а Ваш работает. Почему, интересно?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.07.2011, 20:35

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Как закрыть поток после вызова detach()?
Всем здрасьте ! С join всё понятно, программа ждёт, когда завершится этот поток. Допустим я...

Для чего служит первый параметр (HWND hWnd) в функции WndProc?
// функция обработки сообщений LRESULT CALLBACK WndProc( HWND hWnd, UINT message, WPARAM...

Окно на WinAPI, параметр функции WndProc (HWND hWnd,.)
Пытаюсь понять какое значение хранит первый параметр HWND hWnd в функции WndProc. В Windows в...

Почему переменная HWND hwnd объявлена дважды?
Один раз в функции WinMain: int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.