我在 MFC 程序中有一段代码,如下所示:
HANDLE newhandle = m_hWnd; //A
//draw the bitmap image on the window
BITMAP* bi = new BITMAP;
CBitmap bmp;
bmp.Attach(transferbitmap);
CClientDC dc(newhandle); //B
//...
//...
//...
在“A”行,我创建了一个名为 newhandle 的 HANDLE,并将其设置为m_hWnd,它的类型为 CWnd*。仅此行就可以很好地编译(使用 Visual Studio 2010)并且似乎可以正常工作。但是,查看“B”行,当我尝试使用 newhandle 代替 m_hWnd 时,出现编译错误:
错误 C2664:“CClientDC::CClientDC(CWnd*)”:无法将参数 1 从“HANDLE”转换为“CWnd*”
当我使用 m_hWnd 代替 newhandle 时,程序编译并运行良好。
我的问题是,为什么编译器让我将 newhandle 设置为 CWnd*,但是当我尝试使用它时会发生错误?此外,有没有办法使用非 MFC 窗口句柄来替换 m_hWnd,因为我试图从我的代码的较低级别删除所有 MFC 特定代码?