Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.12.2010, 03:00   #1
jec
Пользователь
 
Регистрация: 04.09.2010
Сообщений: 42
По умолчанию Вызов метода в другом классе

Всем привет
делаю окно на WinApi и там есть вот такая строчка:

Код:
wc.lpfnWndProc = WindowProc;
само создание окна у меня в одном классе а функция WindowProc, находится в другом классе, и как мне ее вызвать??

сделал так:

Код:
wc.lpfnWndProc = CEvents::WindowProc;
но пришлось в том классе сделать так:
Код:
static LRESULT CALLBACK WindowProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
все работает но меня не устраивает это начала - static
так как я в этом классе хочу сделать переменную и присваивать разные значения в этом методе, но эта переменная хочет быть только static, и в итоге я ей не могу передать пареметры

не знаю может и можно но когда я передаю они не передаются
вот еще немного кода:
Код:
////////Ev.h////////

static int W;

class CEvents
{
public:
    CEvents();
    ~CEvents();

    static LRESULT CALLBACK WindowProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
};

///////Ev.cpp///////


CEvents::CEvents()
{
    W = 0;
}

CEvents::~CEvents()
{
}

LRESULT CALLBACK CEvents::WindowProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch(msg)
{
        case WM_KEYDOWN:
        {
            switch(wParam)
            {
                case VK_SPACE:
                {
                    W = 1;
                }break;
            }
        }break;
}
}

пытаюсь передать этой переменной еденицу но не передается

что делаю не так и как можно сделать так что бы можно было бы передать

Последний раз редактировалось jec; 30.12.2010 в 03:02.
jec вне форума Ответить с цитированием
Старый 30.12.2010, 09:20   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

либо статик, либо указывайте метод объекта, а не класса
p51x на форуме Ответить с цитированием
Старый 30.12.2010, 09:49   #3
Blade
Software Engineer
Участник клуба
 
Аватар для Blade
 
Регистрация: 07.04.2007
Сообщений: 1,618
По умолчанию

Как вариант вынести WindowProc() за пределы классов, сделать ее самостоятельной функцией. У себя так и сделал
Мужество есть лишь у тех, кто ощутил сердцем страх, кто смотрит в пропасть, но смотрит с гордостью в глазах. (с) Ария
Blade вне форума Ответить с цитированием
Старый 30.12.2010, 13:09   #4
UltimaBeaR
Форумчанин
 
Аватар для UltimaBeaR
 
Регистрация: 21.12.2010
Сообщений: 199
По умолчанию

там указатель на функцию идет простую, если сделаешь не static то к аргументам впереди добавится еще неявный указатель на объект класса и работать ничего не будет, поэтому либо статик либо простая функция. Про переменную не понял поидее должно работать - попробуй либо объяви ее просто глобальной переменной без статиков, или как статическое поле класса
UltimaBeaR вне форума Ответить с цитированием
Старый 30.12.2010, 19:03   #5
jec
Пользователь
 
Регистрация: 04.09.2010
Сообщений: 42
По умолчанию

не могу эту функцию вынести из класса, она там нужна мне именно в классе, если выношу переменную за класс и делаю глобальной без статико то пишет ошибки
jec вне форума Ответить с цитированием
Старый 30.12.2010, 19:49   #6
UltimaBeaR
Форумчанин
 
Аватар для UltimaBeaR
 
Регистрация: 21.12.2010
Сообщений: 199
По умолчанию

глобальную переменную эту объявляй в .cpp
если же ты хочешь чтобы она была видна при инклудах твоего хедера то еще в хедере пиши так:
extern int var; (если int var - твоя переменная)
UltimaBeaR вне форума Ответить с цитированием
Старый 30.12.2010, 19:53   #7
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Сделайте финт ушами:
за классом создайте функцию с нужным прототипом, а в этой функции вызывайте метод обекта
p51x на форуме Ответить с цитированием
Старый 31.12.2010, 14:32   #8
Ru_DoLF
Ubuntu 10.04
Пользователь
 
Аватар для Ru_DoLF
 
Регистрация: 15.07.2010
Сообщений: 51
По умолчанию

Цитата:
так как я в этом классе хочу сделать переменную и присваивать разные значения в этом методе
Вот от сюда поподробнее
Язык образует среду мышления и формирует представление о том, о чем мы думаем (Б. Л. Уорф)
Ru_DoLF вне форума Ответить с цитированием
Старый 31.12.2010, 21:16   #9
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

вам придется вести список соответствия обьект-хендл
и соответственно обработчик это простая функция которая будет по этому списку брать обьект и передавать ему параметры.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вызов метода из метода kuzjma PHP 8 10.12.2010 02:38
Полиморфизм. Как реализовать вызов метода? katbka Общие вопросы C/C++ 12 20.05.2010 22:02
Вызов метода в asm вставке. Mixasik Общие вопросы Delphi 3 20.02.2010 10:42
mootools: вызов метода класса в цикле each toXx JavaScript, Ajax 1 18.03.2009 19:20
Вызов Метода из др. модуля Mickle Общие вопросы Delphi 2 10.05.2007 23:41