atlwin 和现代 C++ - 特别是创建按值获取 RECT

问题描述 投票:0回答:1

将现有 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。

c++ winapi c++20 wtl
1个回答
0
投票

我使用 mixin 类来添加一个新方法,我可以在从 WinImpl 派生的所有地方使用该方法。

它添加了一个 Create 方法,该方法具有按值计算的 CRect。

© www.soinside.com 2019 - 2024. All rights reserved.