Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.70
MaD1
Сообщений: n/a
#1

Почему EnumChildWindows не работает в классе? - C++

19.05.2011, 11:28. Просмотров 1230. Ответов 5
Метки нет (Все метки)

У меня есть класс, в нем 2 функции - 1я функция:
C++
1
2
3
4
5
6
7
BOOL CALLBACK MyClass::BigButtonEnum(HWND hwnd, LPARAM)
{
    GetWindowText(hwnd, buffer, 100);
    MessageBox(0,buffer,'',0);
 
    return true;
}
а 2й функцие нужно вызвать EnumChildWindows с 1й функцией, вот она:
C++
1
2
3
4
void MyClass::First(HWND hWindow)
{
    EnumChildWindows(hWindow, BigButtonEnum, 0);
}
Но компилятор выдает ошибку:
error C2664: 'EnumChildWindows' : cannot convert parameter 2 from 'int (struct HWND__ *,long)' to 'int (__stdcall *)(struct HWND__ *,long)' None of the functions with this name in scope match the target type

Если эти функции отделить от класса, они работают. Но мне нужно именно чтобы они были
в классе, что нужно сделать? Не пойму... или привести как-то к нужному виду - ведь мешает
только этот '(__stdcall *)' <- я не пойму что это Разъясните!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.05.2011, 11:28     Почему EnumChildWindows не работает в классе?
Посмотрите здесь:

C++ Не работает getline() в классе
Почему игнорируется cin.getline() в классе? C++
C++ Не работает операция сложения в классе. Исправить код
Почему при переопределении виртуального метода в производном классе выводится метод базового? C++
Почему-то массив структур в классе не работает C++
Не работает статическая функция в шаблонном классе C++
C++ Почему не записывается символьный массив в классе?
Выделение памяти под массив в классе. Почему не могу правильно выделить? C++
C++ В классе дек неправильно работает оператор +
C++ Не работает Resize в классе
C++ Почему без пустого целочисленного поля в базовом классе программа виснет?
C++ Почему не срабатывает конструктор копирования в пользовательском классе

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kovalsky2
0 / 0 / 0
Регистрация: 05.08.2009
Сообщений: 96
19.05.2011, 23:59     Почему EnumChildWindows не работает в классе? #2
Объявите её как static функцию.
MaD1
Сообщений: n/a
22.05.2011, 20:34     Почему EnumChildWindows не работает в классе? #3
Объявил:
C++
1
2
3
public:
...
static BOOL CALLBACK    BigButtonEnum(HWND hwnd, LPARAM);
Но теперь компилятор орет что остальные функции и переменные этого класса не static (illegal reference to data member 'MyClass::nn' in a static member function) блин ((
Kovalsky2
0 / 0 / 0
Регистрация: 05.08.2009
Сообщений: 96
23.05.2011, 00:40     Почему EnumChildWindows не работает в классе? #4
Всё правильно,так он и должен орать - ф-ция static.
Теперь,либо делаем все static,что в большенстве
случеев не устраивает.Либо в качестве LPARAM BigButtonEnum(...)
передаём this класса:
в MyClass.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
class MyClass
{
public:
....
BOOL CALLBACK BigButtonEnum_NoStatic(HWND hwnd);
static BOOL CALLBACK BigButtonEnum(HWND hwnd, LPARAM m_this)
{
if (!m_this)return FALSE;
MyClass* mClass=(MyClass*)m_this;
return mClass->BigButtonEnum_NoStatic(hwnd);
};
....
}
а в MyClass.cpp
C++
1
2
3
4
5
6
7
8
BOOL CALLBACK BigButtonEnum_NoStatic(HWND hwnd)
{
 
return TRUE;
}
.............
EnumWindows((WNDENUMPROC)BigButtonEnum,(LPARAM)this);
.............
MaD1
Сообщений: n/a
23.05.2011, 18:18     Почему EnumChildWindows не работает в классе? #5
Спасибо, все работает
Kovalsky2
0 / 0 / 0
Регистрация: 05.08.2009
Сообщений: 96
24.05.2011, 00:49     Почему EnumChildWindows не работает в классе? #6
Всегда пожалуйста.
Yandex
Объявления
24.05.2011, 00:49     Почему EnumChildWindows не работает в классе?
Ответ Создать тему
Опции темы

Текущее время: 21:15. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru