Как создать скрытое окно?
Цель этого окна состоит в том, чтобы получить некоторые сообщения.
Когда вы создаете окно, опустите флаг WS_VISIBAL и не звоните ShowWindow.
Вы звоните CreateWindow ()
или Createwindowex ()
Как обычно, но не указывайте WS_Visible
стиль окна. Конечно ShowWindow ()
также не должен быть вызван.
В среде Win32 / MFC вам нужно сделать, это создать класс и наследующуюся от CWND, как это:
class HiddenMsgWindow : public CWnd
{
...
}
в конструкторе этого класса вы бы создали бы подобное окно:
HiddenMsgWindow::HiddenMsgWindow()
{
CString wcn = ::AfxRegisterWndClass(NULL);
BOOL created = this->CreateEx(0, wcn, _T("YourExcellentWindowClass"), 0, 0, 0, 0, 0, HWND_MESSAGE, 0);
}
Это заставляет вас скрывать Окно с сообщением насос практически готов к роску и рулону.
Остальная часть истории состоит в том, чтобы обеспечить связь между окнами и обработчиками для этих сообщений.
Это делается путем добавления нескольких макросов и обработчика сообщений к вашему файлу реализации (.CPP), как это:
BEGIN_MESSAGE_MAP(HiddenMsgWindow, CWnd)
ON_MESSAGE(WM_USER + 1, DoNOOP)
END_MESSAGE_MAP()
LRESULT HiddenMsgWindow::DoNOOP(WPARAM wParam, LPARAM lParam)
{
AfxMessageBox(_T("Get Reaaady for a Ruuummmmmmmbllllle!"));
return LRESULT(true);
}
, то вам нужно заполнить остальную часть клеевого в файле заголовка:
class HiddenMsgWindow : public CWnd
{
public:
HiddenMsgWindow();
protected:
afx_msg LRESULT DoNOOP(WPARAM wParam, LPARAM lParam);
DECLARE_MESSAGE_MAP()
}
И так же, как магия, у вас есть скрытое окно, готовое накачать ваши сообщения.
Для того, чтобы использовать это окно сообщению, вы бы создали бы класс, извлеките его ручку и отправлять или отправлять сообщения по желанию. Так же, как это:
HiddenMsgWindow *hmw = new HiddenMsgWindow();
SendMessage(hmw->m_hWnd, WM_USER + 1, 0, 0);
Здесь вы можете следовать инструкциям: https://docs.microsoft.com/en-us/windows/desktop/winmsg/window-features#message-only-windows