![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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), с которым будет связано это окно.