在MFC中,CWnd::FromHandlePermanent 是一个静态公共方法,用于根据窗口句柄获取对应的CWnd对象,该方法与CWnd::FromHandle 类似。这个方法的声明如下:
static CWnd* PASCAL FromHandlePermanent(HWND hWnd);

它也接受一个窗口句柄 hWnd 作为参数,返回与该句柄相关联的CWnd对象的指针。与CWnd::FromHandle 不同的是,CWnd::FromHandlePermanent 会增加返回的 CWnd 对象的引用计数。这意味着在使用完该对象后,你需要负责调用 Release 方法来减少引用计数,以确保正确地释放资源。

示例代码:
HWND hWnd = ::CreateWindow(
    _T("BUTTON"),          // 窗口类名
    _T("Click me"),        // 窗口标题
    WS_OVERLAPPEDWINDOW,    // 窗口样式
    CW_USEDEFAULT,          // 窗口位置 x
    CW_USEDEFAULT,          // 窗口位置 y
    200,                    // 窗口宽度
    100,                    // 窗口高度
    NULL,                   // 父窗口句柄
    NULL,                   // 菜单句柄
    AfxGetInstanceHandle(), // 应用程序实例句柄
    NULL                    // 附加参数
);

// 使用 CWnd::FromHandlePermanent 获取对应的 CWnd 对象
CWnd* pWnd = CWnd::FromHandlePermanent(hWnd);

if (pWnd != NULL)
{
    // 使用 pWnd 操作窗口

    // 使用完毕后,需要调用 Release 方法减少引用计数
    pWnd->Release();
}

CWnd::FromHandlePermanent 的使用场景一般较少见,通常在特殊情况下需要显式管理引用计数时使用。在一般情况下,使用 CWnd::FromHandle 足以满足窗口句柄到CWnd对象的映射需求。


转载请注明出处:http://www.pingtaimeng.com/article/detail/23295/MFC/CWnd