powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / HDC и HWND обьекта как определить ?
13 сообщений из 13, страница 1 из 1
HDC и HWND обьекта как определить ?
    #34288929
HOME_X
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброе время суток господа садмины и сусопы !
Имею
Set Items = cmBars.Controls.Add(msoComboEdit)
Items.Tag="Hello"

Как ли при таких входящих параметрах определить
HDC и HWND обьекта Items ?

Спасибо !
...
Рейтинг: 0 / 0
HDC и HWND обьекта как определить ?
    #34290789
HOME_X
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если через API GetProp попробывать
Ну Hwnd может не быть
Но HDC наверняка должен быть ......

Спасибо !
...
Рейтинг: 0 / 0
HDC и HWND обьекта как определить ?
    #34291113
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как раз наоборот, без hwnd hdc быть не может. Вообще, в курсе, что такое одно и другое?

Что-то мне подсказывает, что дело просходит в VBA, а там у контролов hwnd нет. Угадал?
...
Рейтинг: 0 / 0
HDC и HWND обьекта как определить ?
    #34291405
Фотография Старый ворчун
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyЧто-то мне подсказывает, что дело просходит в VBA, а там у контролов hwnd нет. Угадал?
hwnd у контролов типа msoControlEdit есть, в этом легко убедиться с помощью Spy++.

Один из вариантов как найти hwnd такого контрола, если известно hwnd окна приложения Office (например, для Access это Application.HwndAccessApp):
1. находится hwnd окна MsoDockTop
h1 = FindWindowEx(Application.hWndAccessApp, 0&, vbNullString, "MsoDockTop")
2. Находится hwnd нужного CommandBar
h1 = FindWindowEx(h1, 0&, vbNullString, "MyCommandBar")
3. Находятся hwnd дочерних окон. Можно использовать GetWindow или EnumChildWindows или опять же FindWindowEx

может можно и проще, но и это несложно.
...
Рейтинг: 0 / 0
HDC и HWND обьекта как определить ?
    #34291695
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Старый ворчун hwnd у контролов типа msoControlEdit есть, в этом легко убедиться с помощью Spy++.Если этот загадочный msoControlEdit - ActiveX, то таки да, есть.
...
Рейтинг: 0 / 0
HDC и HWND обьекта как определить ?
    #34293022
Фотография Старый ворчун
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariy Старый ворчун hwnd у контролов типа msoControlEdit есть, в этом легко убедиться с помощью Spy++.Если этот загадочный msoControlEdit - ActiveX, то таки да, есть.
И что в нем загадочного? Обычный Office CommandBarControl.
Посмотрите Microsoft Office Visual Basic Reference:
авторCreates a new CommandBarControl object and adds it to the collection of controls on the specified command bar.

expression.Add(Type, Id, Parameter, Before, Temporary)
expression Required. An expression that returns a CommandBarControls object.

Type Optional Variant. The type of control to be added to the specified command bar. Can be one of the following MsoControlType constants: msoControlButton, msoControlEdit, msoControlDropdown, msoControlComboBox, or msoControlPopup.
...
Рейтинг: 0 / 0
HDC и HWND обьекта как определить ?
    #34302762
HOME_X
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прошу прощения за отсутствие - были проблемы со связью
Как говорили связисты
- спутник сошел с орбиты (сбили арабы)
- телеф. колодязь залило фикальными водами (снова арабы ...........)
- снижение температуры по Украине привело к изменению принципа
электронно-дырочной проводимости кремния.............
- и т.д. и т.п.

Hwnd в Cpy++ у меня появляеться если был хоть один перенос фокуса
Если обьект еще не был активен - Hwnd нет (по иерархии окон искал - НЕТУ)
А из параметров (указатель на обьект и Tag обьекта) получить эту HDC невозможно ?

Set Items = cmBars.Controls.Add(msoComboEdit)
Items.Tag="Hello"

