Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Добавление кнопки на Tab Control

3.8K
29 июля 2005 года
arphey
51 / / 30.10.2004
Граждане! Помогите поместить кнопочку на 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;
}
406
30 июля 2005 года
vitaly2003s
481 / / 27.07.2004
Ты создал котрол с 2 мя вкладками правильно. теперь у тебя есть hwnd таб котрола. после создания его и вкладок,сначала устанавливаеш текущюю вкладку для которой ты сперва будеш создавать контролы функцией TabCtrl_SetCurSel(hwndTab,1);//установим видимой вторую вкладку
теперь динамически создаеш контролы (CreateWindow("EDIT",.hwndtabctrl...)), предварительно вычислив место куда их поместить,при этом используя полученны хэндл таб котрола как родительский.
И все таб котрол появился на экране у пользователя.
Затем пользователь допустим выбирает вкладку и в твое родительское окно которое ты указал в качестве parent для таб котрола шлется сообщение

case TCN_SELCHANGE:
idpage=TabCtrl_GetCurSel(hwndtabcontrol);

здесь ты определил каую вкладку выбрал прользователь,если вкладка осталась та же то ничего не меняш,а если другая то по новому создаеш уже другие котролы предназначеные для этой вкладки а предыдущие уничтожаеш или скрываеш и так для каждый раз при выборе новой вкладки пользователем. Вобщем геморой еще тот лучше используй PropertySheet
3.8K
31 июля 2005 года
arphey
51 / / 30.10.2004
Цитата:
Originally posted by vitaly2003s
Ты создал котрол с 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;

3.8K
31 июля 2005 года
arphey
51 / / 30.10.2004
Цитата:

Вот тест-файлик:

406
31 июля 2005 года
vitaly2003s
481 / / 27.07.2004
Цитата:
Originally posted by arphey
Все бы ничего. Но че-то у меня как-то коряво обрабаеыпвается 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.

3.8K
31 июля 2005 года
arphey
51 / / 30.10.2004
Цитата:
Originally posted by vitaly2003s
И что здесь корявого? Что именно корявого? Во первых нумерация вкладок начинается с нуля,т.е. если TabCtrl_GetCurSel возвращяет 1 то это уже вторая вкладка,2 - третяя и т.д. а 0 - это первая вкладка,а как вижу у тебя в коде ты думаеш что ноль вообще не возвращяется а нумерация начинается с 1.



Ты тест файл скачай и погляди какой там косяк

3.8K
31 июля 2005 года
arphey
51 / / 30.10.2004
Цитата:
Originally posted by arphey
Ты тест файл скачай и погляди какой там косяк



О всё!Отбой!Замутил так:

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;

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог