帮助使用WinAPI包装器
Help with WinAPI wrapper
我一直在制作一个简单的WinAPI包装器,我遇到了一个相当大的问题。在代码的某个地方,Window类的句柄(HWND)被设置为NULL,并且需要它来处理消息。我已经把代码看了一个小时了,什么也没找到。有人能帮忙吗?
Git存储库
我很确定逻辑错误发生在Declarations…Window.hpp和Declarations…Application.hpp中的某个地方,因为这些是唯一保存正在调用的代码的文件。
让我们从这个开始:
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值消失了吗?你不能指望别人来调试你的代码。
干杯,hth。
如果您还不熟悉assert()
,现在可能是学习它的好时机。断言是您认为为真并希望调试器检查的表达式。在您的例子中,您可以查看更新HWND
的所有位置,并写入assert(newHWNDvalue != NULL);
。
//
不同,编译器编译它们,调试器检查它们,因此它们不会随着时间的推移而过时。
assert
是一个宏,您需要包含<cassert>
头。在发布版本中,断言的表达式不会被编译,因此没有开销。这意味着你通常可以支付大额支票。对于复杂的类,添加private: bool CheckInvariants() const
方法可能很有用,这样您就可以在其他成员中使用assert(CheckInvariants());
。
相关文章:
- 如何在c++17中制作一个模板包装器/装饰器
- std::vector的包装器,使数组的结构看起来像结构的数组
- 如何在c++迭代器类型中包装std::chrono
- 是否可以用"iostream"包装现有的TCP/OOpenSSL会话
- WinAPI挂钩鼠标
- 用pybind11包装C++抽象类时出错
- 为左值和右值的包装器实现C++范围
- 将执行、作业和WinAPI相乘
- C结构,其指针将被包装在unique_ptr中
- 如何包装第三方DLL在R中使用
- 在类型和包装器之间reinterpret_cast是否安全<Type>?
- 将 N-arg 函数包装到另一个函数中
- 元组由 Swig 生成的 Python 包装器返回,用于C++向量
- 包装一个对象并假装它是一个 int
- 使用 Python Extension API 包装复杂C++类
- 在类中包装 WinApi 按钮函数
- C++winapi和gtk包装器(gui)
- 如何在WinApi C++包装器中处理消息
- 帮助使用WinAPI包装器
- 如何仅使用直接 WinAPI 将独立于设备的位图放入 Windows 剪贴板?(无 MFC 或其他包装器)