2013-05-15 2 views
0

создать вкладки в 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); 
      } 
       } 

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

+1

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

+0

вы правы, когда я изменяю X pos и Y pos дочерних диалогов, появляется элемент управления родительских вкладок, но только когда я изменяю позиции из свойств визуальной панели инструментов. изнутри кода я не мог его изменить, используя функции Getclientrect и setwindowpos. я использовал их либо внутри 'wm_paint', и' wm_size' – user667222

ответ

0

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

+0

, но я не использую функции MFC – user667222

+0

Я использую стандартные библиотеки Windows – user667222

+0

В любом из полученных вами ответов нет функций MFC. –