Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.12.2012, 18:56   #1
Desha
Форумчанин
 
Аватар для Desha
 
Регистрация: 06.04.2009
Сообщений: 124
По умолчанию WinApi рисование в VBA

Хочу получить контекст отображения - форма, на канвасе которой буду выводить рисунок. Почиталась. Запуталась.
Нашла, что для этого используется функция GetDC. Есть вариант подключения данной функции такой:
Код:
[DllImport("coredll.dll", EntryPoint = "GetDC")]
private static extern IntPtr GetDC(IntPtr hWnd);
В данном случае ругается на вторую строчку.

Стандартный (а может и нет, просто первым попался на глаза) метод вызова функции:
Код:
Private Declare Function GetDC Lib "coredll.dll" (hWnd)
На это выводит, что такая библиотека не найдена.

А вообще все началось с банального =) - нарисовать треугольник.
Для этого надо нарисовать три линии. Соответственно для этого:
Код:
Private Declare Function LineTo Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long) As Long
Вызов функции должен выглядеть так:
Код:
LineTo hdc, x, y
где hdc - контекст отображения. Вот с ним то и проблема

Сама форма свойств типа Canvas/Handle не имеет

Последний раз редактировалось Desha; 02.12.2012 в 19:06.
Desha вне форума Ответить с цитированием
Старый 02.12.2012, 19:34   #2
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Поиск рулит
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 02.12.2012, 20:41   #3
Desha
Форумчанин
 
Аватар для Desha
 
Регистрация: 06.04.2009
Сообщений: 124
По умолчанию

Помогло и очень. Спасибо.
Возник другой вопрос. Надо найти хендл окна. Функция FindWindow. Должна находиться в библиотеке User. Мне выдает что такой файл не найдет. В User32 выдает уже что нет такой функции.
И мне в моем случае именно ее использовать или FindWindowEx? Последняя для дочерних форм. Будет ли форма модуля являться дочерней по отношению к книге?
Desha вне форума Ответить с цитированием
Старый 02.12.2012, 23:18   #4
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Цитата:
Будет ли форма модуля являться дочерней по отношению к книге?
Нет.

А вы файл с примером не качнули?
Вот эта функция

frmDraw.Caption-это с вашей формы Caption
Код:
Function GetFormsDC()
    'working code
    'hwnd = Application.hwndDraw all over excel - update "Sub ReleaseSessionDC()"
    hwnd = FindWindow("thunderDFrame", frmDraw.Caption)
    hdc = GetDC(hwnd)
    '''appttemp to get frame hnd
    ''' dont work, might have to drill down from the perent form
    ''' will look later
    'hwnd = FindWindow("F3 Server 02d50000", frmDraw.Frame1.Caption)
    'hDC = GetDC(hwnd)
    'frmDraw.CommandButton1.Caption = hDC
End Function
Анализ,обработка данных Недорого

Последний раз редактировалось doober; 03.12.2012 в 01:05.
doober вне форума Ответить с цитированием
Старый 03.12.2012, 20:31   #5
Desha
Форумчанин
 
Аватар для Desha
 
Регистрация: 06.04.2009
Сообщений: 124
По умолчанию

Оказалось проблема была в описании функции. Теперь все функции видит и выполняет, но рисует все равно не на окне формы, а на окне Excel'я. Причем как оказалось, путем несложных проверок, окно формы вообще Visible=Enable=false.
Desha вне форума Ответить с цитированием
Старый 05.12.2012, 12:32   #6
Desha
Форумчанин
 
Аватар для Desha
 
Регистрация: 06.04.2009
Сообщений: 124
По умолчанию

Разобралась.
Код:
hwnd = FindWindow("thunderDFrame", frmDraw.Caption)
Вместо "thunderDFrame" по идее можно использовать null либо nil.
В VBA такое не работает. Вместо этого надо использовать "vbNullString"
Код:
frmDraw.Caption
у меня тоже не работал. поэтому писалось прямо

Итого:
Код:
hwnd = FindWindow(vbNullString, "UserForm1")
Тема закрыта.
Desha вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
рисование примитивами GDI(WinApi) SeriiMD Помощь студентам 0 13.03.2012 00:22
рисование в WINAPI Alt_Shift Помощь студентам 3 03.07.2011 20:14
рисование в WinApi - кленовый лист Isa Win Api 4 27.03.2011 05:21
Рисование в WinApi nazavrik Win Api 13 30.08.2009 23:54
Рисование на форме созданной на WinApi N!ckeL Win Api 3 30.04.2008 19:02