Отправляет email-рассылки с помощью сервиса Sendsay

Программирование. Форум !!!

CTabCtrl

Здравствуйте, comp.

Подскажите, каким образом в Tab-е можно заблокировать обработку на
нажатие клавиш курсора? Дело делается в Vicual C 6.0.

Ответить   Виктор Sun, 18 Sep 2005 09:46:15 +0400 (#439251)

 

Ответы:

Помнится была такая функция EnableWindow(HWND,BOOL)
соответственно первый параметр - дескриптор окна, а второй - булево занчение,
говорящее что окно должно быть заблокировано (false), и, разблокирвано в противном
случае.

Хотя могу в чем то ошибиться :)

Номер выпуска : 4905
Возраст листа : 728 (дней)
Количество подписчиков : 535
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/439260
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

Ответить   Sun, 18 Sep 2005 10:46:38 +0400 (#439260)

 

Здравствуйте !

EnableWindow блокирует весь пользовательский ввод (в том числе и от
мыши). К тому же в disabled-состоянии контролы обычно рисуются по
другому.
Имхо, правильнее блокировать прохождение WM_KEYDOWN, WM_KEYUP
с определенными кодами клавиш до оконной процедуры контрола.
Для MFC это можно сделать если в PreTranslateMessage.
Не вызывать PreTranslateMessage родительского класса, просто
возвратить FALSE (естесственно, только если сообщение
WM_KEYDOWN или WM_KEYUP и коды клавишь соответствующие).

Ответить   Sun, 18 Sep 2005 12:20:00 +0400 (#439292)

 

Неправда, рисуется он также. Проверено! :) А какой нужен ввод отмыши?

Номер выпуска : 4908
Возраст листа : 728 (дней)
Количество подписчиков : 535
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/439326
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

Ответить   Sun, 18 Sep 2005 13:45:34 +0400 (#439326)

 

Здравствуйте !

Не "он", а "они" я имел в виду контролы вообще.
Кнопки, Edit Control, Static Control, и.т.д. рисуются по другому.
Ничто не мешает мелкософту в следующих версиях винды в disabled state
на Tab-е хоть козью морду нарисовать :)

Изначально вопрос был "каким образом в Tab-е можно заблокировать обработку
на нажатие клавиш курсора?". То есть, имхо, автор топика хотел, чтобы
с помошью клавиатуры нельзя было между закладками переключаться.
Но при этом можно на нужную вкладку кликнуть и переключиться.

Ответить   Sun, 18 Sep 2005 19:07:15 +0400 (#439515)

 

Здравствуйте, Victor.

Именно так и было.

Всё работает, смысл ясен. Спасибо! :D

Ответить   Виктор Sun, 18 Sep 2005 20:16:07 +0400 (#439588)

 

Здравствуйте, Victor.

Можно по подробнее?

Ответить   Виктор Sun, 18 Sep 2005 14:18:58 +0400 (#439340)

 

Здравствуйте !

Ну, например:

BOOL CMyDlg::PreTranslateMessage(MSG* pMsg)
{
if(pMsg->hwnd == m_wndTab.GetSafeHwnd())
{
if(((pMsg->message == WM_KEYDOWN) ||
(pMsg->message == WM_KEYUP))
&&
((pMsg->wParam == VK_LEFT) ||
(pMsg->wParam == VK_UP) ||
(pMsg->wParam == VK_RIGHT) ||
(pMsg->wParam == VK_DOWN)))
{
return TRUE;
}
}

return CDialog::PreTranslateMessage(pMsg);
}

Это для случая с диалогом. В диалоге есть таб. Для
этой таб-ы есть объект m_wndTab. Класс диалога CMyDlg.
В нем, соответственно, PreTranslateMessage.
Теперь с помощью клавы между заклатками переключаться
нельзя.

Ответить   Sun, 18 Sep 2005 19:07:15 +0400 (#439514)