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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.70
MaD1
Сообщений: n/a
19.05.2011, 11:28     Почему EnumChildWindows не работает в классе? #1
У меня есть класс, в нем 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 *)' <- я не пойму что это Разъясните!
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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 не работает в классе?
Ответ Создать тему
Опции темы

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