Пользовательские сообщения - PullRequest
1 голос
/ 28 июля 2011

Вот код:

//h file
class MyClass: public CView
{
public:
    afx_msg LRESULT OnMyMess(WPARAM, LPARAM);
}

//cpp file
BEGIN_MESSAGE_MAP(MyClass, CView)
    ON_MESSAGE(WM_USER+100, OnMyMess)
END_MESSAGE_MAP()

LRESULT OnMyMess(WPARAM, LPARAM)
{return 0};


//Somewhere in the programm
SendMessage(WM_USER+100, 0 ,0);

Почему программа не вызывает обработчик?

upd: WinXP, MS VS 2003

Ответы [ 3 ]

3 голосов
/ 28 июля 2011

Возможно, вы вызываете SendMessage () из метода, например, не MyClass, а MyMainFrame, поэтому вы отправляете сообщение в неправильное окно. Если это так, просто добавьте переменную-член:

m_myView.SendMessage(WM_USER+100,0,0);

Также вы забыли MyClass :: из:

LRESULT MyClass::OnMyMess(WPARAM, LPARAM)
{return 0};
2 голосов
/ 28 июля 2011

Во-первых,

LRESULT OnMyMess(WPARAM, LPARAM)
{return 0;} 

должно быть

LRESULT MyClass::OnMyMess(WPARAM, LPARAM)
{return 0;}

, но я думаю, что это просто опечатка.

Во-вторых, SendMessage должно работать как положено, толькоесли вы называете его в MyClass;в противном случае вам следует указать окно, в которое вы хотите отправить сообщение.

0 голосов
/ 28 июля 2011

Попробуйте:

//h file
#define CUSTOM_MESSAGE WM_USER + 100

class MyClass: public CView
{
public:
    afx_msg LRESULT OnMyMess(WPARAM, LPARAM);
}

//cpp file
BEGIN_MESSAGE_MAP(MyClass, CView)
    ON_MESSAGE(CUSTOM_MESSAGE, OnMyMess)
END_MESSAGE_MAP()

LRESULT OnMyMess(WPARAM, LPARAM)
{return 0};


//Somewhere in the programm
SendMessage(CUSTOM_MESSAGE, 0 ,0);
...