Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 | 2 |

 

  Вопрос: Отловить потерю фокуса формой! Добавлено: 07.02.05 14:11  

Автор вопроса:  mayevskyy | ICQ: 1234567890 

Ответить

  Ответы Всего ответов: 22  

Номер ответа: 16
Автор ответа:
 User Unknown



Вечный Юзер!

ICQ: uu@jabber.cz 

Вопросов: 120
Ответов: 3302
 Профиль | | #16 Добавлено: 09.02.05 18:13
> Не ошибаются только правильно запрограммированные компьютеры ;)

ни фига, и они тоже ошибаются;)... например тот же VxWorks тогда сбойнул... наверное по той же причине, почему до сих пор на космических станциях используются "большие" микросхемы...

Ответить

Номер ответа: 17
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #17
Добавлено: 09.02.05 22:36
Ох млин, CyRax'у объяснить оказалось тяжелей всего...
Пытаюсь объяснить свою точку зрения:
При CallWindowProc все происходит именно так как ты и написал! И оно правильно!
Теперь, при использовании DefWindowProc мы передаем управление не нашей старой оконной процедуре, а стандартному виндовому обработчику. При этом код нашей старой оконной процедуры - не вызывается, он бесполезен!
При том что мы не знаем что там в ту процедуру понапихано, а знам нам это собственно особо и не надо, мы не можем предугадать поведение нашего окошка, да и вообще всей программы... Разумеется оно работать будет, но так-ли как задумано!

Я не хотел указывать на ошибки, но раз ты настаиваешь:
DefWindowProc - Default Window Procedure
Говоря на сленге - родная оконная процедура.

По моему тут нет разницы. Что CallWindowProc с адресом родной процедуры, что DefWindowProc c хендлом окна делают одно и тоже.

1. Default Window Procedure - это ни как ни есть родная оконная процедура.
2. CallWindowProc по адресу вызывает тот код, указатель на который ты передашь. DefWindowProc никак уж не вызывает оконную процедуру по хандлу окошка, иначе бы ты просто зациклился и был бы у тебя stack overflow... Она попросту вызывает виндовый обработчик по умолчанию, игнорирует оконную процедуру что была когда-то родной!

Думается мне не станем разводить тут дискуссию что я не прав, т.к. в моих предположениях есть хотя-бы логика, гипотеза... а взамен моему никто ничего не предлагал, и это верно, т.к. если построить логическую цепочку иначе, где-нить да и ждет вас обрыв...

Ответить

Номер ответа: 18
Автор ответа:
 cresta



Вопросов: 117
Ответов: 1538
 Профиль | | #18 Добавлено: 10.02.05 00:06
Чето не очень...
Представим такое:
Есть цепочка NewProc-VBWindowProc-DefWindowProc
NewProc - то, что мы пишем сами,
VBWindowProc - VB-шный обработчик,
DefWindowProc - системный обработчик.

VBWindowProc ведь наверняка не все сообщения обрабатывает, к примеру только те, для которых описаны какие-либо события.
Если мы обрабатываем сообщение (например wm_command) в NewProc с целью изменить ход событий, расписанный, к примеру в Command_Click (VBWindowProc), то после обработки надо вызывать DefWindowProc, чтобы предотвратить выполнение действия, описанного в _Click.
Если же в NewProc обрабатывается сообщение, которое не описано в каких-либо событиях (например, wm_dropfile), то можно вызывать после обработки как DefWindowProc, так и VBWindowProc, из которой сообщение необработанное сквозняком попадёт в DefWindowProc.

Т.е. если мы беремся за обработку сообщения, то даже очень логично передать после обработки управление в DefWindowProc, иначе зачем было вообще обрабатывать, зная что VBWindowProc может переиначить наши действия и свести их на нет.

Если сообщение в NewProc обрабатывается, то надо вызывать DefWindowProc, если же оно не обрабатывается, то VBWindowProc.

Ответить

Номер ответа: 19
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #19
Добавлено: 10.02.05 01:25
Так оно и есть... но это при условии что мы обработали это сообщение! если же нет, то CallWindowProc - это обязательно...

К тому же вопорс звучит "как узнать", т.е. изменению ничего подлежать не должно => и DefWindowProc тут вовсе ни к чему!

Ответить

Номер ответа: 20
Автор ответа:
 Павел



Администратор

ICQ: 326066673 

Вопросов: 368
Ответов: 5968
 Web-сайт: www.vbnet.ru
 Профиль | | #20
Добавлено: 10.02.05 10:54
2 CyRax: год у тебя был, три за побег, два за детсад... (c)

Последнее китайское предупреждение! Читать правила форума (http://vbnet.ru/online/rules.asp), пункт 6.

Ответить

Номер ответа: 21
Автор ответа:
 mc-black



ICQ: 308-534-060 

Вопросов: 20
Ответов: 1860
 Web-сайт: mc-black.narod.ru/dzp.htm
 Профиль | | #21
Добавлено: 11.02.05 21:49
Павел,
http://vbnet.ru/online/rules.asp - битая ссылка :)

Ответить

Номер ответа: 22
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #22
Добавлено: 11.02.05 21:54
Неправда, нормальная ссылка

Ответить

Страница: 1 | 2 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам