дочерний элемент диалогового окна вкладки закрывает саму вкладку

Я создаю элемент управления вкладками в WM_INITDIALOG следующим образом:

 INITCOMMONCONTROLSEX icex = {0};
 icex.dwSize = sizeof(INITCOMMONCONTROLSEX);
 icex.dwICC = ICC_TAB_CLASSES;
 InitCommonControlsEx(&icex); 
 TCITEM tie;
 LPSTR text = "my tab";
 tie.mask = TCIF_TEXT|TCIF_IMAGE;
 tie.iImage = -1;
 tie.pszText = text;
 hTab = CreateWindow(WC_TABCONTROL, "", WS_CHILD |WS_CLIPSIBLINGS| WS_VISIBLE,
        0,0, 400, 350, hWnd,NULL, g_hInstance, NULL);
 TabCtrl_InsertItem(hTab,0,&tie);
 TabCtrl_InsertItem(hTab,1,&tie);
 TabCtrl_InsertItem(hTab,2,&tie);

а также я создаю здесь два диалоговых окна, чтобы отображать на каждой вкладке содержимое вкладки. Я создаю их с помощью панели инструментов, выбирая диалоговое окно formview:

hwndTabcontentDialog1  = CreateDialogParam( GetModuleHandle( NULL ),
            MAKEINTRESOURCE( IDD_FORMVIEW1 ), hTab, (DLGPROC)Proc1,lParam );
hwndTabcontentDialog2  = CreateDialogParam( GetModuleHandle( NULL ),
        MAKEINTRESOURCE( IDD_FORMVIEW ), hTab, (DLGPROC)Proc2,lParam );

теперь в WM_NOTIFY я делаю это с содержимым каждой вкладки при нажатии:

 case WM_NOTIFY:
switch (((LPNMHDR)lParam)->code)
    {
    case TCN_SELCHANGE:
    {
        if( TabCtrl_GetCurSel( ( ( LPNMHDR ) lParam) -> hwndFrom ) == 0 ) {
                ShowWindow( hwndTabcontentDialog1, SW_SHOW );
                ShowWindow( hwndTabcontentDialog2, SW_HIDE );

            } else {
                ShowWindow( hwndTabcontentDialog1, SW_HIDE );
                ShowWindow( hwndTabcontentDialog2, SW_SHOW );
            }
              }

теперь вкладка создана, и все в порядке (содержимое текущей вкладки не видно), но когда я нажимаю на один из элементов вкладки, диалоговое окно охватывает все элементы управления вкладками, и вы больше не можете видеть вкладки. что случилось ? что мне изменить?


person user667222    schedule 15.05.2013    source источник
comment
Похоже, вы устанавливаете размер дочернего окна на размер элемента управления вкладкой. Если это так, это не сработает, так как вкладки рисуются в клиентской области, а не в неклиентской. Получите высоту вкладок, вычтите из высоты элемент управления вкладками, и вы получите размер, который вы должны использовать (конечно, со смещением сверху). В качестве альтернативы размер может быть правильным, но вы не указываете смещение для отображения под фактическими вкладками.   -  person Captain Obvlious    schedule 15.05.2013
comment
вы правы, когда я меняю положение X и положение Y дочерних диалогов, появляется элемент управления родительской вкладкой, но только тогда, когда я меняю позиции в свойствах визуальной панели инструментов. изнутри кода я не мог изменить его с помощью функций Getclientrect и setwindowpos. я использовал их внутри wm_paint и wm_size   -  person user667222    schedule 15.05.2013


Ответы (1)


Сразу после создания диалогов измените их положение/размер с помощью MoveWindow. Сообщение управления вкладкой TCM_ADJUSTRECT может помочь вам определить правильное положение/размер для создания диалогов.

person ScottMcP-MVP    schedule 15.05.2013
comment
но я не использую функции MFC - person user667222; 15.05.2013
comment
я использую стандартные библиотеки Windows - person user667222; 15.05.2013
comment
Ни в одном из полученных вами ответов нет функций MFC. - person ScottMcP-MVP; 15.05.2013