<?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[TabControl mit Resourcen-Dialog füllen ?]]></title><description><![CDATA[<p>Funktioniert es ein erstelltes Tab-Control mit anderen Dialog-Fenstern die in der Resource vorhanden sind zu füllen ?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/15625/tabcontrol-mit-resourcen-dialog-füllen</link><generator>RSS for Node</generator><lastBuildDate>Sat, 18 Jul 2026 22:06:00 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/15625.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 04 Dec 2002 18:58:00 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to TabControl mit Resourcen-Dialog füllen ? on Wed, 04 Dec 2002 18:58:00 GMT]]></title><description><![CDATA[<p>Funktioniert es ein erstelltes Tab-Control mit anderen Dialog-Fenstern die in der Resource vorhanden sind zu füllen ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/84678</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/84678</guid><dc:creator><![CDATA[BiGFusel]]></dc:creator><pubDate>Wed, 04 Dec 2002 18:58:00 GMT</pubDate></item><item><title><![CDATA[Reply to TabControl mit Resourcen-Dialog füllen ? on Wed, 04 Dec 2002 20:16:00 GMT]]></title><description><![CDATA[<p>Ja, geht. Und da ich meine, die Frage schon öfter mal gelesen zu haben, habe ich Dir jetzt mal ein Sample gebastelt. Du brauchst nur noch zwei Dialoge (mit den IDs IDD_DIALOG1 und IDD_DIALOG2). Die Dialoge dürfen nicht sichtbar sein und müssen WS_CHILD und WS_EX_CONTROLPARENT gesetzt haben. Zur Funktion: Das TabCtrl sendet TCN_SELCHANGING, bevor die Auswahl verändert wird. An dieser Stelle muß der aktive Dialog versteckt werden. Danach, also nachdem die Auswahl verändert wurde, kannst Du den richtigen Dialog anzeigen. Das ist schon alles.</p>
<pre><code class="language-cpp">#include &lt;windows.h&gt;
#include &lt;commctrl.h&gt;
#include &lt;tchar.h&gt;
#include &lt;uxtheme.h&gt;
#include &quot;resource.h&quot;

#define IDC_TAB  50

typedef HRESULT (WINAPI * ENABLETHEMEDIALOGTEXTURE)(HWND, DWORD);

HRESULT WINAPI MyEnableThemeDialogTexture(HWND hWnd, DWORD dwFlags)
{
  ENABLETHEMEDIALOGTEXTURE pfnETDT;
  HINSTANCE                hDll;
  HRESULT                  hr;

    hr = HRESULT_FROM_WIN32(ERROR_CALL_NOT_IMPLEMENTED);

    if(NULL != (hDll = LoadLibrary(TEXT(&quot;uxtheme.dll&quot;))))
    {
        if(NULL != (pfnETDT = (ENABLETHEMEDIALOGTEXTURE)GetProcAddress(hDll, &quot;EnableThemeDialogTexture&quot;)))
        {
            hr = pfnETDT(hWnd, dwFlags);
        }
        FreeLibrary(hDll);
    }

  return(hr);
}

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);
}

LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
  TCITEM item;
  HWND*  phDlg;
  HWND   hWndTemp;
  RECT   rc;
  int    nCurSel;

    switch(uMsg)
    {
        case WM_CREATE:
             hWndTemp = CreateWindowEx(0, WC_TABCONTROL, TEXT(&quot;&quot;), WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_CLIPSIBLINGS | TCS_FOCUSNEVER | TCS_SINGLELINE, 0, 0, 0, 0, hWnd, (HMENU)IDC_TAB, ((LPCREATESTRUCT)lParam)-&gt;hInstance, NULL);

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

             item.pszText = TEXT(&quot;Dialog 1&quot;);
             TabCtrl_InsertItem(hWndTemp, 0, &amp;item);
             item.pszText = TEXT(&quot;Dialog 2&quot;);
             TabCtrl_InsertItem(hWndTemp, 1, &amp;item);

             phDlg    = new HWND[2];
             phDlg[0] = CreateDialog(((LPCREATESTRUCT)lParam)-&gt;hInstance, MAKEINTRESOURCE(IDD_DIALOG1), hWnd, DlgProc1);
             phDlg[1] = CreateDialog(((LPCREATESTRUCT)lParam)-&gt;hInstance, MAKEINTRESOURCE(IDD_DIALOG2), hWnd, DlgProc2);

             if(SendMessage(hWndTemp, CCM_GETVERSION, 0, 0) &gt;= 6)
             {
                 MyEnableThemeDialogTexture(phDlg[0], ETDT_ENABLETAB);
                 MyEnableThemeDialogTexture(phDlg[1], ETDT_ENABLETAB);
             }

             SetWindowLongPtr(hWnd, GWLP_USERDATA, (LONG_PTR)phDlg);
             ShowWindow(phDlg[0], SW_SHOW);
             return(0);
        case WM_ERASEBKGND:
             return(1);
        case WM_NOTIFY:
             switch(((LPNMHDR)lParam)-&gt;code)
             {
                 case TCN_SELCHANGING:
                      phDlg   = (HWND*)GetWindowLongPtr(hWnd, GWLP_USERDATA);
                      nCurSel = TabCtrl_GetCurSel(((LPNMHDR)lParam)-&gt;hwndFrom);

                      if(0 == nCurSel)
                          ShowWindow(phDlg[0], SW_HIDE);
                      else if(1 == nCurSel)
                          ShowWindow(phDlg[1], SW_HIDE);

                      return(FALSE);
                 case TCN_SELCHANGE:
                      phDlg   = (HWND*)GetWindowLongPtr(hWnd, GWLP_USERDATA);
                      nCurSel = TabCtrl_GetCurSel(((LPNMHDR)lParam)-&gt;hwndFrom);

                      if(0 == nCurSel)
                          ShowWindow(phDlg[0], SW_SHOW);
                      else if(1 == nCurSel)
                          ShowWindow(phDlg[1], SW_SHOW);

                      return(0);
                 default:
                      break;
             }
             break;
        case WM_SIZE:
             phDlg    = (HWND*)GetWindowLongPtr(hWnd, GWLP_USERDATA);
             hWndTemp = GetDlgItem(hWnd, IDC_TAB);

             SetRect(&amp;rc, 0, 0, LOWORD(lParam), HIWORD(lParam));
             MoveWindow(hWndTemp, 0, 0, rc.right, rc.bottom, TRUE);

             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(0);
        case WM_NCDESTROY:
             phDlg = (HWND*)GetWindowLongPtr(hWnd, GWLP_USERDATA);
             delete [] phDlg;
             PostQuitMessage(0);
             return(0);
        default:
             break;
    }

  return(DefWindowProc(hWnd, uMsg, wParam, lParam));
}

int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE, LPTSTR, int nCmdShow)
{
  INITCOMMONCONTROLSEX iccex;
  WNDCLASSEX           wc;
  HWND                 hWnd;
  MSG                  msg;

    iccex.dwSize = sizeof(iccex);
    iccex.dwICC  = ICC_TAB_CLASSES;
    InitCommonControlsEx(&amp;iccex);

    wc.cbSize        = sizeof(wc);
    wc.style         = 0;
    wc.lpfnWndProc   = WndProc;
    wc.cbClsExtra    = 0;
    wc.cbWndExtra    = 0;
    wc.hInstance     = hInstance;
    wc.hIcon         = (HICON)LoadIcon(NULL, IDI_APPLICATION);
    wc.hCursor       = (HCURSOR)LoadCursor(NULL, IDC_ARROW);
    wc.hbrBackground = (HBRUSH)(COLOR_APPWORKSPACE + 1);
    wc.lpszMenuName  = NULL;
    wc.lpszClassName = TEXT(&quot;TabCtrl-Test&quot;);
    wc.hIconSm       = (HICON)LoadIcon(NULL, IDI_APPLICATION);

    if(!RegisterClassEx(&amp;wc))
        return(0);
    if(NULL == (hWnd = CreateWindowEx(WS_EX_OVERLAPPEDWINDOW | WS_EX_APPWINDOW, wc.lpszClassName, wc.lpszClassName, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL)))
        return(0);

    ShowWindow(hWnd, nCmdShow);

    while(GetMessage(&amp;msg, NULL, 0, 0))
    {
        if(!IsDialogMessage(hWnd, &amp;msg))
        {
            TranslateMessage(&amp;msg);
            DispatchMessage (&amp;msg);
        }
    }

  return(msg.wParam);
}
</code></pre>
<p>[edit] Ich hab's noch schnell XP-tauglich gemacht. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /> [/edit]</p>
<p>[ Dieser Beitrag wurde am 04.12.2002 um 23:40 Uhr von <strong>-King-</strong> editiert. ]</p>
]]></description><link>https://www.c-plusplus.net/forum/post/84679</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/84679</guid><dc:creator><![CDATA[-King-]]></dc:creator><pubDate>Wed, 04 Dec 2002 20:16:00 GMT</pubDate></item><item><title><![CDATA[Reply to TabControl mit Resourcen-Dialog füllen ? on Wed, 04 Dec 2002 20:42:00 GMT]]></title><description><![CDATA[<p>Danke für Deine umfangreiche Antwort, hätte nicht gedacht das es so schwierig ist. Vielen, vielen Dank für Deine Mühe ... werde mich jetzt ausgiebig Deinem Code widmen und mal sehen ob es so funzt wie ich es mir vorstelle</p>
]]></description><link>https://www.c-plusplus.net/forum/post/84680</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/84680</guid><dc:creator><![CDATA[BiGFusel]]></dc:creator><pubDate>Wed, 04 Dec 2002 20:42:00 GMT</pubDate></item><item><title><![CDATA[Reply to TabControl mit Resourcen-Dialog füllen ? on Wed, 04 Dec 2002 22:11:00 GMT]]></title><description><![CDATA[<p>Dein Code funzt, habe Ihn allerdings in eine DialogProc mit einigen Abwandlungen eingebaut, funktioniert aber sonst einwandfrei.</p>
<p>Habe nur noch ein paar Probleme mit der TCM_ADJUSTRECT Message. Nach der MSDN liefert die ja entweder das mögliche TAB_Control Display zurück oder setzt es. Habe hier meine Probleme da ich nicht rauskriege, wie man das rect unterhalb des Kartenreiters richtig rausfindet, um dann mit SetWindowPos das Child-Dialog-Fenster aus der Resource an die richtige Stelle zu setzen. Hast Du noch eine andere Idee ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/84681</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/84681</guid><dc:creator><![CDATA[BiGFusel]]></dc:creator><pubDate>Wed, 04 Dec 2002 22:11:00 GMT</pubDate></item><item><title><![CDATA[Reply to TabControl mit Resourcen-Dialog füllen ? on Wed, 04 Dec 2002 22:47:00 GMT]]></title><description><![CDATA[<blockquote>
<p>Dein Code funzt, habe Ihn allerdings in eine DialogProc mit einigen Abwandlungen eingebaut, funktioniert aber sonst einwandfrei.</p>
</blockquote>
<p>Ich rate mal, daß er sich der Compiler über die Signaturen der Dialog-Prozeduren beschwert hat. Da ist also ein Update des PSDKs fällig. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<blockquote>
<p>Habe nur noch ein paar Probleme mit der TCM_ADJUSTRECT Message. Nach der MSDN liefert die ja entweder das mögliche TAB_Control Display zurück oder setzt es. Habe hier meine Probleme da ich nicht rauskriege, wie man das rect unterhalb des Kartenreiters richtig rausfindet, um dann mit SetWindowPos das Child-Dialog-Fenster aus der Resource an die richtige Stelle zu setzen. Hast Du noch eine andere Idee ?</p>
</blockquote>
<p>Im Code oben siehst Du, wie es geht. Und das funktioniert, ich habe es selbst probiert. Wenn Deine Fenster nicht an der richtigen Stelle sind, so sind sie nicht mit WS_CHILD ausgestattet. Wenn Du den VC benutzt:</p>
<ol>
<li>Im Ressourcen-Editor die Dialog-Eigenschaften abrufen</li>
<li>Tab &quot;Formate&quot; auswählen</li>
<li>In der ComboBox &quot;Stile&quot; den Eintrag &quot;untergeordnet&quot; wählen (löscht WS_POPUP, setzt WS_CHILD)</li>
<li>Tab &quot;Erweiterte Formate&quot; wählen</li>
<li>Die CheckBox &quot;Übergeordnete Steuern&quot; markieren (setzt WS_EX_CONTROLPARENT)</li>
</ol>
]]></description><link>https://www.c-plusplus.net/forum/post/84682</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/84682</guid><dc:creator><![CDATA[-King-]]></dc:creator><pubDate>Wed, 04 Dec 2002 22:47:00 GMT</pubDate></item><item><title><![CDATA[Reply to TabControl mit Resourcen-Dialog füllen ? on Thu, 05 Dec 2002 05:09:00 GMT]]></title><description><![CDATA[<p>Mit dem Dialogmanager habe ich keine Probleme es funktioniert einwandfrei.<br />
Die Styles waren so gesetzt wie Du es erneut vorgeschlagen hast, dennoch muss ich ein paar Werte hinzuaddieren, um unter die Reiter die Dialoge aus der Resource zu setzen, es funktioniert aber auch so.</p>
<p>Vielleicht noch eins: Ich habe mein Tabcontrol nicht als Fenster mit CreateWindow erstellt (wie nach Deinem Code hWndTemp), sondern bereits in der Resource erstellt und im Hauptdialog fest verankert. Wenn ich nun mit TCM_ADJUSTRECT die Maße des Tabs aus der Resource hole, sind die Reiter eingeschlossen, d. h. vom auf der Registerkarte einzufügenden Dialog überlagert. Doch mit etwas Addition ist es nachher so, wie ich es wollte, meine Resourcen-Dialoge erscheinen im Main-Dialog auf den einzelnen Registerkarten und schicken auch noch fein Messages an ihre Proc´s. :p</p>
]]></description><link>https://www.c-plusplus.net/forum/post/84683</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/84683</guid><dc:creator><![CDATA[BiGFusel]]></dc:creator><pubDate>Thu, 05 Dec 2002 05:09:00 GMT</pubDate></item><item><title><![CDATA[Reply to TabControl mit Resourcen-Dialog füllen ? on Thu, 05 Dec 2002 12:21:00 GMT]]></title><description><![CDATA[<blockquote>
<p>Vielleicht noch eins: Ich habe mein Tabcontrol nicht als Fenster mit CreateWindow erstellt (wie nach Deinem Code hWndTemp), sondern bereits in der Resource erstellt und im Hauptdialog fest verankert.</p>
</blockquote>
<p>Das macht doch nichts. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /><br />
Aus WM_CREATE wird WM_INITDIALOG, aus CreateWindowEx wird GetDlgItem und selbstverständlich darfst Du die Dialog-Handles nicht mehr in GWLP_USERDATA speichern, Du mußt hier DWLP_USER verwenden.</p>
<blockquote>
<p>Wenn ich nun mit TCM_ADJUSTRECT die Maße des Tabs aus der Resource hole, sind die Reiter eingeschlossen, d. h. vom auf der Registerkarte einzufügenden Dialog überlagert.</p>
</blockquote>
<p>TCM_ADJUSTRECT holt überhaupt nichts, das hast Du falsch verstanden. <strong>Du</strong> holst die Maße des Tabs, und zwar per GetWindowRect(). Danach ermittelst Du die Client-Koordinaten (ScreenToClient). Jetzt hast Du in der Rect-Struktur die Maße des Tabs stehen. TCM_ADJUSTRECT ermittelt nun zu diesem gegebenen Rechteck die Display-Area, sofern wParam auf FALSE gesetzt ist. TCM_ADJUSTRECT rechnet also einfach nur ein gegebenes Rechteck um. Da muß dann auch nichts mehr addiert werden:</p>
<pre><code class="language-cpp">{
  HWND hWndTab;

    hWndTab = GetDlgItem(hDlgParent, IDC_TAB);

    GetWindowRect(hWndTab, &amp;rc);
    ScreenToClient(hDlgParent, (LPPOINT)&amp;rc.left);
    ScreenToClient(hDlgParent, (LPPOINT)&amp;rc.right);

    SendMessage(hWndTab, TCM_ADJUSTRECT, (WPARAM)FALSE, (LPARAM)&amp;rc);
    MoveWindow(hDlg1, rc.left, rc.top, rc.right - rc.left, rc.bottom - rc.top, TRUE);
    MoveWindow(hDlg2, rc.left, rc.top, rc.right - rc.left, rc.bottom - rc.top, TRUE);

}
</code></pre>
<p>Das funktioniert natürlich nur, solange beide, also Tab und Dialoge, das gleiche Parent haben (den Frame-Dialog).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/84684</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/84684</guid><dc:creator><![CDATA[-King-]]></dc:creator><pubDate>Thu, 05 Dec 2002 12:21:00 GMT</pubDate></item><item><title><![CDATA[Reply to TabControl mit Resourcen-Dialog füllen ? on Thu, 05 Dec 2002 15:30:00 GMT]]></title><description><![CDATA[<p>Jetzt weiss ich endlich warum Du Dich &quot;King&quot; nennst !!!<br />
Alle Achtung, hast Du eigentlich die API studiert ? Du bist hier wahrscheinlich ein echter API-Guru, nach Deinen vielen richtigen netten Antworten ! Meine Hochachtung und Lob ! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /> <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/84685</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/84685</guid><dc:creator><![CDATA[BiGFusel]]></dc:creator><pubDate>Thu, 05 Dec 2002 15:30:00 GMT</pubDate></item><item><title><![CDATA[Reply to TabControl mit Resourcen-Dialog füllen ? on Mon, 09 Dec 2002 02:09:00 GMT]]></title><description><![CDATA[<p>ja, ist er!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/84686</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/84686</guid><dc:creator><![CDATA[der Sepp]]></dc:creator><pubDate>Mon, 09 Dec 2002 02:09:00 GMT</pubDate></item><item><title><![CDATA[Reply to TabControl mit Resourcen-Dialog füllen ? on Tue, 26 Sep 2006 19:03:01 GMT]]></title><description><![CDATA[<p>Hallo an alle, ist echt ein super Beispiel,</p>
<p>jedoch habe ich hier das Problem das wenn ich den zweiten Dialog der von dem MainDialog aufgerufen wird (indem auch die Tabboxes drinnen sind) bewege die Tabboxen mit dem Dialog mitgehen, jedoch die füllenden Felder bleiben immer am selben Punkt.</p>
<p>Kurz wenn ich den Dialog mit den Tabboxen wegziehe sind die Tabboxen nackt und die Inhalte von den Tabboxen liegen am Hauptfenster <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
<p>Kann mir diesbezüglich jemand weiterhelfen?</p>
<p>Lg _freeze_</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1145052</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1145052</guid><dc:creator><![CDATA[_freeze_]]></dc:creator><pubDate>Tue, 26 Sep 2006 19:03:01 GMT</pubDate></item><item><title><![CDATA[Reply to TabControl mit Resourcen-Dialog füllen ? on Tue, 26 Sep 2006 21:19:06 GMT]]></title><description><![CDATA[<p>Hm wie wärs wenn das inne FAQ kommt...</p>
<p>Kann dem:</p>
<p>-King- schrieb:</p>
<blockquote>
<p>Und da ich meine, die Frage schon öfter mal gelesen zu haben[...]</p>
</blockquote>
<p>nur zustimmen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /> .</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1145148</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1145148</guid><dc:creator><![CDATA[CodeFinder]]></dc:creator><pubDate>Tue, 26 Sep 2006 21:19:06 GMT</pubDate></item></channel></rss>