Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

получить указатель на CWnd из hwnd

333
28 июля 2006 года
GHopper
200 / / 28.12.2004
Здраствуйте.
У меня есть хендл окна (HWND который). Хочу по нему узнать состояние окна (всмысле скрыто оно или нет). Подскажите как.
354
28 июля 2006 года
ШпиЁн
468 / / 19.02.2006
Э-э-э... а при чем тут тогда CWnd? ;-)

Есть API функция - IsWindowVisible(HWND hWnd) - скажет скрытое окно или нет(если создавалось с WS_VISIBLE или без него) Это то что ты искал? ;-)

функция IsIconic определяет свернуто окно или нет.
472
28 июля 2006 года
Vovka
139 / / 10.02.2005
А как узнать CWnd* диалогового окна в этом окне?
GetActiveWindow() не подходит, т.к. иногда возвращает NULL
354
29 июля 2006 года
ШпиЁн
468 / / 19.02.2006
Мдяя... я ничего подобного не слышал, чтобы можно было как-то из второй проги получить указатель на класс в первой проге. Похоже, мне есть еще чему поучиться... :-))))
333
29 июля 2006 года
GHopper
200 / / 28.12.2004
ШпиЁн - спаситель мой! То, что нужно! Спасибо.
Но все-таки хотелось-бы узнать, можно по HWND получить CWnd* в MFC?
354
29 июля 2006 года
ШпиЁн
468 / / 19.02.2006
Я в MFC плохо разбираюсь... Но указатель на класс из хэндла окна врядли удастся получить. Если тебе просто нужны методы класса CWnd, так есть аналоги на API :-))))
1.8K
29 июля 2006 года
_const_
229 / / 26.11.2003
[QUOTE=GHopper]ШпиЁн - спаситель мой! То, что нужно! Спасибо.
Но все-таки хотелось-бы узнать, можно по HWND получить CWnd* в MFC?[/QUOTE]
Никак, ибо CWnd может попросту не существовать (например, элементы управления на диалоге). А вот чтобы создать CWnd по заданному HWND, используй CWnd::Attach(HWND)
 
Код:
CWnd myWnd;
myWnd.Attach(hWnd);
//....
myWnd.Detach();
333
31 июля 2006 года
GHopper
200 / / 28.12.2004
Есть выход - Wnd::FromHandle(HWND)
вроде работает! Во всяком случае следующий мой код работает нормально:

for (int i=0; i<m_hwndArr.GetCount(); i++)
{
memset(str, 0, 255);
::GetWindowText((HWND)m_hwndArr.GetAt(i), str, 255);
if ((HWND)m_hwndArr.GetAt(i) == active)
active_index = i;
tci.pszText = str;
if (CWnd::FromHandle((HWND)m_hwndArr.GetAt(i))->GetStyle() & WS_VISIBLE)
InsertItem(i, &tci);
}
472
02 августа 2006 года
Vovka
139 / / 10.02.2005
Я сделал так:

CWnd *W;
W = this;

А дальше я думаю понятно...
У меня работает всегда!
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог