Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Программирование с использованием WinAPI

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61

Открыть новую тему     Написать ответ в эту тему

ChiPnGo



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Есть юнит на делфи, который описывает класс и его окно.
При создании происходит RegisterClass(wndClass) для класса окна, но в wndClass нужно передавать указатель на WndProc (TWndClass.lpfnWndProc). А эта функция должна использовать поля конкретного объекта, поскольку нужно иметь возможность открывать много таких окон в одной программе.
 
Можно ли как-то вписать WndProc методом класса? (или еще как-то обойти)
Если адреса Вндпроцедур будут разными - то у них должны быть разные классы окна?
 
ПС Кроме этой функции есть еще и другие с подобной проблемой.

Всего записей: 149 | Зарегистр. 25-10-2008 | Отправлено: 22:27 12-11-2008
Abs62



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ChiPnGo

Цитата:
Можно ли как-то вписать WndProc методом класса?

Нет, нельзя. Метод класса от обычной функции отличается тем, что в него кроме явно описанных параметров передаётся ещё один скрытый - указатель на экземпляр класса.  

Цитата:
(или еще как-то обойти)

Обойти можно. Записать указатель на класс в структуру окна через SetWindowLongPtr с параметром GWLP_USERDATA, а в оконной функции извлекать его через GetWindowLongPtr и вызывать нужные методы через него как через обычный указатель.

Цитата:
Если адреса Вндпроцедур будут разными - то у них должны быть разные классы окна?

Обычно одна оконная функция обслуживает все окна данного класса. Но при необходимости можно задать и другую оконную функцию для конкретного окна. С помощью SetWindowLongPtr с параметром GWLP_WNDPROC.

----------
0 программистов ругал сердитый шеф
Потом уволил одного, и стало их FF

Всего записей: 6110 | Зарегистр. 22-10-2005 | Отправлено: 23:36 12-11-2008 | Исправлено: Abs62, 23:38 12-11-2008
ChiPnGo



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Полезные функции.  А откуда их подгружать? В старых версиях заголовочных файлов такого нет.

Всего записей: 149 | Зарегистр. 25-10-2008 | Отправлено: 01:11 13-11-2008
Abs62



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ChiPnGo
Если не предполагается создание 64-разрядного кода, можно использовать SetWindowLong/GetWindowLong.
Или добавить прототипы самому. См. здесь, например.


----------
0 программистов ругал сердитый шеф
Потом уволил одного, и стало их FF

Всего записей: 6110 | Зарегистр. 22-10-2005 | Отправлено: 01:48 13-11-2008
vserd

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ChiPnGo
 

Цитата:
Можно ли как-то вписать WndProc методом класса? (или еще как-то обойти)  
Если адреса Вндпроцедур будут разными - то у них должны быть разные классы окна?  

Попробуй мой пост http://forum.ru-board.com/topic.cgi?forum=33&topic=5223  
В создании окон не пробовал, но в других местах срабатывает.
 
первоисточник: http://ifolder.ru/9050972 , в инете статьи уже на нахожу.

Всего записей: 2065 | Зарегистр. 08-05-2002 | Отправлено: 10:44 13-11-2008
lorents



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
помогите пожалуйста сделать такое
хочу сделать код сохранить файл и что бы была проверка на наличие если есть такой файл выдать диалоговое окно предупреждения  
 
 

Всего записей: 3299 | Зарегистр. 30-12-2007 | Отправлено: 20:41 13-11-2008
Abs62



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
lorents
GetSaveFileName с установленным флагом OFN_OVERWRITEPROMPT.

----------
0 программистов ругал сердитый шеф
Потом уволил одного, и стало их FF

Всего записей: 6110 | Зарегистр. 22-10-2005 | Отправлено: 21:30 13-11-2008
lorents



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Abs62
я извиняюсь, простоя я не на C++ программирую
вы уж извините, но если вам не очень трудно не могли бы написать пример на C++ с вызовом и проверки и с объяснением что к чему, очень надо, если вам не очень трудно напишите пожалуйста

Всего записей: 3299 | Зарегистр. 30-12-2007 | Отправлено: 22:20 13-11-2008 | Исправлено: lorents, 22:43 13-11-2008
Abs62



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
lorents
В сети несложно найти примеры на разных языках. Например:
C++
Visual Basic
Dephi

----------
0 программистов ругал сердитый шеф
Потом уволил одного, и стало их FF

Всего записей: 6110 | Зарегистр. 22-10-2005 | Отправлено: 23:19 13-11-2008
ChiPnGo



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
lorents
А на чем вы программируете? Можно было б тогда конкретнее.
WinAPI - это же не функции языка, а интерфейс между любой программой и системой + разные общие полезности.

Всего записей: 149 | Зарегистр. 25-10-2008 | Отправлено: 16:51 14-11-2008 | Исправлено: ChiPnGo, 16:53 14-11-2008
VitaliM



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Все, наверное, сталкивались с тем что при скачивании исполняемого файла с помощью IE перед запуском этого файла ОС задает вопрос о безопасности скачаного файла. Это происходит потому что у файла, если открыть его свойства, стоит дополнительный атрибут "заблокировано". Его можно снять в свойствах. Так вот вопрос, как программно поставить такой атрибут.

