网站开发要源码多少钱开发者模式怎么关闭vivo
2025/12/22 16:26:59 网站建设 项目流程
网站开发要源码多少钱,开发者模式怎么关闭vivo,阆中市网站建设服务,建立自己的摄影网站上一章我们学习了位图的使用.在这一章我们要用上帝赋予我们的创造力来融会贯通上一章我们学到的知识.那就是研究如何用位图来创建启动画面. 你可以在这里下载示范: the example. 理论首先,我们先要搞清楚什么是启动画面.举个简单的例子:我们启动某些作的专业一点的程序时(比如N…上一章我们学习了位图的使用.在这一章我们要用上帝赋予我们的创造力来融会贯通上一章我们学到的知识.那就是研究如何用位图来创建启动画面. 你可以在这里下载示范: 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:DWORDhWnd接受这个定时器消息的窗口的句柄.如果,你的定时器不需要窗口接受它的消息,你也可以 用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,stdcalloption casemap:noneinclude \masm32\include\windows.incinclude \masm32\include\user32.incinclude \masm32\include\kernel32.incincludelib \masm32\lib\user32.libincludelib \masm32\lib\kernel32.libWinMain proto :DWORD,:DWORD,:DWORD,:DWORD.dataClassName db SplashDemoWinClass,0AppName db Splash Screen Example,0Libname db splash.dll,0.data?hInstance HINSTANCE ?CommandLine LPSTR ?.codestart:invoke LoadLibrary,addr Libname.if eax!NULLinvoke FreeLibrary,eax.endifinvoke GetModuleHandle, NULLmov hInstance,eaxinvoke GetCommandLinemov CommandLine,eaxinvoke WinMain, hInstance,NULL,CommandLine, SW_SHOWDEFAULTinvoke ExitProcess,eaxWinMain proc hInst:HINSTANCE,hPrevInst:HINSTANCE,CmdLine:LPSTR,CmdShow:DWORDLOCAL wc:WNDCLASSEXLOCAL msg:MSGLOCAL hwnd:HWNDmov wc.cbSize,SIZEOF WNDCLASSEXmov wc.style, CS_HREDRAW or CS_VREDRAWmov wc.lpfnWndProc, OFFSET WndProcmov wc.cbClsExtra,NULLmov wc.cbWndExtra,NULLpush hInstancepop wc.hInstancemov wc.hbrBackground,COLOR_WINDOW1mov wc.lpszMenuName,NULLmov wc.lpszClassName,OFFSET ClassNameinvoke LoadIcon,NULL,IDI_APPLICATIONmov wc.hIcon,eaxmov wc.hIconSm,eaxinvoke LoadCursor,NULL,IDC_ARROWmov wc.hCursor,eaxinvoke RegisterClassEx, addr wcINVOKE CreateWindowEx,NULL,ADDR ClassName,ADDR AppName,\WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,\CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,\hInst,NULLmov hwnd,eaxinvoke ShowWindow, hwnd,SW_SHOWNORMALinvoke UpdateWindow, hwnd.while TRUEinvoke GetMessage, ADDR msg,NULL,0,0.break .if (!eax)invoke TranslateMessage, ADDR msginvoke DispatchMessage, ADDR msg.endwmov eax,msg.wParamretWinMain endpWndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM.IF uMsgWM_DESTROYinvoke PostQuitMessage,NULL.ELSEinvoke DefWindowProc,hWnd,uMsg,wParam,lParamret.ENDIFxor eax,eaxretWndProc endpend start;--------------------------------------------------------------------; 位图 DLL;--------------------------------------------------------------------.386.model flat, stdcallinclude \masm32\include\windows.incinclude \masm32\include\user32.incinclude \masm32\include\kernel32.incinclude \masm32\include\gdi32.incincludelib \masm32\lib\user32.libincludelib \masm32\lib\kernel32.libincludelib \masm32\lib\gdi32.lib.dataBitmapName db MySplashBMP,0ClassName db SplashWndClass,0hBitMap dd 0TimerID dd 0.datahInstance dd ?.codeDllEntry proc hInst:DWORD, reason:DWORD, reserved1:DWORD.if reasonDLL_PROCESS_ATTACH ; When the dll is loadedpush hInstpop hInstancecall ShowBitMap.endifmov eax,TRUEretDllEntry EndpShowBitMap procLOCAL wc:WNDCLASSEXLOCAL msg:MSGLOCAL hwnd:HWNDmov wc.cbSize,SIZEOF WNDCLASSEXmov wc.style, CS_HREDRAW or CS_VREDRAWmov wc.lpfnWndProc, OFFSET WndProcmov wc.cbClsExtra,NULLmov wc.cbWndExtra,NULLpush hInstancepop wc.hInstancemov wc.hbrBackground,COLOR_WINDOW1mov wc.lpszMenuName,NULLmov wc.lpszClassName,OFFSET ClassNameinvoke LoadIcon,NULL,IDI_APPLICATIONmov wc.hIcon,eaxmov wc.hIconSm,0invoke LoadCursor,NULL,IDC_ARROWmov wc.hCursor,eaxinvoke RegisterClassEx, addr wcINVOKE CreateWindowEx,NULL,ADDR ClassName,NULL,\WS_POPUP,CW_USEDEFAULT,\CW_USEDEFAULT,250,250,NULL,NULL,\hInstance,NULLmov hwnd,eaxINVOKE ShowWindow, hwnd,SW_SHOWNORMAL.WHILE TRUEINVOKE GetMessage, ADDR msg,NULL,0,0.BREAK .IF (!eax)INVOKE TranslateMessage, ADDR msgINVOKE DispatchMessage, ADDR msg.ENDWmov eax,msg.wParamretShowBitMap endpWndProc proc hWnd:DWORD,uMsg:DWORD,wParam:DWORD,lParam:DWORDLOCAL ps:PAINTSTRUCTLOCAL hdc:HDCLOCAL hMemoryDC:HDCLOCAL hOldBmp:DWORDLOCAL bitmap:BITMAPLOCAL DlgHeight:DWORDLOCAL DlgWidth:DWORDLOCAL DlgRect:RECTLOCAL DesktopRect:RECT.if uMsgWM_DESTROY.if hBitMap!0invoke DeleteObject,hBitMap.endifinvoke PostQuitMessage,NULL.elseif uMsgWM_CREATEinvoke GetWindowRect,hWnd,addr DlgRectinvoke GetDesktopWindowmov ecx,eaxinvoke GetWindowRect,ecx,addr DesktopRectpush 0mov eax,DlgRect.bottomsub eax,DlgRect.topmov DlgHeight,eaxpush eaxmov eax,DlgRect.rightsub eax,DlgRect.left

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询