Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как из функции API вызвать метод MFC? 
:(
    Опции темы
Druxa
Дата 16.9.2007, 15:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 16.9.2007

Репутация: нет
Всего: нет



Подскажите плиз, как из API функции вызвать метод класса MFC
У меня приложение сделано большей частью на MFC, но есть функция WinAPI, как заставить из функции WinAPI вызывать методы моего класса?
PM MAIL   Вверх
Greeen
Дата 16.9.2007, 16:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 710
Регистрация: 13.8.2006
Где: Петербург

Репутация: 10
Всего: 18



Так, еще раз. Что за функция и что тебе нужно вызвать?


--------------------
Подпись больше не нужна
PM MAIL ICQ Skype   Вверх
Druxa
Дата 16.9.2007, 17:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 16.9.2007

Репутация: нет
Всего: нет



Цитата(Greeen @ 16.9.2007,  16:00)
Так, еще раз. Что за функция и что тебе нужно вызвать?

Например у нас есть функция DWORD WINAPI NetThread(LPVOID lpParam) нам надо изменить из неё элемент static text в классе CClientDlg

Сделал указатель глобальный, методы класса доступны, но программа вылетает.
CClinetDlg *ClientDlg;

Это сообщение отредактировал(а) Druxa - 16.9.2007, 17:11
PM MAIL   Вверх
Greeen
Дата 16.9.2007, 17:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 710
Регистрация: 13.8.2006
Где: Петербург

Репутация: 10
Всего: 18



ничего не понимаю smile 


--------------------
Подпись больше не нужна
PM MAIL ICQ Skype   Вверх
Earnest
Дата 16.9.2007, 19:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



Это функция потока? Тогда объект CWnd, объявленный (созданный) в главном потоке вообще говоря невалиден в других потоках. Некоторые функции для него работать будут, некоторые - нет. Так что лучше считать - невалиден всегда. Используй API-аналоги и hWnd. Скажем, текст ты можешь установить с помощью ::SetWindowText (hWnd) и т.д.
Далее, глобальные переменные не стоит использовать - это очень ограничивает гибкость программы. Можно 
1) как-то передать hWnd в поток (например, lpParam сделать адресом некой структуры, куда напихать все, что нужно потоку для счастья) 
2) однако, я считаю, что лучше не отягощать поток лишними деталями. Пусть сообщит приложению, что нужно обновиться, а приложение пусть обновляется. Сделать это можно, посла сообщение - либо известному тебе окну (опять же, не CWnd, а hWnd!), либо просто главному потоку (PostThreadMessage).



--------------------
...
PM   Вверх
Druxa
Дата 17.9.2007, 17:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 16.9.2007

Репутация: нет
Всего: нет



В реализации конструктора класса инициализировал указатель ClientDlg = this;
И ввёл его как глобальную переменную CXClinetDlg *ClientDlg;
Доступ к элементам работает. Например, ClientDlg->filesList.AddString(szRecvBuff);
Теперь следующий вопрос, с Visual Studio и MFC не общался, как выборочно сделать элементы ListBox жирными?

Это сообщение отредактировал(а) Druxa - 17.9.2007, 17:07
PM MAIL   Вверх
Earnest
Дата 17.9.2007, 17:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



Так же как в WinAPI - через OwnerDraw.


--------------------
...
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.0659 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.