【发布时间】:2014-11-18 00:57:21
【问题描述】:
任何人都可以通过扩展 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);
}
【问题讨论】:
-
创建隐藏窗口通常只是首先不显示它(例如不调用
ShowWindow)。如果您遇到特殊问题,请显示一些代码。 -
@JonathanPotter:你好乔纳森,我发布了我尝试过的代码,它在 AfxRegisterWndClass(NULL) 失败,因为它是内部断言的。
-
告诉我们你得到了 ASSERT!
-
这听起来像您正在实例化一个具有静态存储持续时间的
HiddenWindow-object。具有静态存储持续时间的对象在执行进入您的main/WinMain函数之前被初始化。对于 MFC 来说,这可能为时过早,无法完全初始化其所需状态。
标签: winapi visual-c++ win32gui