Невозможно получить / захватить сообщения Windows

Я довольно новичок в MFC и Message handling контекст.

У меня есть DLL Потребительское приложение, которое имеет CFrameWndEx производный класс,CMainFrame, Теперь это называется DLL, который ставит CDialog и т.д. в этом MainFrame окно.

Я хочу получать определенные сообщения в свое приложение.

Поэтому я объявил ожидаемые сообщения в карте сообщений приложения-потребителя DLL и определил соответствующие обработчики сообщений.

Теперь, даже несмотря на то, что я вижу, что приложение отправляет эти зарегистрированные сообщения, я не могу получить / обработать их в окне получателя, то есть ничего не происходит, когда эти сообщения передаются.

mainfrm.h

class CMainFrame : public CFrameWndEx
{
public:
CMainFrame();
protected:
DECLARE_DYNAMIC(CMainFrame)
public:
void OnFileDialogdisplay(void);
afx_msg LRESULT OnLogonChanged(WPARAM,LPARAM);
afx_msg LRESULT OnLanguageChanged(WPARAM,LPARAM);
afx_msg LRESULT OnShutdownRequested(WPARAM,LPARAM);
afx_msg LRESULT OnReconnectServer(WPARAM,LPARAM);
afx_msg LRESULT OnChangeRole(WPARAM,LPARAM);
}

MainFrm.cpp

<some header files>
static UINT UWM_LOGON_CHANGED = ::RegisterWindowMessage(UWM_LOGON_CHANGE);
static UINT UWM_LANGUAGE_CHANGED = ::RegisterWindowMessage(UWM_LANGUAGE_CHANGE);
static UINT UWM_RECONNECT = ::RegisterWindowMessage(UWM_RECONNECT_SERVER);
static UINT UWM_SHUTDOWN_REQUESTED = ::RegisterWindowMessage(UWM_REQUEST_SHUTDOWN);
static UINT UWM_ROLE = ::RegisterWindowMessage(UWM_ROLE_CHANGE);

BEGIN_MESSAGE_MAP(CMainFrame, CFrameWndEx)
ON_WM_CREATE()
ON_WM_SETFOCUS()
ON_COMMAND(ID_VIEW_CUSTOMIZE, &CMainFrame::OnViewCustomize)
ON_REGISTERED_MESSAGE(AFX_WM_CREATETOOLBAR, &CMainFrame::OnToolbarCreateNew)
ON_COMMAND(ID_FILE_DIALOGDISPLAY, &CMainFrame::OnFileDialogdisplay)
ON_REGISTERED_MESSAGE(UWM_LOGON_CHANGED, OnLogonChanged)
ON_REGISTERED_MESSAGE(UWM_LANGUAGE_CHANGED, OnLanguageChanged)
ON_REGISTERED_MESSAGE(UWM_SHUTDOWN_REQUESTED, OnShutdownRequested)
ON_REGISTERED_MESSAGE(UWM_RECONNECT, OnReconnectServer)
ON_REGISTERED_MESSAGE(UWM_ROLE, OnChangeRole)
//ON_WM_NCCALCSIZE()
END_MESSAGE_MAP()

//code to register to Main server application to be able to receive messages

void manageregistration(CMainFrame* pFrame, bool flag)
{
if (flag)
{ // registration
HWND MyHandle = (HWND)pFrame->GetActiveWindow();

RegisterApmsClientPgm(_T("AAUserInterface"), MyHandle);
}
}

//Handlers

LRESULT CMainFrame::OnShutdownRequested(WPARAM,LPARAM lp)
{
AfxMessageBox(_T("Error"),MB_ICONERROR | MB_OK);
testProgram();
return 0;
}

LRESULT CMainFrame::OnChangeRole(WPARAM,LPARAM lp)
{
AfxMessageBox(_T("Error"),MB_ICONERROR | MB_OK);
testProgram();
return 0;
}

// etc etc.etc.

Итак, после всего этого я вижу, что приложение Consumer зарегистрировано для получения этих сообщений от другого приложения, которое передает их.

Однако после создания условия, когда сообщения передаются, и они, как я могу проверить, из других приложений, которые их получают, в моем приложении такое сообщение не перехватывается.

Я не уверен, где проблема может быть. Окно всегда сверху, хоть и с другим CDialog полученный DLL внутри него.

0

Решение

Попробуйте использовать pFrame-> m_hWnd. Вы не можете предполагать, что окно Mainframe всегда активно.

1

Другие решения


По вопросам рекламы [email protected]