网站页面设计方案怎样做内网网站
2026/1/10 1:40:29 网站建设 项目流程
网站页面设计方案,怎样做内网网站,云南竞价网络推广托管,编程自己做网站在这一课,我们将学习怎样在程序中使用位图。 更准确地说,我们要学习的是怎样在一个窗口的客户区中显示位图。 理论位图就是存贮于电脑中的图片。位图文件有相当多的格式#xff08;译者#xff1a;如.BMP.JPG.GIF.PIC 等#xff09;但Windows仅支持 Windows Bitmap Graphics…在这一课,我们将学习怎样在程序中使用位图。 更准确地说,我们要学习的是怎样在一个窗口的客户区中显示位图。理论位图就是存贮于电脑中的图片。位图文件有相当多的格式译者如.BMP.JPG.GIF.PIC 等但Windows仅支持 Windows Bitmap Graphics 格式即BMP文件。 本课所指的位图也是BMP文件。 使用位图最简单的方法就是把它定义在资源文件.rc)中。 定义的方法有两种。第一种方法是把它定义为整数宏具体如下#define IDB_MYBITMAP 100IDB_MYBITMAP BITMAP c:\project\example.bmp第一行我们定义了一个值为100的整数宏。 第二行我们把这个整数宏指向所要定义的位图 这样编译器就能知道位图所在的路径。另一种方法是给它起一个名字也就是把它定义为字符串具体如下:MyBitMap BITMAP c:\project\example.bmp两种方法效果是一样的。选择哪一种方法视乎在程序中你喜欢用整数宏还是用字符串来指向位图。现在我们已经把位图定义在资源文件中下一步就是把它显示在窗口的客户区上。在程序中我们使用API函数 LoadBitmap 取得位图句柄。 下面是 LoadBitmap 函数的 完型LoadBitmap proto hInstance:HINSTANCE, lpBitmapName:LPSTR该函数返回一个位图句柄。函数有两个参数其中 hInstance 是程序句柄。 lpBitmapName 是位图名字的指针适用于第二种定义方法。如果你使用了第一种 定义方法你可以填入指向位图的值或整数宏 对应上例这个值就是100整数宏是IDB_MYBITMAP)。下面是简单的例子第一种方法:.386.model flat, stdcall.................constIDB_MYBITMAP equ 100................data?hInstance dd ?...............code.............invoke GetModuleHandle,NULLmov hInstance,eax............invoke LoadBitmap,hInstance,IDB_MYBITMAP...........第二种方法:.386.model flat, stdcall.................dataBitmapName db MyBitMap,0................data?hInstance dd ?...............code.............invoke GetModuleHandle,NULLmov hInstance,eax............invoke LoadBitmap,hInstance,addr BitmapName...........获得一个设备文本DC句柄。你可以在响应WM_PAINT消息时通过API函数BeginPaint获得。 如果在其它消息中则可以用API函数GetDC获得。创建这个DC的内存映像。这样做的目的是建立一张“隐藏的画纸”把位图 “画”在上面作缓冲之用。完成这项工作后我们就通过一个函数把“画纸”上的位图复制 到真正的DC中。这就是在屏幕上快速显示图象的双缓冲技术。译者可以减少图象抖动 这张“画纸”用API函数 CreateCompatibleDC 建立下面是它的完型CreateCompatibleDC proto hdc:HDC如果函数执行成功将返回DC内存映像也即“画纸”的句柄。现在我们已经有了“画纸”可以把位图画在上面了。这可以通过API函数 SelectObject 完成 其中第一个参数是“画纸”的句柄第二个参数则是位图的句柄下面是函数的完型:SelectObject proto hdc:HDC, hGdiObject:DWORD现在位图已经画在“画纸”上了。下一步我们要把位图复制到真正的DC中。 有很多API函数都能完成这项工作例如 BitBlt 和 StretchBlt。 函数 BitBlt 仅仅将一个DC的内容简单地复制到另一个DC中而函数 StretchBlt 则能够自动调整源DC复制内容的大小已适应目的DC的输出区域大小因此前者比后者速度更快。 在这里我们只使用函数 BitBlt 下面是它的完型BitBlt proto hdcDest:DWORD, nxDest:DWORD, nyDest:DWORD, nWidth:DWORD, nHeight:DWORD, hdcSrc:DWORD, nxSrc:DWORD, nySrc:DWORD, dwROP:DWORDhdcDest 目的DC的句柄。nxDest, nyDest 目的DC输出区域的左上角坐标。nWidth, nHeight 目的DC输出区域的长和宽。hdcSrc 源DC的句柄。nxSrc, nySrc 源DC中所要复制区域的左上角坐标。dwROP 屏面运算码ROP。该参数用以确定复制内容的颜色与输出区域原来的颜色按哪种运算 方式处理。通常只需要简单地用复制内容把输出区域覆盖掉。一切办妥后就用API函数 DeleteObject 释放位图对象也就是把位图“抹掉”。大功告成! 现在再来回顾一下整个过程首先你需要把位图定义在资源文件中。 然后你需要在程序中载入位图资源并取得位图句柄。随后你需要获得位图输出区域的DC以及创建这个DC的内存映像并把位图放进这个DC内存映像中。最后把位图从DC内存映像复制到真正的DC中。例子:.386.model flat,stdcalloption casemap:noneinclude \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.libWinMain proto :DWORD,:DWORD,:DWORD,:DWORDIDB_MAIN equ 1.dataClassName db SimpleWin32ASMBitmapClass,0AppName db Win32ASM Simple Bitmap Example,0.data?hInstance HINSTANCE ?CommandLine LPSTR ?hBitmap dd ?.codestart:invoke 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:LPARAMLOCAL ps:PAINTSTRUCTLOCAL hdc:HDCLOCAL hMemDC:HDCLOCAL rect:RECT.if uMsgWM_CREATEinvoke LoadBitmap,hInstance,IDB_MAINmov hBitmap,eax.elseif uMsgWM_PAINTinvoke BeginPaint,hWnd,addr psmov hdc,eaxinvoke CreateCompatibleDC,hdcmov hMemDC,eaxinvoke SelectObject,hMemDC,hBitmapinvoke GetClientRect,hWnd,addr rectinvoke BitBlt,hdc,0,0,rect.right,rect.bottom,hMemDC,0,0,SRCCOPYinvoke DeleteDC,hMemDCinvoke EndPaint,hWnd,addr ps.elseif uMsgWM_DESTROYinvoke DeleteObject,hBitmapinvoke PostQuitMessage,NULL.ELSEinvoke DefWindowProc,hWnd,uMsg,wParam,lParamret.ENDIFxor eax,eaxretWndProc endpend start;---------------------------------------------------------------------; 资源定义;---------------------------------------------------------------------#define IDB_MAIN 1IDB_MAIN BITMAP tweety78.bmp分析:#define IDB_MAIN 1IDB_MAIN BITMAP tweety78.bmp定义整数宏IDB_MAIN的值为1然后把它指向一个与资源文件处于相同目录文件名为“tweety.bmp的位图。.if uMsgWM_CREATEinvoke LoadBitmap,hInstance,IDB_MAINmov hBitmap,eax在处理 WM_CREATE 消息时, 我们通过API函数 LoadBitmap 载入位图资源并通过函数返回值取得位图句柄。然后我们就可以把位图画在窗口客户区上。.elseif uMsgWM_PAINTinvoke BeginPaint,hWnd,addr psmov hdc,eaxinvoke CreateCompatibleDC,hdcmov hMemDC,eaxinvoke SelectObject,hMemDC,hBitmapinvoke GetClientRect,hWnd,addr rectinvoke BitBlt,hdc,0,0,rect.right,rect.bottom,hMemDC,0,0,SRCCOPYinvoke DeleteDC,hMemDCinvoke EndPaint,hWnd,addr ps在本例中我们选用在响应WM_PAINT消息时画出位图。首先我们通过API函数l BeginPaint 获得窗口客户区的DC句柄。 接着我们通过API函数 CreateCompatibleDC 创建该DC 的内存映像并通过API函数 SelectObject 把位图放进内存映像中。下一步我们通过API函数 GetClientRect 取得窗口客户区的大小。最后我们通过API函数 BitBlt 把位图从DC内存映像复制到真正的客户区DC中。 完成显示工作后我们通过API函数 DeleteDC 释放DC内存映像并用API函数 EndPaint 释放客户区DC 结束画图工作。.elseif uMsgWM_DESTROYinvoke DeleteObject,hBitmapinvoke PostQuitMessage,NULL当我们不再需要位图时通过API函数 DeleteObject 把它释放。

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

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

立即咨询