Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.03.2013, 20:38   #11
hvz-
Форумчанин
 
Регистрация: 14.11.2010
Сообщений: 138
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
Код:
		case WM_NOTIFY:
			{
				case TCN_SELCHANGE:
Тут как бы нужен второой switch
Точно!)
Но всё равно не работает, как будто код пропускает:
Код:
case WM_NOTIFY:
			{
				switch(WM_NOTIFY)
				{
					case TCN_SELCHANGE:
						int tabb = TabCtrl_GetCurSel(hTabs);
						switch(tabb)
						{
							case 0:
								MessageBox(hWnd, TEXT("FUNKCIJA NE RABOTAET"), TEXT("A VOT"), MB_OK);
								break;
							case -1:
								MessageBox(hWnd, TEXT("OSHIBKA"), TEXT("A VOT"), MB_OK);
								break;
							case 1:
								CpuTab();
								MessageBox(hWnd, TEXT("RABOTAET1"), TEXT("A VOT"), MB_OK);
								break;
							case 2:
								break;
							case 3:
								break;
							case 4:
								break;
							case 5:
								break;
							default:
								MessageBox(hWnd, TEXT("FIG"), TEXT("A VOT"), MB_OK);
								break;
						}
				}
			}
Вроде всё верно, но как будто этот свитч не хочет работать.
Так же добавлял в конец default:break; - компиль начал ругаться что переменная tabb "пропускается" в этом default. Что я делаю не правильно?
hvz- вне форума Ответить с цитированием
Старый 25.03.2013, 20:46   #12
counter
Участник клуба
 
Регистрация: 18.10.2008
Сообщений: 1,409
По умолчанию

Цитата:
switch(WM_NOTIFY)
тут нужен свитч, но не такой...
counter вне форума Ответить с цитированием
Старый 25.03.2013, 21:06   #13
hvz-
Форумчанин
 
Регистрация: 14.11.2010
Сообщений: 138
По умолчанию

Цитата:
Сообщение от counter Посмотреть сообщение
тут нужен свитч, но не такой...
Спасибо, свитч заработал. Совсем забыл что входящие параметры проверять нужно)
Но теперь получается что функция TabCtrl_GetCurSel возвращает 0, не понимаю почему.
Код:
case WM_NOTIFY:
				switch((((LPNMHDR)lParam)->code))
				{
					case TCN_SELCHANGE:
						//MessageBox(hWnd, TEXT("TCN_SELCHANGE"), TEXT("A VOT"), MB_OK);
						int tabb = TabCtrl_GetCurSel(hTabs);
						switch(tabb)
						{
							case 0:
								MessageBox(hWnd, TEXT("FUNKCIJA NE RABOTAET"), TEXT("A VOT"), MB_OK);
								break;
							case -1:
								MessageBox(hWnd, TEXT("OSHIBKA"), TEXT("A VOT"), MB_OK);
								break;
							case 1:
								CpuTab();
								MessageBox(hWnd, TEXT("RABOTAET1"), TEXT("A VOT"), MB_OK);
								break;
							case 2:
								break;
							case 3:
								break;
							case 4:
								break;
							case 5:
								break;
							default:
								MessageBox(hWnd, TEXT("FIG"), TEXT("A VOT"), MB_OK);
								break;
						}
			}
hvz- вне форума Ответить с цитированием
Старый 26.03.2013, 02:28   #14
hvz-
Форумчанин
 
Регистрация: 14.11.2010
Сообщений: 138
По умолчанию

Так же в case 0: подставил вызов моей функции - не работает, текст н отображается в вкладке. Получается что моя глобальная переменная hTabs "не пашет" ?
hvz- вне форума Ответить с цитированием
Старый 26.03.2013, 02:45   #15
hvz-
Форумчанин
 
Регистрация: 14.11.2010
Сообщений: 138
По умолчанию

Похоже, что проблема решена, надо просто в функцию TabCtrl_GetCurSel() посылать (((LPNMHDR)lParam)->hwndFrom).
Получается, что нет надобности содержать глобальные переменные дескрипторов, Я правильно понимаю? Т.е. всегда можно узнать от кого пришло сообщение через hwndFrom ?

