<?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[(ATL) ComboBox Problem mit Vertical Scroll]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe ein ATL basiertes ComboBox Control erstellt, stoße allerdings auf ein Problem. Und zwar wird, wenn sehr viele Items in der ComboBox über ::AddItem(BSTR Item, LONG Index) eingefügt werden, die vertikale Scrollbar nicht angezeigt.</p>
<p>Der Constructor des Controls sieht (gekürzt) so aus:<br />
CXComboBox::CXComboBox() : m_cwComboBox(_T(&quot;COMBOBOX&quot;), this, 0), m_hbrBackground(NULL), m_hbrWindow(NULL)<br />
{<br />
m_nComboStyle = csDropDownCombo; // 0 - Dropdown Combo<br />
}</p>
<p>m_cwComboBox ist ein CContainedWindow</p>
<p>Ich instanziiere das Control über CreateControlWindow()<br />
HWND CXComboBox::CreateControlWindow(HWND hWndParent, RECT&amp; rcPos)<br />
{<br />
HRESULT hr = S_OK;</p>
<p>DWORD dwStyle = WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_CLIPCHILDREN | WS_CLIPSIBLINGS | CBS_DISABLENOSCROLL;</p>
<p>// Apply combo style<br />
if (m_nComboStyle == csDropDownCombo)<br />
dwStyle |= CBS_DROPDOWN;<br />
else if (m_nComboStyle == csSimpleCombo)<br />
dwStyle |= CBS_SIMPLE;<br />
else<br />
dwStyle |= CBS_DROPDOWNLIST;</p>
<p>// Apply sorted mode<br />
if (m_vbSorted == VARIANT_TRUE)<br />
dwStyle |= CBS_SORT;</p>
<p>// Apply appearance<br />
if (m_nAppearance == appFlat)<br />
dwStyle |= BS_FLAT;</p>
<p>m_hWnd = m_cwComboBox.Create(hWndParent, rcPos, _T(&quot;&quot;), dwStyle);</p>
<p>if (m_hWnd)<br />
{<br />
m_rcClientPos = rcPos;</p>
<p>SetAmbientFont();</p>
<p>BOOL bUserMode;<br />
hr = GetAmbientUserMode(bUserMode);<br />
if (SUCCEEDED(hr) &amp;&amp; bUserMode)<br />
{<br />
::EnableWindow(m_hWnd, m_vbEnabled == VARIANT_TRUE ? TRUE : FALSE);</p>
<p>put_Enabled(m_vbEnabled);<br />
put_Visible(m_vbVisible);<br />
}</p>
<p>UINT uFlags = SWP_NOOWNERZORDER | SWP_NOZORDER | SWP_NOMOVE | SWP_NOACTIVATE;</p>
<p>CRect rc;<br />
::GetWindowRect(m_hWnd, &amp;rc);</p>
<p>m_OrigHeight = rc.Height();</p>
<p>::SetWindowPos(m_hWnd, NULL, 0, 0, rc.Width(), m_OrigHeight + m_lDroppedHeight, uFlags);<br />
}</p>
<p>return m_hWnd;<br />
}</p>
<p>Fällt euch da irgendetwas Seltsames auf, dass dieses Problem erklären könnte</p>
<p>Ich verwende VC++ 6.0 und ATL 3</p>
<p>Viele Grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/179308/atl-combobox-problem-mit-vertical-scroll</link><generator>RSS for Node</generator><lastBuildDate>Sat, 18 Apr 2026 22:38:47 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/179308.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 20 Apr 2007 10:22:49 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to (ATL) ComboBox Problem mit Vertical Scroll on Fri, 20 Apr 2007 10:45:23 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe ein ATL basiertes ComboBox Control erstellt, stoße allerdings auf ein Problem. Und zwar wird, wenn sehr viele Items in der ComboBox über ::AddItem(BSTR Item, LONG Index) eingefügt werden, die vertikale Scrollbar nicht angezeigt.</p>
<p>Der Constructor des Controls sieht (gekürzt) so aus:<br />
CXComboBox::CXComboBox() : m_cwComboBox(_T(&quot;COMBOBOX&quot;), this, 0), m_hbrBackground(NULL), m_hbrWindow(NULL)<br />
{<br />
m_nComboStyle = csDropDownCombo; // 0 - Dropdown Combo<br />
}</p>
<p>m_cwComboBox ist ein CContainedWindow</p>
<p>Ich instanziiere das Control über CreateControlWindow()<br />
HWND CXComboBox::CreateControlWindow(HWND hWndParent, RECT&amp; rcPos)<br />
{<br />
HRESULT hr = S_OK;</p>
<p>DWORD dwStyle = WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_CLIPCHILDREN | WS_CLIPSIBLINGS | CBS_DISABLENOSCROLL;</p>
<p>// Apply combo style<br />
if (m_nComboStyle == csDropDownCombo)<br />
dwStyle |= CBS_DROPDOWN;<br />
else if (m_nComboStyle == csSimpleCombo)<br />
dwStyle |= CBS_SIMPLE;<br />
else<br />
dwStyle |= CBS_DROPDOWNLIST;</p>
<p>// Apply sorted mode<br />
if (m_vbSorted == VARIANT_TRUE)<br />
dwStyle |= CBS_SORT;</p>
<p>// Apply appearance<br />
if (m_nAppearance == appFlat)<br />
dwStyle |= BS_FLAT;</p>
<p>m_hWnd = m_cwComboBox.Create(hWndParent, rcPos, _T(&quot;&quot;), dwStyle);</p>
<p>if (m_hWnd)<br />
{<br />
m_rcClientPos = rcPos;</p>
<p>SetAmbientFont();</p>
<p>BOOL bUserMode;<br />
hr = GetAmbientUserMode(bUserMode);<br />
if (SUCCEEDED(hr) &amp;&amp; bUserMode)<br />
{<br />
::EnableWindow(m_hWnd, m_vbEnabled == VARIANT_TRUE ? TRUE : FALSE);</p>
<p>put_Enabled(m_vbEnabled);<br />
put_Visible(m_vbVisible);<br />
}</p>
<p>UINT uFlags = SWP_NOOWNERZORDER | SWP_NOZORDER | SWP_NOMOVE | SWP_NOACTIVATE;</p>
<p>CRect rc;<br />
::GetWindowRect(m_hWnd, &amp;rc);</p>
<p>m_OrigHeight = rc.Height();</p>
<p>::SetWindowPos(m_hWnd, NULL, 0, 0, rc.Width(), m_OrigHeight + m_lDroppedHeight, uFlags);<br />
}</p>
<p>return m_hWnd;<br />
}</p>
<p>Fällt euch da irgendetwas Seltsames auf, dass dieses Problem erklären könnte</p>
<p>Ich verwende VC++ 6.0 und ATL 3</p>
<p>Viele Grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1269871</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1269871</guid><dc:creator><![CDATA[emstaler]]></dc:creator><pubDate>Fri, 20 Apr 2007 10:45:23 GMT</pubDate></item></channel></rss>