<?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[Listview in Tab Control Bug incl. Verzweiflung]]></title><description><![CDATA[<p>Hallo!</p>
<p>Ich habe heute den ganzen Tab einen Bug in meinem Prog gesucht und echt nix gefunden. Ich bin wirklich verzweifelt!!<br />
Hier meine etwas längere Fehlerbeschreibung + Links zu Screenshots zum besseren Verständnis:</p>
<p>Ich habe eine DialogBox welche außer einem Tab Control noch andere Elemente enthält. Deshalb kann ich kein Property Sheet verwenden. Dieses Tab Kontrol ist ungefähr der gleiche Code wie bei <a href="http://www.winapi.net/index.php?inhalt=t4" rel="nofollow">http://www.winapi.net/index.php?inhalt=t4</a> Also alles in plain WinAPI.</p>
<p>Das Tab Control wird im Main Dialog so definiert:</p>
<pre><code>CONTROL         &quot;&quot;,IDC_TAB,&quot;SysTabControl32&quot;,WS_TABSTOP | WS_CHILD,7,61,441,176,
</code></pre>
<p>Eines der Child Dialoge im Tab enthält nun ein List View Control. Welches so erstellt wird:</p>
<pre><code>IDD_FILESTAB DIALOGEX 0, 0, 434, 157
STYLE DS_SETFONT | DS_FIXEDSYS | DS_CENTER | WS_CHILD | WS_VISIBLE
EXSTYLE WS_EX_CONTROLPARENT
FONT 8, &quot;MS Shell Dlg&quot;, 400, 0, 0x1
BEGIN
    CONTROL         &quot;&quot;,IDC_PROGRESS1,&quot;msctls_progress32&quot;,WS_BORDER,83,149,
                    286,6
    CONTROL         &quot;&quot;,IDC_FILESLIST,&quot;SysListView32&quot;,LVS_REPORT | 
                    LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_ALIGNLEFT | 
                    WS_BORDER | WS_TABSTOP,7,6,419,140
END
</code></pre>
<p>Ich kann die Tabs wechseln und das Listview Control wird neu gezeichnet. Ich kann andere Fenster in den Vordergrund holen, alles kein Problem.<br />
<a href="http://mitglied.lycos.de/atzplzw/um1.jpg" rel="nofollow">http://mitglied.lycos.de/atzplzw/um1.jpg</a></p>
<p>Wenn ich jetzt die Größe einer Spalte im Listview Control ändere wird es ärgerlich. Nachdem die Größe geändert ist wird das Listview Control ganz normal angezeigt. Jedoch nur so lange wie meine Dialogbox im Vordergrund ist! Wechsle ich in ein anderes Fenster und click dann in die Statusleiste um die Dialogbox zurück zu bringen ist das Listview Control auf einmal verschwunden.<br />
<a href="http://mitglied.lycos.de/atzplzw/um2.jpg" rel="nofollow">http://mitglied.lycos.de/atzplzw/um2.jpg</a></p>
<p>Wohlgemerkt: Es muss ein anderes Fenster sein! Wechsle ich das Tab kommt das Listview Control wieder.<br />
Und: Es passiert erst wenn ich die Größe einer Spalte geändert habe!! Wird diese nicht geändert und das Fenster geht in den Hintergrund und dann wieder Vordergrund, erscheint das Listview Control ganz normal.</p>
<p>Einzelne Elemente kommen jedoch wieder, wenn ich mit der Mouse z.B. über die Spalten gehe oder eine Auswahl treffe incl. Mouseclick.<br />
<a href="http://mitglied.lycos.de/atzplzw/um3.jpg" rel="nofollow">http://mitglied.lycos.de/atzplzw/um3.jpg</a></p>
<p>Vielleicht wichtigste Anmerkung: Wenn ich die DialogBox aus der Statusleiste wiederhole, sieht es so aus, also ob das Listview Control neu gezeichnet wird, dann jedoch verschwindet es. Dauert nur einen Bruchteil einer Sekunde...</p>
<p>Der einzige Ausweg aus diesem Dilemma ist: Den Inhalt des Listview Controls zu zerstören und neu einzulesen. Dabei bleibt die Spaltengröße erhalten, da ich die Spalten ja in einer WM_INITDIALOG Message erstelle, die nicht nochmal aufgerufen wird.<br />
Und eigentlich wollte ich nicht immer wenn das Fenster in den Hintergrund kommt das ganze Listview Control neu machen.</p>
<pre><code>SendDlgItemMessage(hTab3, IDC_FILESLIST, LVM_DELETEALLITEMS, NULL, NULL);
...
SendDlgItemMessage(hTab3, IDC_FILESLIST, LVM_SETITEM, 0, (LPARAM)&amp;LvItem);
...
</code></pre>
<p>Ich hab schon versucht, verschiedene Styles wie z.b. Transparent oder Topmost zu vergeben. Alles ohne Wirkung.<br />
Woran kann es denn liegen???</p>
<p>Ich kann jede Menge an Code posten, falls das gewünscht wird einfach schreiben!<br />
Da wären mal: CreateTabDialogs, die DlgProcs, ShowTabDialog usw.<br />
Im Moment wollte ich nur dieses Posting nicht noch länger machen...</p>
<p>Ein Lösungsansatz könnte ich mir darin vorstellen, auf eine Message zu reagieren, die ich bekomm wenn mein Dialog in den Vordergrund kommt. Bekomm ich da eine Message? Wenn ja, welche?<br />
Ein ShowWindow würde dann das gesamte Tab in den Vordergrund bringen und das funktioniert ja.</p>
<p>Danke für die Hilfe!<br />
Ein Verzweifelter<br />
atzplzw</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/90744/listview-in-tab-control-bug-incl-verzweiflung</link><generator>RSS for Node</generator><lastBuildDate>Tue, 07 Jul 2026 04:25:05 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/90744.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 01 Nov 2004 17:09:06 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Listview in Tab Control Bug incl. Verzweiflung on Mon, 01 Nov 2004 17:09:06 GMT]]></title><description><![CDATA[<p>Hallo!</p>
<p>Ich habe heute den ganzen Tab einen Bug in meinem Prog gesucht und echt nix gefunden. Ich bin wirklich verzweifelt!!<br />
Hier meine etwas längere Fehlerbeschreibung + Links zu Screenshots zum besseren Verständnis:</p>
<p>Ich habe eine DialogBox welche außer einem Tab Control noch andere Elemente enthält. Deshalb kann ich kein Property Sheet verwenden. Dieses Tab Kontrol ist ungefähr der gleiche Code wie bei <a href="http://www.winapi.net/index.php?inhalt=t4" rel="nofollow">http://www.winapi.net/index.php?inhalt=t4</a> Also alles in plain WinAPI.</p>
<p>Das Tab Control wird im Main Dialog so definiert:</p>
<pre><code>CONTROL         &quot;&quot;,IDC_TAB,&quot;SysTabControl32&quot;,WS_TABSTOP | WS_CHILD,7,61,441,176,
</code></pre>
<p>Eines der Child Dialoge im Tab enthält nun ein List View Control. Welches so erstellt wird:</p>
<pre><code>IDD_FILESTAB DIALOGEX 0, 0, 434, 157
STYLE DS_SETFONT | DS_FIXEDSYS | DS_CENTER | WS_CHILD | WS_VISIBLE
EXSTYLE WS_EX_CONTROLPARENT
FONT 8, &quot;MS Shell Dlg&quot;, 400, 0, 0x1
BEGIN
    CONTROL         &quot;&quot;,IDC_PROGRESS1,&quot;msctls_progress32&quot;,WS_BORDER,83,149,
                    286,6
    CONTROL         &quot;&quot;,IDC_FILESLIST,&quot;SysListView32&quot;,LVS_REPORT | 
                    LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_ALIGNLEFT | 
                    WS_BORDER | WS_TABSTOP,7,6,419,140
END
</code></pre>
<p>Ich kann die Tabs wechseln und das Listview Control wird neu gezeichnet. Ich kann andere Fenster in den Vordergrund holen, alles kein Problem.<br />
<a href="http://mitglied.lycos.de/atzplzw/um1.jpg" rel="nofollow">http://mitglied.lycos.de/atzplzw/um1.jpg</a></p>
<p>Wenn ich jetzt die Größe einer Spalte im Listview Control ändere wird es ärgerlich. Nachdem die Größe geändert ist wird das Listview Control ganz normal angezeigt. Jedoch nur so lange wie meine Dialogbox im Vordergrund ist! Wechsle ich in ein anderes Fenster und click dann in die Statusleiste um die Dialogbox zurück zu bringen ist das Listview Control auf einmal verschwunden.<br />
<a href="http://mitglied.lycos.de/atzplzw/um2.jpg" rel="nofollow">http://mitglied.lycos.de/atzplzw/um2.jpg</a></p>
<p>Wohlgemerkt: Es muss ein anderes Fenster sein! Wechsle ich das Tab kommt das Listview Control wieder.<br />
Und: Es passiert erst wenn ich die Größe einer Spalte geändert habe!! Wird diese nicht geändert und das Fenster geht in den Hintergrund und dann wieder Vordergrund, erscheint das Listview Control ganz normal.</p>
<p>Einzelne Elemente kommen jedoch wieder, wenn ich mit der Mouse z.B. über die Spalten gehe oder eine Auswahl treffe incl. Mouseclick.<br />
<a href="http://mitglied.lycos.de/atzplzw/um3.jpg" rel="nofollow">http://mitglied.lycos.de/atzplzw/um3.jpg</a></p>
<p>Vielleicht wichtigste Anmerkung: Wenn ich die DialogBox aus der Statusleiste wiederhole, sieht es so aus, also ob das Listview Control neu gezeichnet wird, dann jedoch verschwindet es. Dauert nur einen Bruchteil einer Sekunde...</p>
<p>Der einzige Ausweg aus diesem Dilemma ist: Den Inhalt des Listview Controls zu zerstören und neu einzulesen. Dabei bleibt die Spaltengröße erhalten, da ich die Spalten ja in einer WM_INITDIALOG Message erstelle, die nicht nochmal aufgerufen wird.<br />
Und eigentlich wollte ich nicht immer wenn das Fenster in den Hintergrund kommt das ganze Listview Control neu machen.</p>
<pre><code>SendDlgItemMessage(hTab3, IDC_FILESLIST, LVM_DELETEALLITEMS, NULL, NULL);
...
SendDlgItemMessage(hTab3, IDC_FILESLIST, LVM_SETITEM, 0, (LPARAM)&amp;LvItem);
...
</code></pre>
<p>Ich hab schon versucht, verschiedene Styles wie z.b. Transparent oder Topmost zu vergeben. Alles ohne Wirkung.<br />
Woran kann es denn liegen???</p>
<p>Ich kann jede Menge an Code posten, falls das gewünscht wird einfach schreiben!<br />
Da wären mal: CreateTabDialogs, die DlgProcs, ShowTabDialog usw.<br />
Im Moment wollte ich nur dieses Posting nicht noch länger machen...</p>
<p>Ein Lösungsansatz könnte ich mir darin vorstellen, auf eine Message zu reagieren, die ich bekomm wenn mein Dialog in den Vordergrund kommt. Bekomm ich da eine Message? Wenn ja, welche?<br />
Ein ShowWindow würde dann das gesamte Tab in den Vordergrund bringen und das funktioniert ja.</p>
<p>Danke für die Hilfe!<br />
Ein Verzweifelter<br />
atzplzw</p>
]]></description><link>https://www.c-plusplus.net/forum/post/642414</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/642414</guid><dc:creator><![CDATA[atzplzw]]></dc:creator><pubDate>Mon, 01 Nov 2004 17:09:06 GMT</pubDate></item><item><title><![CDATA[Reply to Listview in Tab Control Bug incl. Verzweiflung on Mon, 01 Nov 2004 19:44:26 GMT]]></title><description><![CDATA[<p>Noch einige Anmerkungen:</p>
<p>Das ganze passiert auch, wenn das Listview Control keine Items enthält.<br />
Die Anzahl der Spalten spielt keine Rolle.</p>
<p>Hab grad noch rausgefunden, dass der Fehler auch vorkommt, wenn man eine Reihe selectiert hat. Es passiert aber nichts wenn man die Scrollbalken betätigt hat.</p>
<p>Wenn ich das Tab Control auf Sichtbar = FALSE setze ist es natürlich nicht da, aber das Listview Control funktioniert ohne Probleme!<br />
Es sieht also für mich so aus, dass sich das Tab Control einfach über das Listview Control drüber painted.<br />
Obwohl alle anderen Controls, wie z.B. die Process Bar schon da sind.<br />
Wirklich seltsam...</p>
<p>Ich konnte das ganze nur unter XP testen, anderes OS hab ich nicht. Kommt bei 2 PC's vor...</p>
<p>atzplzw</p>
]]></description><link>https://www.c-plusplus.net/forum/post/642438</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/642438</guid><dc:creator><![CDATA[atzplzw]]></dc:creator><pubDate>Mon, 01 Nov 2004 19:44:26 GMT</pubDate></item><item><title><![CDATA[Reply to Listview in Tab Control Bug incl. Verzweiflung on Sun, 03 Jun 2007 17:20:25 GMT]]></title><description><![CDATA[<p>Interesantes Problem da ich dies auch hab, ne Lösung dafür wäre wäre schon sehr hilfreich =))</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1297923</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1297923</guid><dc:creator><![CDATA[VirtualDreams]]></dc:creator><pubDate>Sun, 03 Jun 2007 17:20:25 GMT</pubDate></item></channel></rss>