Обработка оконных сообщений
Помогите плз решить мою траблу...
Создаю класс, в нем объявляю функции в том числе и оконную функцию.При попытке присвоить свойству lpfnWndProc в структуре WNDCLASS метод класса, соответствующий типу WNDPROC, получаю ошибку компилятора (MS VC 7)
"Cannot convert 'overloaded-function to WNDPROC'"
{
...
public:
WNDCLASS wc;
...
bool InitWindow();
LRESULT CALLBACK MainWndProc(...);
};
...
bool MainWndClass::InitWindow
{
...
wc.lpfnWndProc = (WNDPROC)MainWndProc;
...
return true;
}
Помогите плз очень надо!!!
Доброго времени суток!
Помогите плз решить мою траблу...
Создаю класс, в нем объявляю функции в том числе и оконную функцию.При попытке присвоить свойству lpfnWndProc в структуре WNDCLASS метод класса, соответствующий типу WNDPROC, получаю ошибку компилятора (MS VC 7)
"Cannot convert 'overloaded-function to WNDPROC'"
{
...
public:
WNDCLASS wc;
...
bool InitWindow();
LRESULT CALLBACK MainWndProc(...);
};
...
bool MainWndClass::InitWindow
{
...
wc.lpfnWndProc = (WNDPROC)MainWndProc;
...
return true;
}
Помогите плз очень надо!!!
функция обработки оконных сообщений должна быть CALLBACK. глобально ее объявлять надо, а не в классе
LRESULT CALLBACK WindowProc( HWND hwnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam
);
class CMyWnd{
public:
static LRESULT CALLBACK WindowProc(HWND hwnd,UINT uMsg, WPARAM wParam, LPARAM lParam);
};
LRESULT CALLBACK CMyWnd::WindowProc(HWND hwnd,UINT uMsg, WPARAM wParam, LPARAM lParam)
{
return 0;
}
Объявляй как статик:
class CMyWnd{
public:
static LRESULT CALLBACK WindowProc(HWND hwnd,UINT uMsg, WPARAM wParam, LPARAM lParam);
};
LRESULT CALLBACK CMyWnd::WindowProc(HWND hwnd,UINT uMsg, WPARAM wParam, LPARAM lParam)
{
return 0;
}
это точно работает? и указатель this верный?
странно, странно...
это точно работает? и указатель this верный?
странно, странно...
Нет,в таком виде нельзя получить доступ к членам и методам данного класса,хотя можно при создании окна указать указатель на данный класс как доп параметр при создании окна и потом уже его использовать в самом окне,естественно что private и protected члены будут недоступны.
В принципе такой вид аналогичен глобальному WNDPROC с разницей лиш в том что данный метод содержится в классе,вобщем просто для удобства.
Нет,в таком виде нельзя получить доступ к членам и методам данного класса,хотя можно при создании окна указать указатель на данный класс как доп параметр при создании окна и потом уже его использовать в самом окне,естественно что private и protected члены будут недоступны.
В принципе такой вид аналогичен глобальному WNDPROC с разницей лиш в том что данный метод содержится в классе,вобщем просто для удобства.
спасибо. я так и думал :)
хотя можно при создании окна указать указатель на данный класс как доп параметр при создании окна и потом уже его использовать
На самом деле методов передавать указатель на экземпляр класса множество. Здесь в форуме уже как-то обсуждалось.
Самый остроумный способ реализован в WTL.
естественно что private и protected члены будут недоступны.
Здесь ты неправ. Из статических методов есть доступ ко всем остальным членам класса.
В принципе такой вид аналогичен глобальному WNDPROC с разницей лиш в том что данный метод содержится в классе,вобщем просто для удобства.
Исходя из предыдущего замечания получается, что не совсем аналогичен.
Здесь ты неправ. Из статических методов есть доступ ко всем остальным членам класса.
А как это можно из статического метода класса получить доступ к полями объекта этого класса, не пользуясь указателем на этот объект? Статический метод класса же принадлежит сразу всем объектам этого класса и он "не знает", на каком из объектов он был вызван.
А как это можно из статического метода класса получить доступ к полями объекта этого класса, не пользуясь указателем на этот объект? Статический метод класса же принадлежит сразу всем объектам этого класса и он "не знает", на каком из объектов он был вызван.
Ты путаешь два понятия: область видимости и информация об экземпляре.
Информация об экземпляре имеется, ты сам предложил один из способов её получения:
можно при создании окна указать указатель на данный класс как доп параметр при создании окна
при этом из статического метода класса можно обращаться ко всем членам данного класса, т.к. они находятся в одной области видимости.