3

I'm encountering the following problem. I wolud very much appreciate your help.

Description of the problem MFC Desktop Application VisualStudio 2010 Icons are supposed to be displayed in a CListCtrl as a CImageList. It usually works fine except when using RemoteDesktop with the OS Windows 2008 / 2003. In these particular cases the icons are just displayed as a black square. Connecting with VMware vSphere (alternative to RemoteDesktop) -> Icons are shown appropriately Remotdesktop on Windows XP / 7 / 8 -> Icons are shown appropriately

Code:

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);
}

In the real application, the source is a database which saves the Bitmap as a string. That’s the reason for the complicated code during the loading. Loading the images as a resource is possible, but in this case no option. Drivers of server and client are updated to latest version. I added the project here https://www.hidrive.strato.com/lnk/gRuMg38R. Thanks for helping out

0 Answers0