![]() |
|
![]() ![]() ![]() |
|
Druxa |
|
|||
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 16.9.2007 Репутация: нет Всего: нет |
Подскажите плиз, как из API функции вызвать метод класса MFC
У меня приложение сделано большей частью на MFC, но есть функция WinAPI, как заставить из функции WinAPI вызывать методы моего класса? |
|||
|
||||
Greeen |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 710 Регистрация: 13.8.2006 Где: Петербург Репутация: 10 Всего: 18 |
Так, еще раз. Что за функция и что тебе нужно вызвать?
-------------------- Подпись больше не нужна |
|||
|
||||
Druxa |
|
|||
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 16.9.2007 Репутация: нет Всего: нет |
Например у нас есть функция DWORD WINAPI NetThread(LPVOID lpParam) нам надо изменить из неё элемент static text в классе CClientDlg Сделал указатель глобальный, методы класса доступны, но программа вылетает. CClinetDlg *ClientDlg; Это сообщение отредактировал(а) Druxa - 16.9.2007, 17:11 |
|||
|
||||
Greeen |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 710 Регистрация: 13.8.2006 Где: Петербург Репутация: 10 Всего: 18 |
ничего не понимаю
![]() -------------------- Подпись больше не нужна |
|||
|
||||
Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Это функция потока? Тогда объект CWnd, объявленный (созданный) в главном потоке вообще говоря невалиден в других потоках. Некоторые функции для него работать будут, некоторые - нет. Так что лучше считать - невалиден всегда. Используй API-аналоги и hWnd. Скажем, текст ты можешь установить с помощью ::SetWindowText (hWnd) и т.д.
Далее, глобальные переменные не стоит использовать - это очень ограничивает гибкость программы. Можно 1) как-то передать hWnd в поток (например, lpParam сделать адресом некой структуры, куда напихать все, что нужно потоку для счастья) 2) однако, я считаю, что лучше не отягощать поток лишними деталями. Пусть сообщит приложению, что нужно обновиться, а приложение пусть обновляется. Сделать это можно, посла сообщение - либо известному тебе окну (опять же, не CWnd, а hWnd!), либо просто главному потоку (PostThreadMessage). -------------------- ... |
|||
|
||||
Druxa |
|
|||
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 16.9.2007 Репутация: нет Всего: нет |
В реализации конструктора класса инициализировал указатель ClientDlg = this;
И ввёл его как глобальную переменную CXClinetDlg *ClientDlg; Доступ к элементам работает. Например, ClientDlg->filesList.AddString(szRecvBuff); Теперь следующий вопрос, с Visual Studio и MFC не общался, как выборочно сделать элементы ListBox жирными? Это сообщение отредактировал(а) Druxa - 17.9.2007, 17:07 |
|||
|
||||
Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Так же как в WinAPI - через OwnerDraw.
-------------------- ... |
|||
|
||||
![]() ![]() ![]() |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |