Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

hInstance [Win2k, WinXP]


Dmk ©   (2003-05-02 18:09:00) 

При создании окна с помощью CreateWindow используется
параметр hInstance. Что он означает?


Dmk   (2003-05-03 04:03:00) [1]

2 Almaz © (03.05.03 03:44)
Я Вам очень благодарен. Спасибо.

PS. С 9 утра сижу. Уже мозги клинит. Всем спокойной ночи.


Almaz   (2003-05-03 03:44:00) [2]


> Dmk © (02.05.03 21:32)
> Вот и я не пойму при чем здесь hInstance :)
> если в 0 ставишь, тоже работает.
> Может есть где подробное объяснение.
> В TCustomForm например создается свой экземпляр:
> FClientInstance := Classes.MakeObjectInstance(ClientWndProc);
> Я просто не понимаю связи hInstance и WindowProc.
> И для чего это нужно??????

Здается мне, у вас произошла некоторая путаница в понятиях :)
1. Параметр hInstance, передаваемый функции CreateWindow - это, как правильно сказал vuk, идентификатор экземпляра модуля, с которым ассоциируется окно (а еще точнее - адрес, куда этот модуль был загружен в виртуальном адресном пространстве процесса). НИКАКОГО отношения к WindowProc он НЕ ИМЕЕТ. В Win9x в качестве этого параметра необходимо передавать значение глобальной переменной hInstance. В Win2k/XP этот параметр и вовсе игнорируется.

2. Теперь о функции MakeObjectInstance - эта функция также не имеет НИКАКОГО отношения к hInstance, передаваемому CreateWindow. MakeObjectInstance существует из-за того, что в качестве оконной функции (WindowsProc) не может быть указан ни один метод какого либо класса (т.к. для любого метода класса первым параметром должен быть передан указатель Self и т.п.) Поэтому создатели VCL пошли на следующую хитрость - с помощью функции MakeObjectInstance для каждого объекта создается заглушка оконной функции, которая попросту передает управление соостветствующему методу данного класса, и в качестве оконной функции для создаваемого окна указывается именно она.


Dmk   (2003-05-03 02:18:00) [3]

Вместо того чтобы объяснить
вы господин Адрианов издеваетесь.
Может я неверно понял, так что ж с того?
Вы наверно сразу поняли когда разбирались с hInstance?
И к вашему сведению: мозги у всех по разному устроены.


nikkie   (2003-05-03 01:26:00) [4]

>Все tnx разобрался :)
ну-ну.
>Если 0, то окно будет под управлением Application
можешь написать про это в microsoft


Dmk   (2003-05-02 23:57:00) [5]

Все tnx разобрался :)
//Windows NT/2000: This value is ignored.
ничего подобного - не игнорируется.
Если 0, то окно будет под управлением Application


nikkie   (2003-05-02 23:22:00) [6]

>если в 0 ставишь, тоже работает.
hInstance
Windows 95/98: [in] Handle to the instance of the module to be associated with the window.
Windows NT/2000: This value is ignored.


Dmk   (2003-05-02 21:32:00) [7]

Вот и я не пойму при чем здесь hInstance :)
если в 0 ставишь, тоже работает.
Может есть где подробное объяснение.
В TCustomForm например создается свой экземпляр:
FClientInstance := Classes.MakeObjectInstance(ClientWndProc);
Я просто не понимаю связи hInstance и WindowProc.
И для чего это нужно??????


vuk   (2003-05-02 21:00:00) [8]

А при чем здесь hInstance?


Dmk   (2003-05-02 18:33:00) [9]

Если данное окно будет иметь стиль Child, то к чему
его привязывать? К Application.Handle? или к MainForm?


vuk   (2003-05-02 18:22:00) [10]

Читаем Help:

hInstance

Identifies the instance of the module to be associated with the window.

Означает это, что hInstance идентифицирует экземпляр модуля(приложения или dll), с которым будет связано это окно.


Наверх

Титульная страница Поиск, карта сайта Написать письмо