|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Июл 18, 2004 21:31:07 Всем привет. Столкнулся с проблемой. Имеется основной диалог, содержащий в себе SysTabControl32. Каждая страница таб-контрола содержит дочернее окно, в котором имеются EditBox'ы, PushButton'ы и другие элементы. Нужно, чтобы в каждом окне можно было перемещать фокус ввода между контролами с помощью клавиши tab. Т.е. чтобы это работало так же, как в PROPSHEETPAGE. Если бы не было SysTabControl32, было бы достаточно субклассить остальные контролы по отношению к родительскому диалогу. Вопрос: как это сделать по отношению к SysTabControl32 наиболее "человеческим" способом ? Есть несколько мыслей. Например самому обрабатывать события TCM_KEYDOWN (при нажатии tab самому перемещать фокус на следующий элемент), а при изменении текущей страницы в tab control проверять все элементы на предмет фокуса ввода (он ведь еще и мышкой меняется) и сохранять, например, хэндл текущего элемента где-нибудь в TCITEM. В общем, все это выглядит слишком громоздко. Может быть есть способ проще ? |
|
|
Дата: Июл 18, 2004 23:32:21 В качестве tab-страниц можно использовать диалоги. |
|
|
Дата: Июл 19, 2004 00:19:14 В качестве tab-страниц можно использовать диалоги Так оно и есть. Т.е. код примерно следующий: mov MAIN_TAB.imask, TCIF_TEXT mov MAIN_TAB.lpReserved1, 0 mov MAIN_TAB.lpReserved2, 0 mov MAIN_TAB.iImage, 0 mov MAIN_TAB.lParam, 0 mov MAIN_TAB.pszText, offset Dialog1Text mov MAIN_TAB.cchTextMax, SIZEOF Dialog1Text invoke SendMessage, hMainTab, TCM_INSERTITEM, 0, addr MAIN_TAB mov MAIN_TAB.pszText, offset Dialog2Text mov MAIN_TAB.cchTextMax, SIZEOF Dialog2Text invoke SendMessage, hMainTab, TCM_INSERTITEM, 1, addr MAIN_TAB invoke CreateDialogParam, hInstance, addr Dialog1ID, hMainTab, addr Dialog1Proc, 0 mov hDialog1, eax invoke CreateDialogParam, hInstance, addr Dialog2ID, hMainTab, addr Dialog2Proc, 0 mov hDialog2, eax Где Dialog1Proc и Dialog2Proc - соответствующий процедуры обработки сообщений для каждого диалога. Вопрос в том - как заставить наиболее простым способом переключать фокус ввода между контролами в каждом из диалогов по кнопке tab. |
|
|
Дата: Июл 19, 2004 02:02:31 Присвоить стиль WS_TABSTOP каждому контролу. |
|
|
Дата: Июл 28, 2004 14:44:47 Если б все было настолько просто, я и не спрашивал бы :) Дело в том, что события от дочерних диалогов, находящихся на станицах systabcontrol не обрабатываются как в обычном диалоговом окне стандартными средствами, и "навигации по дефолту" не получается. Вариантов два: 1. Сабклассить каждый контрол по отношению к его родительскому окну. Радости мало, потому как контролов не один, не два и даже не 10. К тому же если есть несколько radiobutton в groupbox'e, то получится примерно следующее: radiobutton -> [subclass] -> groupbox -> [subclass] -> child window -> [subclass] -> systabcontrol32 -> [subclass] -> main dialog window При том, что у нас несколько "страниц" на systabcontrol32, и на каждой из них около или более десятка своих элементов. Выглядит грустно. Далее. Есть такая штука, как стиль дочернего окна DS_CONTROL, и стиль родительского окна WS_EX_CONTROLPARENT. Такая комбинация, по идее, должна позволить системе самой осуществлять навигацию между родительскими и дочерними окнами и их элементами. Но трудность в том, что у нас 3-4 "уровня" родительских и дочерних диалогов. И при попытке сделать, к примеру, одно из дочерних окон WS_EX_CONTROLPARENT по отношению к эелментам, расположенным в нем, и DS_CONTROL по отношению к systabcontrol, ничего хорошего не выходит. Может кто-то уже сталкивался с проблемой ? |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.078 |