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

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

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

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

19.05.2011, 11:28. Просмотров 1251. Ответов 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++
Собственно код компилится, но вылетает в отладчике сообщение! #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++
Все привет! не могу понять почему в классе не получается выделить память из стека для массива. Есть класс: Надо чтоб конструктор класса...

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

Почему при переопределении виртуального метода в производном классе выводится метод базового? - 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); то операция...

не работает префиксный оператор в классе - C++
Проблема : не работает &quot;++plus&quot; в &quot;void ClassB::count()&quot; Есть вариант решить это так : поменять &quot;private&quot; на &quot;protected&quot; в обоих классах...

Не работает статическая функция в шаблонном классе - C++
Под windows все отлично работало, но под linux выдает ошибку : /home/stalker/Рабочий стол/H-Array/Homework_Array/Array.h:121: ошибка:...

В классе дек неправильно работает оператор + - C++
Я написал класс дек. И вскоре обнаружилась проблема того что оператор + работает не так как надо. Было написано 3 оператора. Дек+Дек....


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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 не работает в классе?
Ответ Создать тему
Опции темы

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