如何创建隐藏窗口?
此窗口的目的是接收一些消息。
答案 0 :(得分:21)
创建窗口时,省略WS_VISIBLE标志,不要调用ShowWindow。
答案 1 :(得分:14)
在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);
答案 2 :(得分:10)
您可以按照此处的说明操作:https://docs.microsoft.com/en-us/windows/desktop/winmsg/window-features#message-only-windows
答案 3 :(得分:3)
您照常调用CreateWindow()
或CreateWindowEx()
,但未指定WS_VISIBLE
窗口样式。当然也不应该调用ShowWindow()
。
答案 4 :(得分:1)
如果您不需要显示窗口, 有人建议创建窗口,省略WS_VISIBLE标志,不要调用ShowWindow。
如果不是,当您致电 showWindow()时,请添加 SW_HIDE 参数。
ShowWindow(hWnd, SW_HIDE);
答案 5 :(得分:0)