这个问题的原因在于在 IThumbnailProvider 的 OnDrawThumbnail 函数中,提供的 hDrawDC(绘制缩略图的设备上下文)似乎是单色的。这会导致缩略图无法正确地绘制。
解决方法是使用 BitBlt 函数将 hDrawDC 复制到一个新的设备上下文中。这个新的设备上下文应该具有正确的颜色深度,以便正确地绘制缩略图。以下是示例代码:
HRESULT OnDrawThumbnail(UINT cx, UINT cy, __out HBITMAP* phbmp)
{
// Get the source bitmap.
HBITMAP hSourceBitmap = GetSourceBitmap(cx, cy);
if (!hSourceBitmap)
{
return E_FAIL;
}
// Create a destination bitmap with the desired color depth.
HDC hDC = GetDC(NULL);
HDC hDestDC = CreateCompatibleDC(hDC);
BITMAPINFO bmi = { 0 };
bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
bmi.bmiHeader.biWidth = cx;
bmi.bmiHeader.biHeight = -cy; // Negative height indicates a top-down bitmap.
bmi.bmiHeader.biPlanes = 1;
bmi.bmiHeader.biBitCount = 24; // 24-bit color depth.
bmi.bmiHeader.biCompression = BI_RGB;
HBITMAP hDestBitmap = CreateDIBSection(hDC, &bmi, DIB_RGB_COLORS, NULL, NULL, 0);
ReleaseDC(NULL, hDC);
// Draw the source bitmap onto the destination bitmap.
HBITMAP hOldBitmap = (HBITMAP)SelectObject(hDestDC, hDestBitmap);
HDC hSourceDC = CreateCompatibleDC(hDestDC);
HBITMAP hOldSourceBitmap = (HBITMAP)SelectObject(hSourceDC, hSourceBitmap);
BitBlt(hDestDC, 0, 0, cx, cy, hSourceDC, 0,