Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Програмно сменить закладку чужого приложения 
V
    Опции темы
dizzy1984
Дата 28.4.2009, 10:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 675
Регистрация: 15.2.2007

Репутация: 10
Всего: 25



Есть готовое приложение. В нем используется компонент CBCGPTabWnd, представляющий из себя окошко с закладками.
Можни ли как-то сменить закладку программно...
Чтобы не заморачиваться на библиотеке bcgcontrolbar, задаю тот же вопрос для mfc контрола CTabCtrl (т.к есть подозрение на схожесть реализаций). Есть ли сообщение, которое будучи послано этому контролу приведет к смене закладки?
PM MAIL   Вверх
Andrey44
Дата 28.4.2009, 11:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1501
Регистрация: 4.12.2006
Где: На работе

Репутация: 12
Всего: 26



Цитата

Selects a tab in a tab control.

 
int SetCurSel(
  int nItem 
);
 
MSDN   CTabCtrl


Это сообщение отредактировал(а) Andrey44 - 28.4.2009, 11:54


--------------------
????? ??, ??????? ?????.  smile 
PM MAIL WWW ICQ   Вверх
dizzy1984
Дата 28.4.2009, 12:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 675
Регистрация: 15.2.2007

Репутация: 10
Всего: 25



Цитата

Есть готовое приложение


PM MAIL   Вверх
Andrey44
Дата 28.4.2009, 12:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1501
Регистрация: 4.12.2006
Где: На работе

Репутация: 12
Всего: 26



Цитата

A tab control does not send a TCN_SELCHANGING or TCN_SELCHANGE notification message when a tab is selected using this function. These notifications are sent, using WM_NOTIFY, when the user clicks or uses the keyboard to change tabs.
MSDN   CTabCtrl



--------------------
????? ??, ??????? ?????.  smile 
PM MAIL WWW ICQ   Вверх
dizzy1984
Дата 28.4.2009, 15:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 675
Регистрация: 15.2.2007

Репутация: 10
Всего: 25



То есть вы хотите сказать, что если последовательно послать 2 сообщения (TCN_SELCHANGING, TCN_SELCHANGE) родительскому окну, то сменится закладка дочернего CTabCtrl?
Я почему-то думал, что это просто уведомительные сообщения, посылающиеся уже после совершения смены закладки, т.е не являющиеся ее первопричиной...
На опытном образце эти манипуляции не приводят к смене закладки.
PM MAIL   Вверх
Earnest
Дата 29.4.2009, 07:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



Цитата(dizzy1984 @  28.4.2009,  16:10 Найти цитируемый пост)
Я почему-то думал, что это просто уведомительные сообщения

Правильно ты думал. Для CTabCtrl тебе уже сказали - SetCurSel, для CBCGPTAbWnd - SetActiveTab.

Если ты хочешь именно через сообщения (т.е. другому приложению), то для CTabCtrl это TCM_SETCURSEL, а вот для CBCGPTAbWnd придется обломаться: управления сообщениями там нет. И реализация вовсе не такая, не предполагает обязательного использования TabCtrl. Впрочем, в конкретном случае он там может быть. Выяснить это можно Спаем, а затем послать сообщение соответствующему чайлду (скорее всего, это чайлд какого-то уровня). А если нет, то это может быть кнопка - тогда ей нужно послать LBUTTONDOWN. И если не кнопка - тоже сэмулировать нажатие на области закладки.


--------------------
...
PM   Вверх
dizzy1984
Дата 29.4.2009, 12:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 675
Регистрация: 15.2.2007

Репутация: 10
Всего: 25



Вообщем, все правильно, уже сам дошел до сказанного Earnest, хотя, конечно, приятно увидеть подтверждение.
Ни кнопок, ни таб контрола там нет, контрол сам рисует прямоугольные области, представляющие из себя закладки. Остается примерно такой способ : путем изучения кода отрисовки закладок сделать вывод о положении точки, принадлежащей закладке с заданным номером, после чего посылать сообщение WM_LBUTTONDOWN и, наверное, WM_LBUTTONUP, окошку контрола.
Что представляется довольно трудоемким по сравнению с получаемым результатом, поэтому вряд ли когда-то будет.
Вообще странно, что нет управления сообщениями - часто удобно управлять чужим контролом.
PM MAIL   Вверх
Earnest
Дата 29.4.2009, 12:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



Если соберешься эмулировать клик, лучше используй mouse_event, а не посылку LBUTTONDOWN\UP: во первых, не надо парится кому - только экранные координаты вычислить, во-вторых - up оно само нарисует... Но вообще рекомендую тебе изучить код BCGPTabWnd и его базы; я-то посмотрела весьма бегло; Может, что и нароешь.




--------------------
...
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.0457 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.