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

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

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

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

19.05.2011, 11:28. Просмотров 1259. Ответов 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++):

Почему-то массив структур в классе не работает - C++
Собственно код компилится, но вылетает в отладчике сообщение! #include &lt;iostream&gt; using namespace std; class Map_object{ public:...

Почему не записывается символьный массив в классе? - C++
в отмеченном месте выдает ошибку доступа для записи в первом случае, во втором все нормально, почему? #include&lt;iostream&gt; using...

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

Почему не срабатывает конструктор копирования в пользовательском классе - C++
вроде со всем разобралась, но не заходит в конструктор копирования. В чём ошибка? #include &lt;iostream&gt; #include &quot;welcome.h&quot; ...

Почему выводится в виде таблицы и почему не работает сортировка - C++
почему выводится в виде таблицы? почему не работает сортировка? и как туда можно вставить классы комнат? hotel.h #include...

Почему без пустого целочисленного поля в базовом классе программа виснет? - C++
Итак, имеет три маленьких файлика: //expclasses10l.h class CLB { public: int erunda; CLB(); ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Kovalsky2
0 / 0 / 0
Регистрация: 05.08.2009
Сообщений: 96
19.05.2011, 23:59 #2
Объявите её как static функцию.
0
MaD1
Сообщений: n/a
22.05.2011, 20:34 #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 #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);
.............
0
MaD1
Сообщений: n/a
23.05.2011, 18:18 #5
Спасибо, все работает
Kovalsky2
0 / 0 / 0
Регистрация: 05.08.2009
Сообщений: 96
24.05.2011, 00:49 #6
Всегда пожалуйста.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.05.2011, 00:49
Привет! Вот еще темы с ответами:

Выделение памяти под массив в классе. Почему не могу правильно выделить? - C++
Все привет! не могу понять почему в классе не получается выделить память из стека для массива. Есть класс: Надо чтоб конструктор класса...

Почему при переопределении виртуального метода в производном классе выводится метод базового? - C++
Всем добра! Помогите разобраться почему при переопределении виртуального метода в производном классе выводится метод базового ? По идеи...

Не работает Resize в классе - C++
Что здесь не так? При добавлении в проект падает на Resize Array.h #pragma once #include&quot;Header.h&quot; #include&quot;Account.h&quot; ...

Не работает getline() в классе - C++
Почему-то, если поставить char name; ... cin&gt;&gt;name;, то имя вводится, а если использовать string name; ... getline(cin, name); то операция...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
24.05.2011, 00:49
Ответ Создать тему
Опции темы

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