MFC Icons auf Remotedesktop als schwarze Box

OP (Firma: SDZ) #3736623
Hallo,

ich habe folgendes Problem. Würde mich über Hilfe sehr freuen.

Problembeschreibung
MFC Desktop Application
VisualStudio 2010
Icons sollen in einem CListCtrl per CImageList dargestellt werden.
Klappt fast immer außer per RemoteDesktop auf einen Windows 2008 / 2003.
In dem Fall werden die Icons als schwarzes Quadrat dargestellt.
Verbinden per VMware vSphere (alternative zu Remotdesktop) ->   Icons 
werden gezeichnet
Remotdesktop auf Windows XP  7  8 ->         Icons werden gezeichnet

Der Code:

OnInitDialog()
{
  /*
Standardcode
*/

  // Symbol für dieses Dialogfeld festlegen. Wird automatisch erledigt
  //  wenn das Hauptfenster der Anwendung kein Dialogfeld ist
  SetIcon(m_hIcon, TRUE);      // Großes Symbol verwenden
  SetIcon(m_hIcon, FALSE);    // Kleines Symbol verwenden

  // TODO: Hier zusätzliche Initialisierung einfügen
  InitList(); //
  m_list.SetImageList(imageList, LVSIL_NORMAL);

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


Quelle im Gesamtprogramm ist eine datenbank in der die bitmap als String 
gespeichert ist, darum der aufwändige umweg beim laden. Images aus 
Ressourcen laden funktioniert, ist aber keine Option!
Treiber wurden auf Server und Clientseite aktualisiert
Das Gesamtprojekt habe ich hier gehostet 
https://www.hidrive.strato.com/lnk/gRuMg38R. Danke für eure Hilfe.
Persönliche Seite
Welche Farbtiefe haben die Icons?

Die RDP-Sitzung wird mit einer anderen Farbtiefe arbeiten als die lokale 
Konsolensitzung, und wenn Icons keine passende Farbtiefe (Bit pro Pixel) 
haben, werden sie nicht korrekt dargestellt.

In Icons können mehrere unterschiedliche Farbtiefen und Größen enthalten 
sein; sieh Dir mal mit dem Resourcen-Editor des Visual Studio Deine 
Icons an.

Und Deine Imagelist scheint auch nur 32bpp zu kennen; reduziere das mal 
auf das, was in der aktiven Sitzung tatsächlich verwendet wird (sollte 
mit GetSystemMetrics feststellbar sein).

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 12 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.