Значки MFC отображаются в виде черных квадратов на удаленных рабочих столах

Я столкнулся со следующей проблемой. Я очень ценю вашу помощь.

Описание проблемы
Настольное приложение MFC
VisualStudio 2010
Значки должны отображаться в CListCtrl как CImageList.
Обычно он работает нормально, за исключением случаев использования RemoteDesktop с ОС Windows 2008/2003.
В этих конкретных случаях значки отображаются в виде черного квадрата.
Соединение с VMware vSphere (альтернатива RemoteDesktop) -> Значки отображаются соответствующим образом
Remotdesktop в Windows XP / 7/8 -> Значки отображаются соответствующим образом

Код:

OnInitDialog()
{// Setting the symbol for this dialog-field. This is done automatically
// if the  mainwindow of the application is no dialog-field.
SetIcon(m_hIcon, TRUE);         // using big symbol
SetIcon(m_hIcon, FALSE);        // using small symbol

// TODO: appending additional initialization
InitList(); //
m_list.SetImageList(imageList, LVSIL_NORMAL);

//captions
CString buf = _T("testitem");
m_list.InsertItem(0, buf, 0);
m_list.SetItemData(0, (DWORD) 0);
m_list.SetItemText(0, 0, _T("0"));m_list.SetItemState(0, 2, LVIS_SELECTED);
m_list.EnsureVisible(0, FALSE);
}

void CDispomarkierungTestDlg::InitList()
{
imageList = new CImageList();
int err = imageList->Create(16, 16, ILC_COLOR32 | ILC_MASK, 1, 1);  //ILC_COLOR16 , ILC_COLOR8 , ... getested
int id = 40;
int requiredLength = 3154;
LPCSTR picInCharsFromDB = GetBitmapAsText();
int width = 24;
int heigth = 24;
int pixel = 32;
int planes = 1;
BYTE *picInBytes = new BYTE[requiredLength];
int lengthVariable = requiredLength;
int* lengthPointer;
lengthPointer = &lengthVariable;

Base64Decode(picInCharsFromDB, requiredLength, picInBytes, lengthPointer);

HANDLE hBitMap = CreateBitmap(width, heigth, planes, pixel, picInBytes);

BITMAP bitmap;
GetObject(hBitMap,sizeof(BITMAP),&bitmap);

CImage image;
image.Attach((HBITMAP)hBitMap);

CBitmap icon;
icon.Attach((HBITMAP)hBitMap);

CBitmap* bitmappointer;
bitmappointer = &icon;

BITMAP bmp;
icon.GetBitmap(&bmp);

CClientDC dcClient(this);
CDC memDC;
memDC.CreateCompatibleDC(&dcClient);

HBITMAP hbmMask = ::CreateCompatibleBitmap(memDC.GetSafeHdc(), width, heigth);

ICONINFO ii = {0};
ii.fIcon    = TRUE;
ii.hbmColor = icon;
ii.hbmMask  = hbmMask;

HICON hIcon = ::CreateIconIndirect(&ii);
::DeleteObject(hbmMask);
err = imageList->Add(hIcon);
}

В реальном приложении источником является база данных, которая сохраняет растровое изображение в виде строки. Вот причина сложного кода во время загрузки. Загрузка изображений в качестве ресурса возможна, но в этом случае нет возможности.
Драйверы сервера и клиента обновлены до последней версии.
Я добавил проект здесь https://www.hidrive.strato.com/lnk/gRuMg38R. Спасибо за помощь

1

Решение

Задача ещё не решена.

Другие решения


По вопросам рекламы [email protected]