Double-cushion.rar

  • PUDN用户
    了解作者
  • Visual C++
    开发工具
  • 5.6MB
    文件大小
  • rar
    文件格式
  • 0
    收藏次数
  • 1 积分
    下载积分
  • 38
    下载次数
  • 2006-07-05 02:58
    上传日期
SDK贴图双缓冲 SDK贴图双缓冲
Double-cushion.rar
  • 双缓冲
  • 图像背景
  • person
  • C00045.BMP
    2KB
  • C00043.BMP
    2KB
  • C00048.BMP
    2.1KB
  • C00046.BMP
    2.1KB
  • C00044.BMP
    2KB
  • C00049.BMP
    2.1KB
  • C00042.BMP
    2.1KB
  • bitmap12.bmp
    646B
  • C00041.BMP
    2.1KB
  • C00040.BMP
    2.1KB
  • C00047.BMP
    2.1KB
  • Debug
  • 图像背景.dsp
    4.9KB
  • backbmp.dsp
    3.3KB
  • backbmp.plg
    0B
  • AOK000.bmp
    2.3MB
  • john_snow.bmp
    349.6KB
  • Script1.aps
    2.6MB
  • 图像背景.plg
    1.3KB
  • bitmap1.bmp
    3KB
  • Script1.rc
    2.7KB
  • msimg32.dll
    5.3KB
  • resource.h
    1.1KB
  • msimsg.dll
    864KB
  • backbmp.cpp
    8.7KB
  • 图像扫描器
  • Debug
  • AOK000.bmp
    2.3MB
  • 图像扫描器.plg
    1.3KB
  • john_snow.bmp
    349.6KB
  • Script1.aps
    2.6MB
  • 图像扫描器.dsp
    4.1KB
  • Script1.rc
    1.9KB
  • ShowMirror.cpp
    7.4KB
  • resource.h
    640B
  • Debug
  • SDK第六讲课堂按例.dsw
    758B
  • SDK第六讲课堂按例.ncb
    65KB
  • SDK第六讲课堂按例.opt
    52.5KB
  • www.pudn.com.txt
    218B
