Я столкнулся со следующей проблемой. Я очень ценю вашу помощь.
Описание проблемы
Настольное приложение 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. Спасибо за помощь
Задача ещё не решена.