<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[CListCtrl &amp;amp; CImageList]]></title><description><![CDATA[<p>Hi Ihr Experten im www,</p>
<p>ich hab da mal wieder ein Problem.<br />
Und zwar geht es diesmal um eine Liste.</p>
<p>Folgendes sollte umgesetzt werden:<br />
Zu Beginn besteht eine leere Liste im Icon-View. In einer Add-Funktion wird dieser Liste ein Item hinzugefügt. Zudem wird ein CBitmap erstellt und in eine ImageListe hinzugefügt, welche dann als Bildquelle für die Liste dienen soll.<br />
Allerdings besteht folgende Anforderung:<br />
Um Speicherplatz zu sparen, soll die Image-Liste nur die Anzahl an Bildern beinhalten, die angezeigt werden kann, d.h., dass selbst wenn die ListCtrl 1000 Einträge beinhaltet, die ImageListe 4 Bilder aus dem sichtbaren Bereich der ListCtrl enthält.<br />
Die entsprechenden Bilder, welche zu den Items gehören, sind bereits in die ImageListe geladen und müssen jetz nur noch angezeigt bzw. dem Items der Liste zugeordnet werden. Allerdings stoße ich hier auf ein Problem.</p>
<pre><code>/*
Member-Variablen:
CListCtrl  m_oImageList_ctrl;
CImageList m_ImageList;
int        m_iFirstImage;     //Index des ersten sichtbaren Listeneintrags
int        m_iCountPerPage;   //Bildanzahl, die sichtbar sein kann
OBJECT     m_dadFullSizeObj;  //eigene Objectklasse, die Bilddaten enthält
*/

void CInspectionImageOutput::UpdateListCtrl()
{
  int i,
      iCPP;   //temporaere Itemanzahl insichtbarem Bereich

  if(m_oImageList_ctrl.GetItemCount() &lt; m_iCountPerPage)
    iCPP = m_oImageList_ctrl.GetItemCount();
  else
    iCPP = m_iCountPerPage;

  //ImageListe leeren
  while(m_ImageList.GetImageCount())
    m_ImageList.Remove(0);

  //Bild erzeugen und zur ImageListe addieren
  for(i = 0; i &lt; iCPP; i++)
  {
    CBitmap bmpDest,
            bmpSrc;
    bmpSrc .CreateBitmap(dat_i2dx(m_dadFullSizeObj),
                         dat_i2dy(m_dadFullSizeObj),
                         1,
                         32,
                         dat_lnk(m_dadFullSizeObj));
    bmpDest.CreateBitmap(IMG_SIZE,IMG_SIZE, 1,32, NULL);

    CDC cdcSrc,
        cdcDest;
    cdcSrc .CreateCompatibleDC(GetDC());
    cdcDest.CreateCompatibleDC(GetDC());
    HBITMAP hOldSrc  = (HBITMAP)SelectObject(cdcSrc .m_hDC, bmpSrc);
    HBITMAP hOldDest = (HBITMAP)SelectObject(cdcDest.m_hDC, bmpDest);
    cdcDest.SetStretchBltMode(COLORONCOLOR);
    cdcDest.StretchBlt(0,0,IMG_SIZE,IMG_SIZE,&amp;cdcSrc, 0,0,dat_i2dx(m_dadFullSizeObj),dat_i2dy(m_dadFullSizeObj),SRCCOPY);
    SelectObject(cdcSrc .m_hDC, hOldSrc);
    SelectObject(cdcDest.m_hDC, hOldDest);

    m_ImageList.Add(&amp;bmpDest, (CBitmap*)NULL);
  }
  m_oImageList_ctrl.SetImageList(&amp;m_ImageList, LVSIL_NORMAL);

  //Imageliste auf Items uebertragen
  for(i = 0; i &lt; iCPP; i++)
  {
    LVITEM oItem;
    oItem.iItem = m_iFirstImage + i;
    oItem.mask  = LVIF_IMAGE;

    m_oImageList_ctrl.GetItem(&amp;oItem);
    oItem.iImage = i;
    m_oImageList_ctrl.SetItem(&amp;oItem);
    m_oImageList_ctrl.GetItem(&amp;oItem);
    this-&gt;Invalidate();
  }
}
</code></pre>
<p>In der letzten for-Schleife, wenn ich den jeweiligen Items die Imagenummer aus der ImageList zuweisen will, werden diese Werte nicht gesetzt bzw. nicht übernommen. Geprüft habe ich das mit einer weiteren Schleife im Anschluß, in der ich noch einmal GetItem(...) aufgerufen hab und dieser Wert nicht inizialisiert war.<br />
Alle Items außerhalb des sichtbaren Bereiches der Liste können uninizialisiert bleiben. Lediglich die angezeigten Listeneinträge sollen die auch entsprechenden Bilder darstellen.</p>
<p>Kann mir von euch jemand helfen, wie ich die entsprechenden Bilder den Items zuweisen kann/ muss? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /><br />
Ich bin für jeden Tipp sehr dankbar.</p>
<p>LG<br />
Antivirus</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/195813/clistctrl-amp-cimagelist</link><generator>RSS for Node</generator><lastBuildDate>Thu, 09 Apr 2026 13:23:44 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/195813.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 22 Oct 2007 09:44:22 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to CListCtrl &amp;amp; CImageList on Mon, 22 Oct 2007 09:44:22 GMT]]></title><description><![CDATA[<p>Hi Ihr Experten im www,</p>
<p>ich hab da mal wieder ein Problem.<br />
Und zwar geht es diesmal um eine Liste.</p>
<p>Folgendes sollte umgesetzt werden:<br />
Zu Beginn besteht eine leere Liste im Icon-View. In einer Add-Funktion wird dieser Liste ein Item hinzugefügt. Zudem wird ein CBitmap erstellt und in eine ImageListe hinzugefügt, welche dann als Bildquelle für die Liste dienen soll.<br />
Allerdings besteht folgende Anforderung:<br />
Um Speicherplatz zu sparen, soll die Image-Liste nur die Anzahl an Bildern beinhalten, die angezeigt werden kann, d.h., dass selbst wenn die ListCtrl 1000 Einträge beinhaltet, die ImageListe 4 Bilder aus dem sichtbaren Bereich der ListCtrl enthält.<br />
Die entsprechenden Bilder, welche zu den Items gehören, sind bereits in die ImageListe geladen und müssen jetz nur noch angezeigt bzw. dem Items der Liste zugeordnet werden. Allerdings stoße ich hier auf ein Problem.</p>
<pre><code>/*
Member-Variablen:
CListCtrl  m_oImageList_ctrl;
CImageList m_ImageList;
int        m_iFirstImage;     //Index des ersten sichtbaren Listeneintrags
int        m_iCountPerPage;   //Bildanzahl, die sichtbar sein kann
OBJECT     m_dadFullSizeObj;  //eigene Objectklasse, die Bilddaten enthält
*/

void CInspectionImageOutput::UpdateListCtrl()
{
  int i,
      iCPP;   //temporaere Itemanzahl insichtbarem Bereich

  if(m_oImageList_ctrl.GetItemCount() &lt; m_iCountPerPage)
    iCPP = m_oImageList_ctrl.GetItemCount();
  else
    iCPP = m_iCountPerPage;

  //ImageListe leeren
  while(m_ImageList.GetImageCount())
    m_ImageList.Remove(0);

  //Bild erzeugen und zur ImageListe addieren
  for(i = 0; i &lt; iCPP; i++)
  {
    CBitmap bmpDest,
            bmpSrc;
    bmpSrc .CreateBitmap(dat_i2dx(m_dadFullSizeObj),
                         dat_i2dy(m_dadFullSizeObj),
                         1,
                         32,
                         dat_lnk(m_dadFullSizeObj));
    bmpDest.CreateBitmap(IMG_SIZE,IMG_SIZE, 1,32, NULL);

    CDC cdcSrc,
        cdcDest;
    cdcSrc .CreateCompatibleDC(GetDC());
    cdcDest.CreateCompatibleDC(GetDC());
    HBITMAP hOldSrc  = (HBITMAP)SelectObject(cdcSrc .m_hDC, bmpSrc);
    HBITMAP hOldDest = (HBITMAP)SelectObject(cdcDest.m_hDC, bmpDest);
    cdcDest.SetStretchBltMode(COLORONCOLOR);
    cdcDest.StretchBlt(0,0,IMG_SIZE,IMG_SIZE,&amp;cdcSrc, 0,0,dat_i2dx(m_dadFullSizeObj),dat_i2dy(m_dadFullSizeObj),SRCCOPY);
    SelectObject(cdcSrc .m_hDC, hOldSrc);
    SelectObject(cdcDest.m_hDC, hOldDest);

    m_ImageList.Add(&amp;bmpDest, (CBitmap*)NULL);
  }
  m_oImageList_ctrl.SetImageList(&amp;m_ImageList, LVSIL_NORMAL);

  //Imageliste auf Items uebertragen
  for(i = 0; i &lt; iCPP; i++)
  {
    LVITEM oItem;
    oItem.iItem = m_iFirstImage + i;
    oItem.mask  = LVIF_IMAGE;

    m_oImageList_ctrl.GetItem(&amp;oItem);
    oItem.iImage = i;
    m_oImageList_ctrl.SetItem(&amp;oItem);
    m_oImageList_ctrl.GetItem(&amp;oItem);
    this-&gt;Invalidate();
  }
}
</code></pre>
<p>In der letzten for-Schleife, wenn ich den jeweiligen Items die Imagenummer aus der ImageList zuweisen will, werden diese Werte nicht gesetzt bzw. nicht übernommen. Geprüft habe ich das mit einer weiteren Schleife im Anschluß, in der ich noch einmal GetItem(...) aufgerufen hab und dieser Wert nicht inizialisiert war.<br />
Alle Items außerhalb des sichtbaren Bereiches der Liste können uninizialisiert bleiben. Lediglich die angezeigten Listeneinträge sollen die auch entsprechenden Bilder darstellen.</p>
<p>Kann mir von euch jemand helfen, wie ich die entsprechenden Bilder den Items zuweisen kann/ muss? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /><br />
Ich bin für jeden Tipp sehr dankbar.</p>
<p>LG<br />
Antivirus</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1389808</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1389808</guid><dc:creator><![CDATA[Antivirus]]></dc:creator><pubDate>Mon, 22 Oct 2007 09:44:22 GMT</pubDate></item><item><title><![CDATA[Reply to CListCtrl &amp;amp; CImageList on Mon, 22 Oct 2007 12:29:56 GMT]]></title><description><![CDATA[<p>Hast Du überhaupt mit InsertItem etwas eingefügt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1389920</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1389920</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Mon, 22 Oct 2007 12:29:56 GMT</pubDate></item><item><title><![CDATA[Reply to CListCtrl &amp;amp; CImageList on Mon, 22 Oct 2007 13:29:53 GMT]]></title><description><![CDATA[<p>Ja. Hab ich. Das is nur die Funktion, in der die Bilder überarbeitet werden sollten und den entsprechenden Items zugeordnet.<br />
Zuvor füge ich der Liste schon Items hinzu und rufe anschließend diese Funktion auf.</p>
<p>Aber ich hab meinen Fehler schon (nach weiteren 3,5 Std vervenzermürbender Suche) gefunden <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /><br />
Im Prinzip stand es auch schon in der Hilfe drin, wenn man lesen kann.<br />
Der SubItem ist einsbasierend und wenn ich den vorher noch auf 0 inizialisiere, bezieht er den Item auf das gesamte und holt (GetItem(...)) bzw. setzt (SetItem(...)) die korrekten Werte ^^</p>
<p>Sieht dann so aus für alle, die auch auf das Problem stoßen sollten:</p>
<pre><code>...
  LVITEM oItem;
  oItem.iItem    = m_iFirstImage + i;
  [b]oItem.iSubItem = 0;[/b]
  oItem.mask     = LVIF_IMAGE;

  m_oImageList_ctrl.GetItem(&amp;oItem);
  oItem.iImage = i;
  m_oImageList_ctrl.SetItem(&amp;oItem);
...
</code></pre>
<p>Dennoch danke für die Hilfsbereitschaft ^^</p>
<p>LG<br />
Antivirus</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1389980</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1389980</guid><dc:creator><![CDATA[Antivirus]]></dc:creator><pubDate>Mon, 22 Oct 2007 13:29:53 GMT</pubDate></item></channel></rss>