内容介绍
#include <windows.h> #include <tchar.h> #include <math.h> #include "resource.h" //资源头文件 #pragma comment (lib,"msimg32.lib") HINSTANCE hInst; TCHAR szClassName[256] = "MyClass"; void ShowMirror(HDC hDC, RECT rect, COLORREF penColor, COLORREF brushColor ); //COLORREF BKCOLOR = RGB(150,150,150); enum WHATTODO { DRAW_LINE, DRAW_RECT,DRAW_CIRCLE}; LRESULT CALLBACK WndProc(HWND ,UINT , WPARAM , LPARAM ); int __stdcall WinMain(HINSTANCE hInstance, //应用程序实例句柄 HINSTANCE hPrvInstance, //忽略 LPSTR lpCmdLine, //命令行 int nShowCmd) //窗口起始形态如(最大化,最小化) { HWND hWnd; MSG message; WNDCLASSEX wndClassEx; //定义注册窗口类结构 //填充窗口类信息 wndClassEx.cbSize = sizeof(WNDCLASSEX); wndClassEx.style = CS_HREDRAW|CS_VREDRAW; //窗口类的风格 wndClassEx.hInstance = hInstance; //此窗口类所属的应用程序的实例句柄 wndClassEx.lpfnWndProc = (WNDPROC)WndProc; //属于该窗口类的窗口过程函数指针 wndClassEx.hbrBackground = (HBRUSH) (GetStockObject(WHITE_BRUSH)); //取得一只window预定义的画刷,用于窗口背景颜色 wndClassEx.hIcon = ::LoadIcon( NULL,(LPCTSTR)IDI_ERROR); //取得32位的图标资源 wndClassEx.hIconSm = ::LoadIcon( NULL,(LPTSTR)IDI_ERROR); //取得16位的图标资源 wndClassEx.hCursor = ::LoadCursor( NULL,IDC_ARROW); //取得系统的光标 wndClassEx.cbClsExtra = 0; //额外的信息,可忽略 wndClassEx.cbWndExtra = 0; //额外的信息,可忽略 wndClassEx.lpszClassName = szClassName; //注册的窗口类名 wndClassEx.lpszMenuName = (LPCTSTR)(IDR_MENU); //窗口的菜单句柄 hInst = hInstance; RegisterClassEx(&wndClassEx); //注册窗口类 hWnd = CreateWindow( //建立窗口 szClassName, //建立窗口的所属窗口类 "hello", //标题栏题头 WS_OVERLAPPEDWINDOW, //窗口风格 CW_USEDEFAULT, //窗口在屏幕的X轴坐标 CW_USEDEFAULT, //窗口在屏幕的Y轴坐标 CW_USEDEFAULT, //窗口的宽度 CW_USEDEFAULT, //窗口的高度 NULL, //所从属的父窗口的窗口句柄 NULL, //菜单句柄 hInstance, //此窗口所属应用程序实例句柄 NULL); //忽略 if ( hWnd == NULL ) //窗口建立失败 { MessageBox(NULL,"窗口建立失败","提示",MB_OK); return -1; } ShowWindow(hWnd,nShowCmd); //显示窗口 UpdateWindow(hWnd); //更新窗口 //进入消息循环 while( GetMessage(&message,NULL,NULL,NULL) ) //从消息队列中取消息, //当取到WM_QUIT消息时返回 0 ,消息循环结束,程序结束 { DispatchMessage(&message); //派发消息,windows取得控制权,将消息发往 //相应窗口的窗口过程 } return 0; } /************************************************************************************* 窗口过程函数 LRESULT ===> unsigned int 一个32位整形变量,用于表示返回的结果 CALLBACK ===> __stdcall 表示回调函数 回调函数就是有程序员编写,但你不能调用它,而必须由windows调用 hWnd --->表示响应消息的窗口的句柄 msg --->表示何种消息 如 WM_MOUSEMOVE, WM_PAINT, WM_DESTROY,WM_COMMAND wParam,lParam ---->两个32位无类型的值 表示消息参数 对于不同的消息,消息参数表示不同的内容 如对于 WM_MOUSEMOVE 消息, lParam 的低16位表示鼠标X方向坐标,高16位表示鼠标Y方向坐标 **************************************************************************************/ LRESULT CALLBACK WndProc(HWND hWnd,UINT msg, WPARAM wParam, LPARAM lParam) { static HBITMAP hBitMap; static HBITMAP hPersonBitMap[10]; static HDC hBuffDC; static HBITMAP hBuffBitMap; static int whoToShow = 0; static bool erasFlag = true; HDC hdc; PAINTSTRUCT paintStruct; // INT wmId, wmEvent; switch ( msg ) { case WM_CREATE: hBitMap = ::LoadBitmap( hInst,MAKEINTRESOURCE(IDB_BITMAP) ); { for (int i = 0 ; i < 10 ; i ++ ) { hPersonBitMap[i] = ::LoadBitmap(hInst, MAKEINTRESOURCE(IDB_BITMAP2+i)); } } if( hBitMap == NULL ) { ::MessageBox(NULL,"ERROR ON OPEN BITMP","TS",MB_OK); } hBuffBitMap = ::LoadBitmap(hInst,MAKEINTRESOURCE(IDB_BITMAP)); hBuffDC = ::CreateCompatibleDC(NULL); SelectObject(hBuffDC,hBuffBitMap); break; case WM_COMMAND: //命令相应消息 break; case WM_LBUTTONDOWN: { static bool flag = true; if ( flag ) { SetTimer(hWnd,0,10,NULL); flag = false; } else { ::KillTimer(hWnd,0); flag = true; } break; } case WM_LBUTTONUP: { break; } case WM_RBUTTONDOWN: { } break; case WM_MOUSEMOVE: { break; } case WM_TIMER: { static int index = 0; static RECT oldRect; static RECT curRect = {60,60 }; static bool first = true; HDC hdc = GetDC(hWnd); HDC hMemDC = ::CreateCompatibleDC(hdc); RECT rectClient ; GetClientRect(hWnd,&rectClient); SelectObject( hMemDC, hBitMap ); ::BitBlt(hBuffDC,0,0,rectClient.right,rectClient.bottom,hMemDC, 0,0,SRCCOPY); BITMAP bitMap; GetObject(hPersonBitMap[index],sizeof(BITMAP),&bitMap); SelectObject(hMemDC,hPersonBitMap[index++]); curRect.top+= 1; curRect.left+=2; if( curRect.left >= rectClient.right || curRect.top >= curRect.bottom) { curRect.left = 60; curRect.top = 60; } curRect.right = curRect.left + bitMap.bmWidth; curRect.bottom = curRect.top + bitMap.bmHeight; ::TransparentBlt(hBuffDC,curRect.left,curRect.top, bitMap.bmWidth,bitMap.bmHeight,hMemDC,0,0,bitMap.bmWidth, bitMap.bmHeight,RGB(255,255,255)); ::BitBlt(hdc,0,0,rectClient.right,rectClient.bottom,hBuffDC, 0,0,SRCCOPY); if ( index == 10 ) { index = 0;; } oldRect = curRect; DeleteDC(hMemDC); ::ReleaseDC(hWnd,hdc); break; } case WM_PAINT: { hdc = BeginPaint(hWnd,&paintStruct); // 取得设备上下文 RECT rectClient ; GetClientRect(hWnd,&rectClient); HDC hMemDC = ::CreateCompatibleDC(hdc); HBITMAP hPerBitMap; hPerBitMap = ::LoadBitmap(hInst, MAKEINTRESOURCE(IDB_BITMAP2)); BITMAP bitMap; GetObject(hPerBitMap,sizeof(BITMAP),&bitMap); SelectObject(hMemDC,hPerBitMap); ::TransparentBlt(hBuffDC,60,60, bitMap.bmWidth,bitMap.bmHeight,hMemDC,0,0,bitMap.bmWidth, bitMap.bmHeight,RGB(255,255,255)); ::BitBlt(hdc,0,0,rectClient.right,rectClient.bottom,hBuffDC, 0,0,SRCCOPY); EndPaint(hWnd,&paintStruct); } break; case WM_DESTROY: //发送WM_QUIT消息 ::KillTimer(hWnd,0); ::DeleteObject(hBitMap); {
评论
    相关推荐
    • 2812双缓冲
      STM32 WS2812 PWM DMA 双缓冲
    • 贴图双缓冲
      网上有很多双缓冲的资料,可都是绘图双缓冲的。而且模版也是SDK上的那个。单调重复。 而开发游戏要用的是贴图双缓冲。很多同学就不明白怎么弄了。这里例子就是一个贴图双缓冲赵灵儿行走的动画,希望对初学者有所...
    • MFC双缓冲移动图形
      本程序利用双缓冲,在MFC中移动图形,通过↑、↓、←、→四个按键,控制图形移动方向,实现无闪烁移动图形的目的。
    • 双缓冲程序
      VS2008 MFC 对话框 个人利用所把握的双缓冲技术方法,编写了个简单的时钟程序,时钟背景颜色层层递进,具有立体感的背景。
    • MFC 双缓冲小实例
      MFC 双缓冲小实例 实现了画图版的画笔功能 还有一些其他小功能 主要是应用了双缓冲进行图片的刷新
    • VC++双缓冲技术代码演示
      VC++双缓冲技术代码演示代码,虽然比较老的代码,但是仍然很有用途,源码将演示如何在VC++中实现双缓冲技术的实例,演示了使用普通方式绘图和采用双缓冲技术绘图的例子,首先给出实现的程序,然后再解释,同样是在...
    • 双缓冲例子
      C#双缓冲例子,有与传统的作对比
    • 双向缓冲
      此程序是用VHDL语言编写的双向缓冲器的程序,供大家学习交流
    • C# 双缓冲控件
      C# 双缓冲控件 ,网络上收集到的,最近项目中,双缓冲一词开始进入我的视觉,恰巧网络上看到,备份一下,暂时没有深究
    • 双缓冲.rar
      解决界面闪烁问题,使用双缓冲能消除界面闪烁