2010-09-09 3 views
0

У меня есть программа, где мне нужно отключить определенную кнопку на панели инструментов. «Сохранить» на элементе управления Adobe Reader.Windows API: скрыть кнопку, которая не является дочерним окном

Я знаю, что можно скрыть элемент управления, указав его дескриптор окна.

Используя Spy ++, я нашел нужную панель инструментов. Он имеет кнопки и текстовые поля. Хотя текстовые поля являются дочерними окнами панели инструментов, кнопки не являются окнами вообще!

Как действовать в этом случае? Есть ли способ скрыть такие кнопки? Я попытался найти их, используя относительное положение на панели инструментов и отображая что-то сверху, но его разделы можно переместить вручную пользователем.

+0

Вы попали в ловушку, считая, что программист владеет компьютером пользователя, пока ваша программа (установлена ​​/ запущена/т. Д./Выбрана одна). Это неверно. Пользователь владеет компьютером пользователя. Это зависит от того, используют ли они функцию сохранения Adobe Reader, если вы попытаетесь отнять этот выбор, это битва, которую вы проиграете. –

+0

Я не пытаюсь ограничить возможности пользователя сохранять в Adobe Reader. Речь идет о моем собственном приложении, которое использует компонент Adobe Reader для отображения защищенного контента. И дело в том, чтобы сделать его доступным только для чтения. – SharpAffair

ответ

1

Вы должны послать TB_ENABLEBUTTON на панель инструментов

+0

Lior, спасибо за ваш ответ. Я вижу, что wParam - это «Командный идентификатор», где я могу его найти? – SharpAffair

+1

Значение присваивается при добавлении кнопки на панель инструментов. Чтобы узнать это значение, загляните в уведомления о панели инструментов (предположим, NM_CLICK i). –

+0

См. Http://msdn.microsoft.com/en-us/library/bb760435(v=VS.85).aspx список всех уведомлений на панели инструментов. –

1

Предположив у вас есть HWindow на панели инструментов, вы можете перебирать все кнопки на панели инструментов (позиция на основе, используйте TB_BUTTONCOUNT для количества кнопок), используйте TB_GETBUTTON сообщений для получения текущего идентификатора команды, затем TB_GETBUTTONTEXT (с идентификатором команды), чтобы получить заголовок кнопки. Затем используйте кнопку TB_ENABLEBUTTON для кнопки с подписью, которую вы ищете.

+0

Кнопки имеют значки и титры. Может быть, я найду его по номеру? И как перебирать кнопки панели инструментов? Какую функцию я должен использовать? – SharpAffair

+0

Это не работает, я попробовал Dim count As IntPtr = SendMessage (toolbarHandle, TB_BUTTONCOUNT, IntPtr.Zero, IntPtr.Zero) с обработчиком, полученным из Spy ++, и результатом всегда является «Invalid Windows Handle», – SharpAffair

 Смежные вопросы

  • Нет связанных вопросов^_^