在将图复制到剪贴板之前,需要将图转换为位图,并将位图保存到内存设备上下文中。然后,可以使用GetTextExtent函数来获取字符串的正确长度。

以下是示例代码:

// 将图转换为位图
HBITMAP hBitmap = CreateCompatibleBitmap(hDC, width, height);
HDC hMemDC = CreateCompatibleDC(hDC);
HBITMAP hOldBitmap = (HBITMAP)SelectObject(hMemDC, hBitmap);
BitBlt(hMemDC, 0, 0, width, height, hDC, 0, 0, SRCCOPY);

// 将位图保存到内存设备上下文中
OpenClipboard(hWnd);
EmptyClipboard();
SetClipboardData(CF_BITMAP, hBitmap);
CloseClipboard();

// 获取字符串的正确长度
HDC hClipDC = GetDC(NULL);
HDC hClipMemDC = CreateCompatibleDC(hClipDC);
HBITMAP hClipOldBitmap = (HBITMAP)SelectObject(hClipMemDC, hBitmap);
SIZE size;
GetTextExtentPoint32(hClipMemDC, lpString, lstrlen(lpString), &size);
SelectObject(hClipMemDC, hClipOldBitmap);
DeleteDC(hClipMemDC);
ReleaseDC(NULL, hClipDC);

// 清理资源
SelectObject(hMemDC, hOldBitmap);
DeleteDC(hMemDC);
DeleteObject(hBitmap);

其中,hDC是原始设备上下文的句柄,width和height是图的宽度和高度,lpString是要获取长度的字符串。在获取字符串长度之前,需要先将位图保存到内存设备上下文中,并使用SelectObject函数将其选入设备上下文中。然后,可以使用GetTextExtentPoint32函数获取字符串的正确长度。最后,需要清理资源,包括位图、设备上下文等

用vc画图当把图复制到剪贴板时怎么通过GetTextExtent得到正确的字符长度

原文地址: https://www.cveoy.top/t/topic/epRE 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录