<?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: Wie erkenne ich, dass die Spaltenbreite geändert wurde?]]></title><description><![CDATA[<p>Hallo Leute!</p>
<p>Ich hab nun langsam die Headernachrichten durch und finde keine, die sich meldet, wenn die Spaltenbreite geändert wurde.</p>
<p>Welche ist das? <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="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/66095/clistctrl-wie-erkenne-ich-dass-die-spaltenbreite-geändert-wurde</link><generator>RSS for Node</generator><lastBuildDate>Fri, 05 Jun 2026 20:33:44 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/66095.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 25 Feb 2004 08:26:08 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to CListCtrl: Wie erkenne ich, dass die Spaltenbreite geändert wurde? on Wed, 25 Feb 2004 08:26:08 GMT]]></title><description><![CDATA[<p>Hallo Leute!</p>
<p>Ich hab nun langsam die Headernachrichten durch und finde keine, die sich meldet, wenn die Spaltenbreite geändert wurde.</p>
<p>Welche ist das? <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="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/467327</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/467327</guid><dc:creator><![CDATA[estartu]]></dc:creator><pubDate>Wed, 25 Feb 2004 08:26:08 GMT</pubDate></item><item><title><![CDATA[Reply to CListCtrl: Wie erkenne ich, dass die Spaltenbreite geändert wurde? on Wed, 25 Feb 2004 09:54:09 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>die Spalten eines ListControls sind eigentlich ein eigenes Steuerelement, ein CHeaderCtrl. Ein Header-Control sendet dann auch die von dir benötigten Nachrichten (in diesem Falle HDN_BEGINTRACK). Die Notifications des Header-Controls sind hier:</p>
<p><a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/commctls/header/notifications/hdn_begintrack.asp" rel="nofollow">http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/commctls/header/notifications/hdn_begintrack.asp</a></p>
<p>zu finden</p>
<p>MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/467387</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/467387</guid><dc:creator><![CDATA[Probe-Nutzer]]></dc:creator><pubDate>Wed, 25 Feb 2004 09:54:09 GMT</pubDate></item><item><title><![CDATA[Reply to CListCtrl: Wie erkenne ich, dass die Spaltenbreite geändert wurde? on Wed, 25 Feb 2004 13:09:53 GMT]]></title><description><![CDATA[<p>Dankeschön, aber ich habe HDN_ENDTRACK eingebunden und lasse eine Messagebox aufgehen, wenn er in die Funktion kommt.</p>
<pre><code class="language-cpp">BEGIN_MESSAGE_MAP(COrteView, CFormView)
	//{{AFX_MSG_MAP(COrteView)
	ON_NOTIFY(HDN_ENDTRACK, IDC_LSC_ORTE, OnEndtrackLscOrte)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

void COrteView::OnEndtrackLscOrte(NMHDR* pNMHDR, LRESULT* pResult) 
{
	HD_NOTIFY *phdn = (HD_NOTIFY *) pNMHDR;
	AfxMessageBox(&quot;&quot;);
	*pResult = 0;
}
</code></pre>
<p>Nun kann ich die Trennlinie so oft hin und herziehen, wie ich will - es kommt keine Messagebox. Ich hab das einfach über den Klassenassistenten eingebunden. Hat der was vergessen?</p>
<p>Was ist da falsch?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/467401</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/467401</guid><dc:creator><![CDATA[estartu]]></dc:creator><pubDate>Wed, 25 Feb 2004 13:09:53 GMT</pubDate></item><item><title><![CDATA[Reply to CListCtrl: Wie erkenne ich, dass die Spaltenbreite geändert wurde? on Wed, 25 Feb 2004 14:58:44 GMT]]></title><description><![CDATA[<p>Hab ich noch eine Erklärung vergessen? Braucht ihr mehr Quelltext zum Angucken?</p>
<p>Bitte Leute, ich find da nix.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/467632</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/467632</guid><dc:creator><![CDATA[estartu]]></dc:creator><pubDate>Wed, 25 Feb 2004 14:58:44 GMT</pubDate></item><item><title><![CDATA[Reply to CListCtrl: Wie erkenne ich, dass die Spaltenbreite geändert wurde? on Wed, 25 Feb 2004 23:13:48 GMT]]></title><description><![CDATA[<p>da gibt es eine &quot;Besonderheit&quot;, die hatte ich schon wieder vergessen:</p>
<p>der Klassenassistent kümmert sich leider nicht darum, ob die Code-Teile, die man über ihn einfügt, auch Sinn machen. In diesem Falle muß der erzeugte Eintrag in der Message-Map geändert werden:</p>
<pre><code>BEGIN_MESSAGE_MAP(COrteView, CFormView)
    //{{AFX_MSG_MAP(COrteView)
    ON_NOTIFY(HDN_ENDTRACK, 0, OnEndtrackLscOrte)
    //}}AFX_MSG_MAP
END_MESSAGE_MAP()
</code></pre>
<p>da das Header-Control als Child des ListControls die ID Null hat, kam im vorherigen Falle nichts in OnEndtrackLscOrte an.</p>
<p>Ich habe das hier zur Sicherheit noch einmal ausprobiert, allerdings mit einer dialogfeld-basierten Anwendung, die Meldung kommt an. Allerdings: die MessageBox geht zweimal auf (liegt wohl daran, daß für beide &quot;aneinandergrenzenden&quot; Spalten-Köpfe jeweils eine Meldung gesendet wird)</p>
<p>MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/468024</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/468024</guid><dc:creator><![CDATA[Probe-Nutzer]]></dc:creator><pubDate>Wed, 25 Feb 2004 23:13:48 GMT</pubDate></item><item><title><![CDATA[Reply to CListCtrl: Wie erkenne ich, dass die Spaltenbreite geändert wurde? on Thu, 26 Feb 2004 07:04:39 GMT]]></title><description><![CDATA[<p>Es geht auch mit meiner verworrenen Viewanwendung.</p>
<p>Vielen vielen Dank, ich war schon echt am Verzweifeln.</p>
<p>Im Nachhinein isses logisch, aber ich wäre wohl niemals darauf gekommen, da einfach eine 0 hinzuschreiben. Hätte mich wohl nach der ID des Headers totgesucht.</p>
<p>Jetzt bin ich erstmal wieder glücklich, bis zur nächsten Stolperfalle von diesem grausigen Listctrl.</p>
<p>Danke <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/468072</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/468072</guid><dc:creator><![CDATA[estartu]]></dc:creator><pubDate>Thu, 26 Feb 2004 07:04:39 GMT</pubDate></item><item><title><![CDATA[Reply to CListCtrl: Wie erkenne ich, dass die Spaltenbreite geändert wurde? on Thu, 26 Feb 2004 09:32:50 GMT]]></title><description><![CDATA[<p>Grr, geht doch nicht.</p>
<p>Ich kriege die Breitenänderung immer erst einen später.</p>
<p>Also: Anwendung startet, alles super, Breite stimmt.</p>
<p>Ich ziehe die erste Spalte breit, nix tut sich.<br />
Ich ziehe die erste Spalte schmal, das Eingabefeld wird breit.<br />
Ich ziehe die erste Spalte breit, das Eingabefeld wird schmal.</p>
<p>usw.</p>
<p>Versteh ich nicht.</p>
<p>Hier kommt der Quelltext.</p>
<p>Im View:</p>
<pre><code class="language-cpp">BEGIN_MESSAGE_MAP(COrteView, CFormView)
	//{{AFX_MSG_MAP(COrteView)
	ON_NOTIFY(HDN_ENDTRACK, 0, OnEndtrackLscOrte)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

void COrteView::InitListCtrl() // Wird in OnInitialUpdate aufgerufen
{
//gekürzt
	// Postleitzahlfeld an die richtige Stelle packen
	m_edtPlz.GetWindowRect(&amp;rect);
	ScreenToClient(&amp;rect);
	int nSpaltenBreite = rect.left + m_lscOrte.GetColumnWidth(0);
	rect.right = nSpaltenBreite;
	m_edtPlz.MoveWindow(&amp;rect, TRUE);

	// Ortfeld an die richtige Stelle packen
	m_edtOrt.GetWindowRect(&amp;rect);
	ScreenToClient(&amp;rect);
	rect.left = nSpaltenBreite;
	m_edtOrt.MoveWindow(&amp;rect, TRUE);

	// Immer die gesamte Zeile auswählen
	SendDlgItemMessage(IDC_LSC_ORTE, LVM_SETEXTENDEDLISTVIEWSTYLE, 0, LVS_EX_FULLROWSELECT);
}

void COrteView::OnEndtrackLscOrte(NMHDR* pNMHDR, LRESULT* pResult) 
{
	HD_NOTIFY *phdn = (HD_NOTIFY *) pNMHDR;

	RECT rect;
	// Postleitzahlfeld an die richtige Stelle packen
	m_edtPlz.GetWindowRect(&amp;rect);
	ScreenToClient(&amp;rect);
	int nSpaltenBreite = rect.left + m_lscOrte.GetColumnWidth(0);
	rect.right = nSpaltenBreite;
	m_edtPlz.MoveWindow(&amp;rect, TRUE);

	// Ortfeld an die richtige Stelle packen
	m_edtOrt.GetWindowRect(&amp;rect);
	ScreenToClient(&amp;rect);
	rect.left = nSpaltenBreite;
	m_edtOrt.MoveWindow(&amp;rect, TRUE);

	*pResult = 0;
}
</code></pre>
<p>Im Listcontrol:</p>
<pre><code class="language-cpp">int CSortListCtrl::GetColumnWidth(int f_nIdx) const
{
	return m_ctlHeader.GetColumnWidth(f_nIdx);
}
</code></pre>
<p>Im Headercontrol:</p>
<pre><code class="language-cpp">int CSortHeaderCtrl::GetColumnWidth(int f_nIdx) const
{
	HD_ITEM hdItem = {0};
	hdItem.mask = HDI_WIDTH;

	const int iItemCount = GetItemCount();
	if (f_nIdx &lt; iItemCount)
	{
		VERIFY( GetItem(f_nIdx, &amp;hdItem));
		return hdItem.cxy;
	}

	return -1;
}
</code></pre>
<p>Ideen? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/468166</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/468166</guid><dc:creator><![CDATA[estartu]]></dc:creator><pubDate>Thu, 26 Feb 2004 09:32:50 GMT</pubDate></item><item><title><![CDATA[Reply to CListCtrl: Wie erkenne ich, dass die Spaltenbreite geändert wurde? on Fri, 27 Feb 2004 07:10:37 GMT]]></title><description><![CDATA[<p>schubs, Bitte ich hab echt keine Ahnung mehr, nach was ich suchen soll! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/468817</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/468817</guid><dc:creator><![CDATA[estartu]]></dc:creator><pubDate>Fri, 27 Feb 2004 07:10:37 GMT</pubDate></item><item><title><![CDATA[Reply to CListCtrl: Wie erkenne ich, dass die Spaltenbreite geändert wurde? on Fri, 27 Feb 2004 09:49:02 GMT]]></title><description><![CDATA[<p>So, es war die falsche Nachricht, auf die ich reagiert habe.</p>
<p>HDN_ITEMCHANGED musste es sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/468884</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/468884</guid><dc:creator><![CDATA[estartu]]></dc:creator><pubDate>Fri, 27 Feb 2004 09:49:02 GMT</pubDate></item></channel></rss>