2014-02-20 4 views
0

Я хочу получать сообщения из дочернего окна. Я не могу этого сделать. Pls помогает мне. Я хочу получить сообщение, отправленное другим дочерним окном. Здесь определяются пользователем сообщения постоянно 510, и я эта обработка внутри OnGirish()Получение сообщений от ребенка Windows

// WndSecond.cpp: Файл реализации //

#include "stdafx.h" 
#include "DemoB.h" 
#include "WndSecond.h" 

// #define ID_GIRISH 500 
// CWndSecond 

IMPLEMENT_DYNAMIC(CWndSecond, CWnd) 
//Constructor 
CWndSecond::CWndSecond() 
{ 

} 
//Destructor 
CWndSecond::~CWndSecond() 
{ 
} 

//Message map for this window 
BEGIN_MESSAGE_MAP(CWndSecond, CWnd) 
    ON_WM_PAINT() 
    ON_COMMAND(510,OnGirish) 
END_MESSAGE_MAP() 



// CWndSecond message handlers 


BOOL CWndSecond::PreCreateWindow(CREATESTRUCT& cs) 
{ 
    if (!CWnd::PreCreateWindow(cs)) 
     return FALSE; 

    cs.dwExStyle |= WS_EX_CLIENTEDGE; 
    cs.lpszClass = AfxRegisterWndClass(CS_HREDRAW|CS_VREDRAW|CS_DBLCLKS, 
     ::LoadCursor(NULL, IDC_ARROW), CreateSolidBrush(RGB(0,255,0)), NULL); 

    return TRUE; 
} 

void CWndSecond::OnPaint() 
{ 
    CClientDC dc(this); 
} 

//Handler for retrieving user defined message sent by another window 
void CWndSecond::OnGirish() 
{ 
    //Here I want to retrieve the message sent by another child window 
    GetMessae(510,0,0); 
    MessageBox(_T("Message"), _T("Hello World"),MB_ICONASTERISK|MB_OK); 
} 

ответ

0

РегистрацияWindowMessage требуется только в том случае, если вам нужно отправлять сообщения межпроцессного взаимодействия, в противном случае константа значения выше WM_USER/WM_APP в порядке. В потоке пользовательского интерфейса приложения MFC «никогда» нельзя напрямую обращаться к GetMessage(). Рамка MFC обрабатывает очередь сообщений и отправляет сообщения в ваши окна. Чтобы отправить сообщение в конкретное окно, используйте :: SendMessage или :: PostMessage в соответствии с дескриптором окна получателей в качестве первого аргумента и используйте ON_MESSAGE в своей карте сообщений. Прототип для обработчика LRESULT func(WPARAM,LPARAM);

0

Вы должны использовать RegisterWindowMessage определить сообщение. И макрос ON_REGISTERED_MESSAGE обрабатывает его.

+0

@ rrirower- благодарит меня за помощь. Я надеюсь, что вы снова поможете мне в будущем. –

+0

Мы можем использовать обработчик ON_MESSAGE для определения пользовательского сообщения и дескриптора с помощью функции afx_msg LRESULT Имя_функции (WPARAM, LPARAM); WPARAM и LPARAM будут определены пользователем. –

+0

-1 'RegisterWindowMessage' - неправильный инструмент. Если вы управляете отправкой и получением кода, используйте статически определенный идентификатор сообщения в диапазоне «WM_APP + x». Если вы являетесь исполнителем класса окна получающего окна, используйте сообщение в диапазоне 'WM_USER + x'. – IInspectable

Смежные вопросы