И ещё вопрос:
Если я делаю индексы так
Код:
	
AddItemToTab(TEXT("CPU"), 0, hTabs);
AddItemToTab(TEXT("GPU"), 1, hTabs);
AddItemToTab(TEXT("RAM"), 2, hTabs);
AddItemToTab(TEXT("HDD"), 3, hTabs);
AddItemToTab(TEXT("Soft"), 4, hTabs);
то в нужной не вкладке появляется нужный мне контрол, но если делаю так:
Код:
AddItemToTab(TEXT("CPU"), 1, hTabs);
AddItemToTab(TEXT("GPU"), 2, hTabs);
AddItemToTab(TEXT("RAM"), 3, hTabs);
AddItemToTab(TEXT("HDD"), 4, hTabs);
AddItemToTab(TEXT("Soft"), 5, hTabs);
То контролы не появляются. В обработке сооющения в switch'ах ест-но всё подгоняю под текущий порядок индексов.

Последний раз редактировалось hvz-; 26.03.2013 в 03:38.
hvz- вне форума Ответить с цитированием
Старый 26.03.2013, 11:40   #16
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,331
По умолчанию

Ну, явно у TCM_INSERTITEM нельзя давать неправильный индекс для вставки... всегда проверяйте что вам возвращают функции...

Да, hwndFrom содержит дескриптор окна, которое послало WM_NOTIFY
waleri вне форума Ответить с цитированием
Старый 01.04.2013, 01:23   #17
hvz-
Форумчанин
 
Регистрация: 14.11.2010
Сообщений: 138
По умолчанию

Возник ещё вопрос - вот создал я в определённой вкладке нужные мне контролы - текста, кнопки и т.д. А при смене как их все удалить? Не делать же глобальными дескрипторы(а их достаточно) и к каждому из них вызывать функцию DestroyWindow()?
Может есть функция которая будет удалять все существующие контролы в определённом дескрипторе(в моём случае - вкладка) ?
hvz- вне форума Ответить с цитированием
Старый 01.04.2013, 09:11   #18
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,331
По умолчанию

Цитата:
Сообщение от hvz- Посмотреть сообщение
Может есть функция которая будет удалять все существующие контролы в определённом дескрипторе(в моём случае - вкладка) ?
Нет, такой функции нет. Можете сами написать, например используя EnumChildWindows() или GetWindow().
Либо (что еще легче) просто сделать еще один слой - ваше окно, которое содержит ваши контролы. Потом удаляете это окно, оно само удаляет контролы. Обычно это диалоговое окно - тогда и контролы можно рисовать редактором.
waleri вне форума Ответить с цитированием
Старый 01.04.2013, 14:43   #19
counter
Участник клуба
 
Регистрация: 18.10.2008
Сообщений: 1,409
По умолчанию

Цитата:
Сообщение от hvz- Посмотреть сообщение
Возник ещё вопрос - вот создал я в определённой вкладке нужные мне контролы - текста, кнопки и т.д. А при смене как их все удалить? Не делать же глобальными дескрипторы(а их достаточно) и к каждому из них вызывать функцию DestroyWindow()?
Может есть функция которая будет удалять все существующие контролы в определённом дескрипторе(в моём случае - вкладка) ?
Обычно на каждую вкладку аттачится диалог с нужными контролами, а при смене вкладки этот диалог просто скрывается ShowWindow(SW_HIDE)
counter вне форума Ответить с цитированием
Старый 01.04.2013, 18:50   #20
hvz-
Форумчанин
 
Регистрация: 14.11.2010
Сообщений: 138
По умолчанию

Цитата:
Сообщение от counter Посмотреть сообщение
Обычно на каждую вкладку аттачится диалог с нужными контролами, а при смене вкладки этот диалог просто скрывается ShowWindow(SW_HIDE)
А можно пример с этими диалогами? Никогда с ними не сталкивался.
hvz- вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Цикл по Tabs в TabControl Shouldercannon Общие вопросы Delphi 3 12.12.2012 13:37
jquery ui tabs Hey4 JavaScript, Ajax 1 02.03.2012 23:15
Tabs-меню. Как это реализовано (ссылка на образец)? akokin HTML и CSS 3 14.10.2009 15:36