我一直在制作一个简单的WinAPI包装器,而且我遇到了一个非常大的问题。在代码的某处,Window类的句柄(HWND)设置为NULL,并且需要处理消息。我一直在查看代码一小时,我找不到任何东西。有人可以帮忙吗?
我很确定逻辑错误发生在Declarations ... \ Window.hpp和Declarations ... \ Application.hpp中,因为这些是唯一包含被调用代码的文件。
答案 0 :(得分:2)
让我们从这开始:
namespace WinAPI{
#include <windows.h>
#include <commctrl.h>
}
不要那样做。
它可以使用,但可能需要为每个新的SDK版本更新代码,但对于初学者来说绝对不是。
以下是如何在C ++中包含<windows.h>
标题:
#undef UNICODE
#define UNICODE
#undef STRICT
#define STRICT
#undef NOMINMAX
#define NOMINMAX
#include <windows.h>
#include <windowsx.h>
将其放在包装器标题中。
将包装器包含在全局命名空间中。
哦,你问的问题,你的HWND值消失的逻辑错误?你不能指望其他人调试你的代码。
干杯&amp;第h。,
答案 1 :(得分:0)
如果您还不熟悉assert()
,这可能是了解它的好时机。断言是一个您认为是真实的表达式,并且您希望调试器检查它。在您的情况下,您可以查看更新HWND
的所有地点,并撰写assert(newHWNDvalue != NULL);
。
断言是一种评论形式。与//
不同,编译器会编译它们,调试器会对它们进行检查,因此它们不会随着时间的推移而过时。
assert
是一个宏,您需要包含<cassert>
标头。在发布版本中,断言的表达式未编译,因此没有开销。这意味着您通常可以负担得起非平凡的支票。对于复杂的类,添加private: bool CheckInvariants() const
方法可能很有用,因此您可以在其他成员中assert(CheckInvariants());
。