Всего записей: 2204 | Зарегистр. 12-01-2005 | Отправлено: 17:23 14-11-2008
ChiPnGo



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Еще вопрос по теме.
http://forum.ru-board.com/topic.cgi?forum=33&topic=0555&start=732
 
Этот юнит с классом теперь оформлен в виде длл.
Внутри функция, которая создает очередное окно при вызове и возвращает указатель на очередной объект класса. В ней запускается метод Run класса, в котором цикл приема сообщений.
Создание следующего окна блокирует выполнение Run предыдущего.
Создание потока (BeginThread с параметрами: указатель на созданный объект и указатель на функцию, которая по этому указателю вызывает Run нужного объекта) приводит к нормальному созданию окна и входу в Run, которое после нескольких операций зависает + закрытие окна убивает весь процесс. Похоже на неудачное создание потока выполнения с последующей утечкой памяти:
http://qc.codegear.com/wc/qcmain.aspx?d=67691
 
В фиксе еще неизвестный идентификатор "SystemThreadFuncProc".
 
PS Просто выходит как-то из Run. Гудини нашелся...

Всего записей: 149 | Зарегистр. 25-10-2008 | Отправлено: 18:43 14-11-2008 | Исправлено: ChiPnGo, 21:13 14-11-2008
ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ChiPnGo

Цитата:
Этот юнит с классом теперь оформлен в виде длл.

Ну у меня без длл и все нормально работает. Юзайте оригинальные данные. Утечек не видел.

----------
И создал Бог женщину... Существо получилось злобное, но забавное...

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 03:55 15-11-2008
Qraizer



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
VitaliM, сильно подозреваю, что это не атрибут. Я замечал у таких файлов альтернативный NTFS-поток, но не уверен, что дело ограничивается им. Попробуй покопай в этом направлении.


----------
Одни с годами умнеют, другие становятся старше.

Всего записей: 613 | Зарегистр. 08-08-2006 | Отправлено: 19:49 15-11-2008
Abs62



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Qraizer
Тем не менее, если этот дополнительный поток удалить, кнопка "Unblock" из свойств исчезает. Присобачишь эти данные к другому файлу - появляется у того. Видимо, именно этот поток и надо копать.
 
PS. Тут есть некоторые подробности.

----------
0 программистов ругал сердитый шеф
Потом уволил одного, и стало их FF

Всего записей: 6110 | Зарегистр. 22-10-2005 | Отправлено: 21:59 15-11-2008 | Исправлено: Abs62, 22:10 15-11-2008
theHelg

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Добрый день!
 
Есть оконное графическое приложение, которое САМО меняет картинку курсора мышки.
 
Мне нужно отловить момент, когда приложение меняет курсор с одного на другой.
 
MouseGetCursor возвращает все время тип ARROW, хотя в приложении форма курсора меняется...
 
Функция GetCursorInfo - через handle возвращает все время один и тот же указатель, несмотря на то, что курсор меняется...
 
Пытаюсь отловить цвет пикселя на указатели мышки, но GetPixel из gdi32.dll мне дает лишь цвет пикселя ПОД мышкой!
Смотрю цвет, что-то типа такого:
$pos = MouseGetPos()
$varColor = PixelGetColor($pos[0]+2, $pos[1]+2)
 
Собственно вопрос. Как или чем можно вытащить тип курсора (который всегда ARROW) или хотя бы цвет указателя мышки...  
 
ЗЫ Print Screen не предлагать... уже думал над этим, но очень долго работает...

Всего записей: 13 | Зарегистр. 12-11-2008 | Отправлено: 23:16 15-11-2008
windwail

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ну обычно курсор меняется черерз это
SetClassLong (hwndChild, GCL_HCURSOR, LoadCursor (hInstance, TEXT ("childcursor")) ;
 

Всего записей: 48 | Зарегистр. 04-01-2007 | Отправлено: 17:18 27-11-2008
stupid_user

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Нужно написать на WinApi аналог сишной функции fopen(FileName, Mode).
Апишная функция CreateFile, но вот не могу понять как с режимами открытия быть.
Например "rt" - тестовый режим; "rb" - бинарный режим. Как эти режимы скармливать CreateFile?
*пишу на delphi

Всего записей: 292 | Зарегистр. 12-11-2006 | Отправлено: 20:21 28-11-2008 | Исправлено: stupid_user, 20:30 28-11-2008
Abs62



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
stupid_user
Никак. WinAPI понятия не имеет о сишных потоках ввода-вывода. ReadFile/WriteFile работают в бинарном режиме.

Всего записей: 6110 | Зарегистр. 22-10-2005 | Отправлено: 20:44 28-11-2008
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
stupid_user
по-моему, атрибутами FILE_FLAG_SEQUENTIAL_SCAN и FILE_FLAG_RANDOM_ACCESS
 
---
 
Abs62
да?
 
stupid_user
тогда я неправ и это с буферизацией i/o связано...

Всего записей: 25734 | Зарегистр. 06-12-2002 | Отправлено: 20:46 28-11-2008 | Исправлено: akaGM, 20:53 28-11-2008
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Программирование с использованием WinAPI


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2025

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru