Добавление кнопки на Tab Control
У меня две вкладки.Кнопочку надо поместить на вторую.Не используя PropertySheet.
WND WINAPI DoCreateTabControl(HWND hwndParent)
{
HINSTANCE g_hinst;
char g_achTemp[256];
RECT rcClient;
HWND hwndTab;
TC_ITEM tie;
GetClientRect(hwndParent, &rcClient);
InitCommonControls();
hwndTab = CreateWindow(WC_TABCONTROL, "",WS_CHILD | WS_CLIPSIBLINGS | WS_VISIBLE, 0, 0, rcClient.right,rcClient.bottom, hwndParent, NULL, g_hinst, NULL );
if (hwndTab == NULL) return NULL;
tie.mask = TCIF_TEXT | TCIF_IMAGE;
tie.iImage = -1;
tie.pszText = g_achTemp;
LoadString(g_hinst, IDS_F+1, g_achTemp, sizeof(g_achTemp));
TabCtrl_InsertItem(hwndTab, 0, &tie) ;
LoadString(g_hinst, IDS_F, g_achTemp, sizeof(g_achTemp));
TabCtrl_InsertItem(hwndTab, 1, &tie) ;
return hwndTab;
}
теперь динамически создаеш контролы (CreateWindow("EDIT",.hwndtabctrl...)), предварительно вычислив место куда их поместить,при этом используя полученны хэндл таб котрола как родительский.
И все таб котрол появился на экране у пользователя.
Затем пользователь допустим выбирает вкладку и в твое родительское окно которое ты указал в качестве parent для таб котрола шлется сообщение
case TCN_SELCHANGE:
idpage=TabCtrl_GetCurSel(hwndtabcontrol);
здесь ты определил каую вкладку выбрал прользователь,если вкладка осталась та же то ничего не меняш,а если другая то по новому создаеш уже другие котролы предназначеные для этой вкладки а предыдущие уничтожаеш или скрываеш и так для каждый раз при выборе новой вкладки пользователем. Вобщем геморой еще тот лучше используй PropertySheet
Ты создал котрол с 2 мя вкладками правильно. теперь у тебя есть hwnd таб котрола. после создания его и вкладок,сначала устанавливаеш текущюю вкладку для которой ты сперва будеш создавать контролы функцией TabCtrl_SetCurSel(hwndTab,1);//установим видимой вторую вкладку
теперь динамически создаеш контролы (CreateWindow("EDIT",.hwndtabctrl...)), предварительно вычислив место куда их поместить,при этом используя полученны хэндл таб котрола как родительский.
И все таб котрол появился на экране у пользователя.
Затем пользователь допустим выбирает вкладку и в твое родительское окно которое ты указал в качестве parent для таб котрола шлется сообщение
case TCN_SELCHANGE:
idpage=TabCtrl_GetCurSel(hwndtabcontrol);
здесь ты определил каую вкладку выбрал прользователь,если вкладка осталась та же то ничего не меняш,а если другая то по новому создаеш уже другие котролы предназначеные для этой вкладки а предыдущие уничтожаеш или скрываеш и так для каждый раз при выборе новой вкладки пользователем. Вобщем геморой еще тот лучше используй PropertySheet
Все бы ничего. Но че-то у меня как-то коряво обрабаеыпвается TCN_SELCHANGE. Такое чувство что обрабатывается только WM_NOTIFY.
И че-то получить вкладку на которой я щелкнул у меня не получается.
case WM_NOTIFY:
switch (HIWORD(wParam))
{
case 0:
case TCN_SELCHANGE: {
Page = TabCtrl_GetCurSel(hWnd2);
if (Page==1)
{
MessageBox(0,"1","",MB_OK);
}
if (Page==2)
{
MessageBox(0,"2","",MB_OK);
}
}
break;
}
break;
Вот тест-файлик:
Все бы ничего. Но че-то у меня как-то коряво обрабаеыпвается TCN_SELCHANGE. Такое чувство что обрабатывается только WM_NOTIFY.
И че-то получить вкладку на которой я щелкнул у меня не получается.
case WM_NOTIFY:
switch (HIWORD(wParam))
{
case 0:
case TCN_SELCHANGE: {
Page = TabCtrl_GetCurSel(hWnd2);
if (Page==1)
{
MessageBox(0,"1","",MB_OK);
}
if (Page==2)
{
MessageBox(0,"2","",MB_OK);
}
}
break;
}
break;
И что здесь корявого? Что именно корявого? Во первых нумерация вкладок начинается с нуля,т.е. если TabCtrl_GetCurSel возвращяет 1 то это уже вторая вкладка,2 - третяя и т.д. а 0 - это первая вкладка,а как вижу у тебя в коде ты думаеш что ноль вообще не возвращяется а нумерация начинается с 1.
И что здесь корявого? Что именно корявого? Во первых нумерация вкладок начинается с нуля,т.е. если TabCtrl_GetCurSel возвращяет 1 то это уже вторая вкладка,2 - третяя и т.д. а 0 - это первая вкладка,а как вижу у тебя в коде ты думаеш что ноль вообще не возвращяется а нумерация начинается с 1.
Ты тест файл скачай и погляди какой там косяк
Ты тест файл скачай и погляди какой там косяк
О всё!Отбой!Замутил так:
case WM_NOTIFY:
if((((NMHDR*)lParam)->hwndFrom)==hWndTab && (((NMHDR*)lParam)->code)==TCN_SELCHANGE){
Page=TabCtrl_GetCurSel(hWnd2);
if (Page==0)
{
MessageBox(0,"1","",MB_OK);
}
if (Page==1)
{
MessageBox(0,"2","",MB_OK);
}
return TRUE;
}
return FALSE;
break;