<?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[Tab-Control zeigt Dialoge nicht an]]></title><description><![CDATA[<p>hallo,</p>
<p>ich habe ein dialogbasiertes tool in dem tab-controls verwendet werden sollen.<br />
bevor jetzt gleich der link zu <a href="http://winapi.net" rel="nofollow">winapi.net</a> gepostet wird. von dort habe ich den code in mein programm integriert. (btw.: hab das beispielprojekt genommen und selber darin einen weiteren reiter integriert. hat ohne problem funktioniert)<br />
wahrscheinlich hab ich nur etwas übersehen. aber ich finde es beim besten willen nicht. vielleicht findet es ja einer von euch?</p>
<pre><code class="language-cpp">BOOL Dialog::CustomDlgProc(UINT uMsg, WPARAM wParam, LPARAM lParam) {

    TCITEM item;
    HWND*  phDlg;
    HWND   hWndTemp;
    RECT   rc;
    int    nCurSel;

    //message handling 
    switch (uMsg) {

...
case WM_INITDIALOG: //right now, no initializations

	    ///////////////////////////////////////////////////////
	    // TabCtrl initialisieren
	    hWndTemp = GetDlgItem(m_hwnd, IDC_TAB1);

	    ZeroMemory(&amp;item, sizeof(item));
	    item.mask    = TCIF_TEXT;

	    // Tab Title
	    item.pszText = TEXT(&quot;Drive&quot;);
	    TabCtrl_InsertItem(hWndTemp, 0, &amp;item);
	    item.pszText = TEXT(&quot;Directory&quot;);
	    TabCtrl_InsertItem(hWndTemp, 1, &amp;item);

	    // Dialoge, die im TabCtrl erscheienen sollen, erzeugen
	    phDlg    = new HWND[5];
	    phDlg[0] = CreateDialog((HINSTANCE)lParam, MAKEINTRESOURCE(IDD_DIALOG_DRIVE), m_hwnd, DlgProc1);
	    phDlg[1] = CreateDialog((HINSTANCE)lParam, MAKEINTRESOURCE(IDD_DIALOG_DIR), m_hwnd, DlgProc2);

	    BringWindowToTop(phDlg[1]);
	    BringWindowToTop(phDlg[0]);

	    // safe child handles
	    SetWindowLongPtr(m_hwnd, DWLP_USER, (LONG_PTR)phDlg);

	    // fit size to main dialog
	    GetWindowRect(hWndTemp, &amp;rc);
	    ScreenToClient(m_hwnd, (LPPOINT)&amp;rc.left);
	    ScreenToClient(m_hwnd, (LPPOINT)&amp;rc.right);

	    SendMessage(hWndTemp, TCM_ADJUSTRECT, (WPARAM)FALSE, (LPARAM)&amp;rc);
	    MoveWindow(phDlg[0], rc.left, rc.top, rc.right - rc.left, rc.bottom - rc.top, TRUE);
	    MoveWindow(phDlg[1], rc.left, rc.top, rc.right - rc.left, rc.bottom - rc.top, TRUE);

	    ///////////////////////////////////////////////////////
...
return TRUE; 

...

case WM_NOTIFY:
	    switch(((LPNMHDR)lParam)-&gt;code){
		case TCN_SELCHANGING:
		    // Diese Notification wird gesendet, *bevor* das TabCtrl
		    // die Auswahl aendert. Das ist ein guter Zeitpunkt, um
		    // den zurzeit angezeigten Dialog zu verstecken
		    phDlg   = (HWND*)GetWindowLongPtr(m_hwnd, DWLP_USER);
		    nCurSel = TabCtrl_GetCurSel(((LPNMHDR)lParam)-&gt;hwndFrom);

		    if((nCurSel &gt;= 0) &amp;&amp; (nCurSel &lt;= 1))
			ShowWindow(phDlg[nCurSel], SW_HIDE);

		    SetWindowLongPtr(m_hwnd, DWLP_MSGRESULT, (LONG_PTR)FALSE);
		    return(TRUE);

		case TCN_SELCHANGE:
		    // Diese Notification wird gesendet, *nachdem* das TabCtrl
		    // die Auswahl geaendert hat. Dies ist ein guter Zeitpunkt,
		    // um den zur Auswahl passenden Dialog anzuzeigen
		    phDlg   = (HWND*)GetWindowLongPtr(m_hwnd, DWLP_USER);
		    nCurSel = TabCtrl_GetCurSel(((LPNMHDR)lParam)-&gt;hwndFrom);

		    if((nCurSel &gt;= 0) &amp;&amp; (nCurSel &lt;= 1))
			ShowWindow(phDlg[nCurSel], SW_SHOW);

		    return(TRUE);
		default:
		    break;
	    }
	    break;
...

case WM_NCDESTROY:
             // delete allocated
             phDlg = (HWND*)GetWindowLongPtr(m_hwnd, DWLP_USER);
             delete [] phDlg;
             break;
        default:
             break;
</code></pre>
<p>Dialogprozeduren im Rohzustand vorhanden:</p>
<pre><code class="language-cpp">INT_PTR CALLBACK DlgProc1(HWND, UINT uMsg, WPARAM, LPARAM)
{
    switch(uMsg)
    {
        case WM_INITDIALOG:
	    return(TRUE);
	default:
	    break;
    }
    return(FALSE);
}

INT_PTR CALLBACK DlgProc2(HWND, UINT uMsg, WPARAM, LPARAM)
{
    switch(uMsg)
    {
        case WM_INITDIALOG:
	    return(TRUE);
	default:
	    break;
    }
    return(FALSE);
}
</code></pre>
<pre><code class="language-cpp">INITCOMMONCONTROLSEX iccex;
    iccex.dwSize = sizeof(iccex);
    iccex.dwICC  = ICC_TAB_CLASSES;
    InitCommonControlsEx(&amp;iccex);
</code></pre>
<p>.... wird nicht wirklich gebraucht, oder? jedenfalls funktioniert das winapi-beispiel auch ohne.</p>
<p>WS_CHILD und WS_EX_CONTROLPARENT sind äquivalent zu beispiel gesetzt.</p>
<p>Das Problem ist, dass die funktion CreateDialog ein 0 (ungültiges Handle) zurückliefert. Warum? GetLastError() gibt mir 1812 zurück (&quot;The specified resource type cannot be found in the image file.&quot;) Die Dialoge sind aber in dem RC-File vorhanden.</p>
<p>arbeite mit MSVC 2005 (falls das weiterhilft)</p>
<p>danke im voraus</p>
<p>Robert</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/188531/tab-control-zeigt-dialoge-nicht-an</link><generator>RSS for Node</generator><lastBuildDate>Fri, 03 Jul 2026 13:22:54 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/188531.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 01 Aug 2007 13:05:08 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Tab-Control zeigt Dialoge nicht an on Thu, 02 Aug 2007 06:49:39 GMT]]></title><description><![CDATA[<p>hallo,</p>
<p>ich habe ein dialogbasiertes tool in dem tab-controls verwendet werden sollen.<br />
bevor jetzt gleich der link zu <a href="http://winapi.net" rel="nofollow">winapi.net</a> gepostet wird. von dort habe ich den code in mein programm integriert. (btw.: hab das beispielprojekt genommen und selber darin einen weiteren reiter integriert. hat ohne problem funktioniert)<br />
wahrscheinlich hab ich nur etwas übersehen. aber ich finde es beim besten willen nicht. vielleicht findet es ja einer von euch?</p>
<pre><code class="language-cpp">BOOL Dialog::CustomDlgProc(UINT uMsg, WPARAM wParam, LPARAM lParam) {

    TCITEM item;
    HWND*  phDlg;
    HWND   hWndTemp;
    RECT   rc;
    int    nCurSel;

    //message handling 
    switch (uMsg) {

...
case WM_INITDIALOG: //right now, no initializations

	    ///////////////////////////////////////////////////////
	    // TabCtrl initialisieren
	    hWndTemp = GetDlgItem(m_hwnd, IDC_TAB1);

	    ZeroMemory(&amp;item, sizeof(item));
	    item.mask    = TCIF_TEXT;

	    // Tab Title
	    item.pszText = TEXT(&quot;Drive&quot;);
	    TabCtrl_InsertItem(hWndTemp, 0, &amp;item);
	    item.pszText = TEXT(&quot;Directory&quot;);
	    TabCtrl_InsertItem(hWndTemp, 1, &amp;item);

	    // Dialoge, die im TabCtrl erscheienen sollen, erzeugen
	    phDlg    = new HWND[5];
	    phDlg[0] = CreateDialog((HINSTANCE)lParam, MAKEINTRESOURCE(IDD_DIALOG_DRIVE), m_hwnd, DlgProc1);
	    phDlg[1] = CreateDialog((HINSTANCE)lParam, MAKEINTRESOURCE(IDD_DIALOG_DIR), m_hwnd, DlgProc2);

	    BringWindowToTop(phDlg[1]);
	    BringWindowToTop(phDlg[0]);

	    // safe child handles
	    SetWindowLongPtr(m_hwnd, DWLP_USER, (LONG_PTR)phDlg);

	    // fit size to main dialog
	    GetWindowRect(hWndTemp, &amp;rc);
	    ScreenToClient(m_hwnd, (LPPOINT)&amp;rc.left);
	    ScreenToClient(m_hwnd, (LPPOINT)&amp;rc.right);

	    SendMessage(hWndTemp, TCM_ADJUSTRECT, (WPARAM)FALSE, (LPARAM)&amp;rc);
	    MoveWindow(phDlg[0], rc.left, rc.top, rc.right - rc.left, rc.bottom - rc.top, TRUE);
	    MoveWindow(phDlg[1], rc.left, rc.top, rc.right - rc.left, rc.bottom - rc.top, TRUE);

	    ///////////////////////////////////////////////////////
...
return TRUE; 

...

case WM_NOTIFY:
	    switch(((LPNMHDR)lParam)-&gt;code){
		case TCN_SELCHANGING:
		    // Diese Notification wird gesendet, *bevor* das TabCtrl
		    // die Auswahl aendert. Das ist ein guter Zeitpunkt, um
		    // den zurzeit angezeigten Dialog zu verstecken
		    phDlg   = (HWND*)GetWindowLongPtr(m_hwnd, DWLP_USER);
		    nCurSel = TabCtrl_GetCurSel(((LPNMHDR)lParam)-&gt;hwndFrom);

		    if((nCurSel &gt;= 0) &amp;&amp; (nCurSel &lt;= 1))
			ShowWindow(phDlg[nCurSel], SW_HIDE);

		    SetWindowLongPtr(m_hwnd, DWLP_MSGRESULT, (LONG_PTR)FALSE);
		    return(TRUE);

		case TCN_SELCHANGE:
		    // Diese Notification wird gesendet, *nachdem* das TabCtrl
		    // die Auswahl geaendert hat. Dies ist ein guter Zeitpunkt,
		    // um den zur Auswahl passenden Dialog anzuzeigen
		    phDlg   = (HWND*)GetWindowLongPtr(m_hwnd, DWLP_USER);
		    nCurSel = TabCtrl_GetCurSel(((LPNMHDR)lParam)-&gt;hwndFrom);

		    if((nCurSel &gt;= 0) &amp;&amp; (nCurSel &lt;= 1))
			ShowWindow(phDlg[nCurSel], SW_SHOW);

		    return(TRUE);
		default:
		    break;
	    }
	    break;
...

case WM_NCDESTROY:
             // delete allocated
             phDlg = (HWND*)GetWindowLongPtr(m_hwnd, DWLP_USER);
             delete [] phDlg;
             break;
        default:
             break;
</code></pre>
<p>Dialogprozeduren im Rohzustand vorhanden:</p>
<pre><code class="language-cpp">INT_PTR CALLBACK DlgProc1(HWND, UINT uMsg, WPARAM, LPARAM)
{
    switch(uMsg)
    {
        case WM_INITDIALOG:
	    return(TRUE);
	default:
	    break;
    }
    return(FALSE);
}

INT_PTR CALLBACK DlgProc2(HWND, UINT uMsg, WPARAM, LPARAM)
{
    switch(uMsg)
    {
        case WM_INITDIALOG:
	    return(TRUE);
	default:
	    break;
    }
    return(FALSE);
}
</code></pre>
<pre><code class="language-cpp">INITCOMMONCONTROLSEX iccex;
    iccex.dwSize = sizeof(iccex);
    iccex.dwICC  = ICC_TAB_CLASSES;
    InitCommonControlsEx(&amp;iccex);
</code></pre>
<p>.... wird nicht wirklich gebraucht, oder? jedenfalls funktioniert das winapi-beispiel auch ohne.</p>
<p>WS_CHILD und WS_EX_CONTROLPARENT sind äquivalent zu beispiel gesetzt.</p>
<p>Das Problem ist, dass die funktion CreateDialog ein 0 (ungültiges Handle) zurückliefert. Warum? GetLastError() gibt mir 1812 zurück (&quot;The specified resource type cannot be found in the image file.&quot;) Die Dialoge sind aber in dem RC-File vorhanden.</p>
<p>arbeite mit MSVC 2005 (falls das weiterhilft)</p>
<p>danke im voraus</p>
<p>Robert</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1336545</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1336545</guid><dc:creator><![CDATA[rona]]></dc:creator><pubDate>Thu, 02 Aug 2007 06:49:39 GMT</pubDate></item><item><title><![CDATA[Reply to Tab-Control zeigt Dialoge nicht an on Thu, 02 Aug 2007 06:52:23 GMT]]></title><description><![CDATA[<p>Hat denn keiner eine Idee? Ich habe die Dialoge auch schon mehrmals neu erstellt. Es kommt immer wieder der gleiche Fehler. Ich bin am verzweifeln.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1337011</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1337011</guid><dc:creator><![CDATA[rona]]></dc:creator><pubDate>Thu, 02 Aug 2007 06:52:23 GMT</pubDate></item><item><title><![CDATA[Reply to Tab-Control zeigt Dialoge nicht an on Thu, 02 Aug 2007 07:21:55 GMT]]></title><description><![CDATA[<p>probiere mal in den creates statt<br />
(HINSTANCE)lParam<br />
einfach 0 zu uebergeben</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1337032</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1337032</guid><dc:creator><![CDATA[EXDW]]></dc:creator><pubDate>Thu, 02 Aug 2007 07:21:55 GMT</pubDate></item><item><title><![CDATA[Reply to Tab-Control zeigt Dialoge nicht an on Thu, 02 Aug 2007 08:20:13 GMT]]></title><description><![CDATA[<p>Dein Vorschlag in allen Ehren, aber er hilft leider auch nicht weiter. Jetzt bekomme ich den Fehler 1813 &quot;The specified resource type cannot be found in the image file&quot;.</p>
<p>Ich versteh nicht warum er die Resource nicht findet. Sie ist im RC-File vorhanden. <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>
<p>also tool ist dialogbasiert und ich verwende Klassen &lt;- liegt da vielleicht das Problem (vielleicht habe ich einen Denkfehler ?!?)? kompiliert wird jedenfalls ohne Probleme.</p>
<p>Robert</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1337072</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1337072</guid><dc:creator><![CDATA[rona]]></dc:creator><pubDate>Thu, 02 Aug 2007 08:20:13 GMT</pubDate></item><item><title><![CDATA[Reply to Tab-Control zeigt Dialoge nicht an on Thu, 02 Aug 2007 08:35:32 GMT]]></title><description><![CDATA[<p>ok danke erstmal für den Hinweis, dass es am Handle liegen kann. Ich hab mal gegoogelt und auch ein ähnliches Problem gefunden wo auf das Handle hingewiesen wurde.</p>
<p>Naja lange Rede kurzer Sinn -&gt; m_hInstance und es funktioniert *aufn kopf klatsch*</p>
<p>... ein gutes hat es ... das passiert mir nicht wieder <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/1337080</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1337080</guid><dc:creator><![CDATA[rona]]></dc:creator><pubDate>Thu, 02 Aug 2007 08:35:32 GMT</pubDate></item></channel></rss>