如何在C ++中创建隐藏窗口

时间:2010-01-23 07:38:00

标签: c++ user-interface winapi window

如何创建隐藏窗口?

此窗口的目的是接收一些消息。

6 个答案:

答案 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)

答案 3 :(得分:3)

您照常调用CreateWindow()CreateWindowEx(),但未指定WS_VISIBLE窗口样式。当然也不应该调用ShowWindow()

答案 4 :(得分:1)

如果您不需要显示窗口,  有人建议创建窗口,省略WS_VISIBLE标志,不要调用ShowWindow。

如果不是,当您致电 showWindow()时,请添加 SW_HIDE 参数。

ShowWindow(hWnd, SW_HIDE);

答案 5 :(得分:0)

啊,刚刚遇到一个问题。如果您未能指定HWND_MESSAGE,则可能发生意外行为。我使用了NULL,这是不正确的。在我的情况下,它导致MS Excel花费10秒或更多来加载xls文件,而当我的应用程序没有运行时通常需要不到一秒!

MSDN将此描述为之前提到过的人。