用vc画图当把图复制到剪贴板时怎么通过GetTextExtent得到正确的字符长度
在将图复制到剪贴板之前,需要将图转换为位图,并将位图保存到内存设备上下文中。然后,可以使用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函数获取字符串的正确长度。最后,需要清理资源,包括位图、设备上下文等
原文地址: https://www.cveoy.top/t/topic/epRE 著作权归作者所有。请勿转载和采集!