任何人都可以通过扩展CWnd类来帮助我创建一个隐藏窗口。我是Windows编程的新手。 我尝试创建一个,但问题是在尝试注册窗口类或创建窗口时代码崩溃。
class HiddenWindow : public CWnd
{
public:
HiddenWindow();
~HiddenWindow();
protected:
afx_msg LRESULT DoNOOP(WPARAM wParam, LPARAM lParam);
DECLARE_MESSAGE_MAP()
};
This is my .cpp file
HiddenWindow::HiddenWindow()
{
CString wcn = ::AfxRegisterWndClass(NULL);//code fails here because of AfxGetInstanceHandle( )
BOOL created = this->CreateEx(0, wcn, _T("YourHiddenWindowClass"), 0, 0, 0, 0, NULL,HWND_MESSAGE,0);
}
HiddenWindow::~HiddenWindow()
{
}
BEGIN_MESSAGE_MAP(HiddenWindow, CWnd)
ON_MESSAGE(WM_USER + 1, DoNOOP)
END_MESSAGE_MAP()
LRESULT HiddenWindow::DoNOOP(WPARAM wParam, LPARAM lParam)
{
AfxMessageBox(_T("Test"));
return LRESULT(true);
}
答案 0 :(得分:1)
我在MFC中通过覆盖Create,构造函数来完成此操作 太早了 试试:
BOOL HiddenWindow::Create()
{
if (!CWnd::CreateEx(0, AfxRegisterWndClass(0),
_T("HiddenWindow Notification Sink"),
WS_OVERLAPPED, 0, 0, 0, 0, NULL, NULL))
{
TRACE0("Warning: unable to create HiddenWindow window!\n");
return FALSE;
}
return TRUE;
}
答案 1 :(得分:0)
你不是
“扩展CWnd类”
您使用的是C ++而不是C#,因此您派生类。
如果您需要基本功能,则无需执行此操作。只需调用您需要的创建传递窗口样式而不需要WS_VISIBLE,就像您所做的那样。但是,您必须提供窗口类作为参数,因为您的窗口不是子窗口。
如果您需要处理消息或需要实现不同的默认行为,则必须派生自己的类,但仍然不必覆盖Create成员。
除了在构造函数中初始化成员变量之外,你不应该做任何事情。你永远不应该尝试分配内存或调用可能分配内存的其他函数。你不应该做任何可能导致不可挽回的错误的事情。如果承包商失败,就没有办法优雅退出。