将现有 WTL 应用程序移植到 C++20。我们遇到的问题之一是 atlwin.h 有一个具有以下签名的“Create”方法:
HWND Create(
_In_opt_ HWND hWndParent,
_In_ _U_RECT rect = NULL,
_In_opt_z_ LPCTSTR szWindowName = NULL,
_In_ DWORD dwStyle = 0,
_In_ DWORD dwExStyle = 0,
_In_ _U_MENUorID MenuOrID = 0U,
_In_opt_ LPVOID lpCreateParam = NULL)
并且被这样称呼:
Create(hWnd, CRECT(0,0, 100, 200), ....)
_U_RECT 的构造函数仅接受对 RECT 的引用或指向 RECT 的指针,这意味着您无法传入临时值。
人们是如何解决这个问题的?我不想遍历所有代码并将上面的代码替换为:
CRect tmpRect(0, 0, 100, 200);
Create(hwnd, tmpRect, .....);
正在使用的MSVC版本是14.37.32822。
我使用 mixin 类来添加一个新方法,我可以在从 WinImpl 派生的所有地方使用该方法。
它添加了一个 Create 方法,该方法具有按值计算的 CRect。