您的位置:逆风者 汇编技术 正文
原作者:www.upwinder.com 添加时间:2007-09-01 原文发表:2007-08-31 人气:7 来源:未知

本文章共5653字,分4页,当前第1页,快速翻页:
 
上一章我们学习了位图的使用.在这一章我们要用上帝赋予我们的创造力来融会贯通上一章我们学到的知识.那就是研究如何用位图来创建启动画面. 你可以在这里下载示范: the example.
理论
首先,我们先要搞清楚什么是启动画面.举个简单的例子:我们启动某些作的专业一点的程序时(比如Netscape,Adobe Acrobat等)会先跳出一个启动画面.上面通常有一些版权信息,版本号等.与此同时,程序后台正做着一些程序的加载或初始化工作.这个启动画面有别于一般的窗口.它没有标题栏,没有系统菜单,也没有边框.只有一张位图在屏幕上显示一会儿,然后消失 .在这一章我们来试试自己做一个.
逆风编程精品
第一步你可能会想到把要显示的位图包含到资源文件中去.但是这样做有一个缺点.你的程序只在启动的时候显示这张位图,可是它却至始至终存在于你的内存中,直到你把程序关掉.这不能不说是对内存的极大浪费.好办法是:创建一个"资源"DLL(动态连接库)来包含位图和它独特的显示代码.这样,你就可以在想显示启动画面的时候加载他,用完了就卸载它.所以,我们的程序需要2个模块:主程序和启动画面DLL.我们要把位图放到这个DLL的资源中去.
基本步骤如下:
把位图作为一个位图资源放到DLL中去.
主程序调用 LoadLibrary 把 dll 加载到内存中去.
DLL 被调用后,它会建立一个定时器用于管理启动画面显示的时间.然后,注册并创建一个没有 标题和边框的窗口.同时在窗口的客户区显示位图.
等启动画面的显示时间长度到达你预先的设定值,启动画面消失,控制权回到主程序手中.
主程序调用 FreeLibrary 从内存中卸载 DLL .然后,做它该做的事去.
下面我们来研究细节部分
加载/卸载 DLL
你可以用 LoadLibrary 灵活的加载一个 DLL ,它的格式如下:
LoadLibrary proto lpDLLName:DWORD
它只有一个参数: 你想要加载的 DLL 的名称所在的地址.调用成功返回指向该DLL模块的句柄,反之返回NULL.
要卸载 DLL, 则调用 FreeLibrary:
FreeLibrary proto hLib:DWORD
它也只有一个参数: 你想要卸载的 DLL 模块的句柄(通常就是上面那个函数返回的啦).
怎样使用定时器
首先, 你要用 SetTimer 创建一个定时器:
SetTimer proto hWnd:DWORD, TimerID:DWORD, uElapse:DWORD, lpTimerFunc:DWORD
hWnd接受这个定时器消息的窗口的句柄.如果,你的定时器不需要窗口接受它的消息,你也可以 用NULL作为参数
TimerID定时器的 ID 值. 由你自己定义.
uElapse 定时器定的时间.以ms(千分之一秒)为单位.
lpTimerFunc 处理该定时器消息的函数所在的地址.如果你用NULL作为该参数,那么定时器的消息会被送给 hWnd 参数所指定的窗口.

SetTimer 如果成功则返回定时器的 ID 否则返回 NULL. 所以最好不要把定时器的ID设为0(Pheadnius:NULL代表0, 记得吗?).

你可以用2种方法创建定时器:
如果你有一个窗口并且定时器把消息传给这个窗口.那么你需要把所有的4个参数都传送给 Settimer 函数 (lpTimerFunc参数必须为NULL).
如果你没有窗口或者你不想让窗口处理定时器的消息,那么你必须在窗口句柄中传送一个NULL.同时你要指定用于处理定时器消息的函数的地址.
在这个例子中我们要使用第一种方法.
当你设定的时间到了, 与定时器相连的窗口会收到 WM_TIMER 消息.例如,你指定 uElapse 的值为 1000, 你的窗口每过一秒都会收到 WM_TIMER 消息.
等到你再也不需要这个定时器了,就用 KillTimer 来去除定时器.
KillTimer proto hWnd:DWORD, TimerID:DWORD
例子:
;-----------------------------------------------------------------------
; 主程序
;-----------------------------------------------------------------------
.386
.model flat,stdcall
option casemap:none
include \masm32\include\windows.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
 

本文章更多内容1 - 2 - 3 - 4 - 下一页>>
相关文章

Win32不需要释放的资源
win32消息框
纯DOS下无需加载MSCDEX,直接弹出或关闭CD-
实模式与保护模式切换实例
通用控件
内存管理和文件输入/输出
控制转移(1)
WIN98SE硬盘主引导记录代码反汇编分析
虚拟8086模式的内存管理
图形显示方式屏幕的保存和恢复
处理键盘输入消息
利用驱动程序读取硬盘序列号
抓取屏幕内容(字符模式)
关于在8086/88内存寻址方式
使用DLL中的资源
内存映射文件
扩展Int 13H调用规范
事件对象
客户寄存器结构
小试Win32汇编

相关评论


本文章所属分类:首页 汇编技术

  热门关键字:
进制数据输出的通用程序 2007-09-12
汇编源码--showmem 2007-08-31
汇编源码--CLEAN 2007-08-31
汇编源码--hdr 2007-08-31
汇编源码--basload 2007-08-31
汇编源码--CHAR 2007-08-31
汇编源码--fxn 2007-08-31
汇编源码--alarm 2007-08-31
汇编源码--getsect 2007-08-31
汇编源码--DEV 2007-08-31
汇编源码--getspace 2007-08-31
汇编源码--frespace 2007-08-31
CIH文件型病毒检测消除程序 2007-08-31
Mixer Volume Ctrler V1.0 2007-08-31
汇编源码--COMINT 2007-08-31
自己用汇编语言写的一个病毒(源码... 2007-08-31
汇编源码--col 2007-08-31
汇编源码--BURNOUT 2007-08-31