"Вообще, в курсе, что такое одно и другое................"

Вы правы - что есть Hwnd - видел, понимаю - указатель на окно представленный в виде
уникального длинного целого числа

Что есть HDC - читал, догадываюсь но до конца не чувствую.......................(пардон)

"просходит в VBA, а там у контролов hwnd нет....."
Абсолютно точно в приложении Outlook - это элемент CommandBar...............

Хочу в координатах Add.Controls сделать так ................... (погнать закраску)
но нужен HDC - как его найти .............. ?

Private Const COLOR_HIGHLIGHT = 13
Private Declare Function GetSysColorBrush Lib "user32" (ByVal nIndex As Long) As Long
Private Declare Function FillRect Lib "user32" (ByVal hdc As Long, lpRect As Rect, ByVal hBrush As Long) As Long

Private Sub .........................
Dim R As Rect
I = I + 10
R.Left = 10
R.Top = 10
R.Right = 10 + I
R.Bottom = 50
Call FillRect(Hdc, R, GetSysColorBrush(13))
End Sub
...
Рейтинг: 0 / 0
HDC и HWND обьекта как определить ?
    #34303201
Гаишник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
HOME_X"просходит в VBA, а там у контролов hwnd нет....."
Абсолютно точно в приложении Outlook - это элемент CommandBar...............

А у CommandBar Hwnd есть......
...
Рейтинг: 0 / 0
HDC и HWND обьекта как определить ?
    #34303255
HOME_X
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Его возможно получить через ......
Private Declare Function ApiGetActiveWindow Lib "user32" Alias "GetActiveWindow" () As Long
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal

H = FindWindowEx(ApiGetActiveWindow, 0, "MsoCommandBarDock", "MsoDockTop")
H = FindWindowEx(H, 0, "MsoCommandBar", "FTP_FOSS")

но если в обьекте Controls.Add(msoComboEdit) в текущем сеансе не было фокусе
искать это окно невозможно ..... проверял ...
...
Рейтинг: 0 / 0
HDC и HWND обьекта как определить ?
    #34303262
HOME_X
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А по координатам обьекта можно найти его HDC
(координаты можно вычислить CommandBars.Left+Controls().Left ???????????)
...
Рейтинг: 0 / 0
HDC и HWND обьекта как определить ?
    #34303347
Фотография Старый ворчун
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HOME_Xно если в обьекте Controls.Add(msoComboEdit) в текущем сеансе не было фокусе
искать это окно невозможно ..... проверял ...
скажите, что такое msoComboEdit? В Office 2003 такого нет.
А у msoControlEdit hwnd есть и без получения фокуса .... проверял
...
Рейтинг: 0 / 0
HDC и HWND обьекта как определить ?
    #34303519
HOME_X
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Файл - копия экрана
Вторая панель сверху - это панель FTP_FOSS
Второй Control слева - это обьект msoControlEdit (представлен константой = 2)
Это из стандартного набора компонентов Office

(неверно в исходном варинте
Set Items = cmBars.Controls.Add( msoComboEdit )
читать как
Set Items = cmBars.Controls.Add( msoControlEdit )
но значение константы правильное
)

Private Const msoControlButton = 1
Private Const msoControlEdit = 2
Private Const msoControlDropdown = 3
Private Const msoControlActiveX = 22
Private Const msoComboNormal = 0
Private Const msoComboLabel = 1
Private Const msoButtonCaption = 2

Вошел в Outlook - запуск Cpy++ обьекта msoControlEdit не виден - рисунок 1
Теперь перевел фокус просто походил по обьектам панели (запуск Cpy++) Hwnd виден рисунок 2
Т.е эпизодическая инициализация (до востребованию)....
Так базировать програмнный код не есть хорошо.......
...
Рейтинг: 0 / 0
HDC и HWND обьекта как определить ?
    #34305825
HOME_X
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello - взываю к диалогу....
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / HDC и HWND обьекта как определить ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]