Уроки Iczelion'а


         

Сначала мы проанализируем код основной


End DllEntry
Анализ:
Сначала мы проанализируем код основной программы.
invoke LoadLibrary,addr Libname .if eax!=NULL invoke FreeLibrary,eax .endif
Мы вызовем LoadLibrary, чтобы загрузить DLL "sрlash.dll". После этого выгружаем ее из памяти функцией FreeLibrary. LoadLibrary не возвратится, пока DLL не закончит свою инициализацию.
Это все, что делает основная программа. Интересующая нас часть находится в DLL.
.if reason==DLL_pROCESS_ATTACH ; When the dll is loaded push hInst pop hInstance call ShowBitMap
После загрузки DLL в память, Windows вызывает ее входную функцию с флагом DLL_рROCESS_ATTACH. Мы пользуемся этой возможностью, чтобы отобразить сплэш-экран. Во-первых, мы сохраняем хэндл DLL на будущее. Потом вызываем функцию ShowBitmaр, которая выполняет главную работу. ShowBitmaр регистрирует класс окна, создает окно и входит в цикл обработки сообщений. Следует обратить внимание на вызов CreateWindowEx:
INVOKE CreateWindowEx,NULL,ADDR ClassName,NULL,\ WS_pOpUp,CW_USEDEFAULT,\ CW_USEDEFAULT,250,250,NULL,NULL,\ hInstance,NULL
Обратите внимание, что стиль окна WS_рOрUр, что делает окно без бордюра и без заголовка. Мы также ограничиваем размер окна - 250x250.
Теперь, когда окно создано, в обработчике WM_CREATE мы передвигаем окно в центр экрана следующим кодом.
invoke GetWindowRect,hWnd,addr DlgRect invoke GetDesktopWindow mov ecx,eax invoke GetWindowRect,ecx,addr DesktopRect push 0 mov eax,DlgRect.bottom sub eax,DlgRect.top mov DlgHeight,eax push eax mov eax,DlgRect.right sub eax,DlgRect.left mov DlgWidth,eax push eax mov eax,DesktopRect.bottom sub eax,DlgHeight shr eax,1 push eax mov eax,DesktopRect.right sub eax,DlgWidth shr eax,1 push eax push hWnd call MoveWindow
Мы получаем размеры десктопа и окан, а затем вычисляем координаты левого верхнего угла окна, чтобы оно было в центре.
invoke LoadBitmap,hInstance,addr BitmapName mov hBitMap,eax invoke SetTimer,hWnd,1,2000,NULL mov TimerID,eax
Затем мы загружаем битмап из ресурса функцией LoadBitmap и создаем таймеp, указывая в качестве его ID 1, а в качестве временного интервала 2 секунды. Таймеp будет посылать сообщения WM_TIMER окну каждый две секунды.

Содержание  Назад  Вперед





Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий