位图和位块传输(5)之画图程序
来源:互联网 发布:校园招聘 云计算 编辑:程序博客网 时间:2024/06/06 07:03
下面是一个很经典的程序,画图程序:可以画图,可以擦掉(来自Windows程序设计第五版)
#include<windows.h>LRESULT CALLBACK WindowProc(HWND hwnd, // handle to windowUINT uMsg, // message identifierWPARAM wParam, // first message parameterLPARAM lParam // second message parameter);int WINAPI WinMain( HINSTANCE hInstance, // handle to current instance HINSTANCE hPrevInstance, // handle to previous instance LPSTR lpCmdLine, // command line int nCmdShow // show state ){static TCHAR szAppName[]=TEXT("leidemingzi");HWND hwnd;MSG msg;WNDCLASS wndclass;wndclass.cbClsExtra=0;wndclass.cbWndExtra=0;wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);wndclass.hIcon=LoadIcon(NULL,IDI_ERROR);wndclass.hInstance=hInstance;wndclass.lpfnWndProc=WindowProc;wndclass.lpszClassName=szAppName;wndclass.lpszMenuName=NULL;wndclass.style=CS_HREDRAW|CS_VREDRAW;if(!RegisterClass(&wndclass)){MessageBox(NULL,TEXT("the program require the windows nt"),TEXT("tips"),MB_ICONERROR);return 0;}hwnd=CreateWindow(szAppName, // registered class nameTEXT("this is title"), // window nameWS_OVERLAPPEDWINDOW, // window styleCW_USEDEFAULT, // horizontal position of windowCW_USEDEFAULT, // vertical position of windowCW_USEDEFAULT, // window widthCW_USEDEFAULT, // window heightNULL, // handle to parent or owner windowNULL, // menu handle or child identifierhInstance, // handle to application instanceNULL// window-creation data);ShowWindow(hwnd,nCmdShow);UpdateWindow(hwnd);while(GetMessage(&msg,NULL,0,0)){TranslateMessage(&msg);DispatchMessage(&msg);}return msg.wParam;}void GetLargestDisplayMode(int *pcxBitmap,int *pcyBitmap){DEVMODE devmode;int iModeNum=0;*pcxBitmap=*pcyBitmap=0;ZeroMemory(&devmode,sizeof(DEVMODE));devmode.dmSize=sizeof(DEVMODE);while(EnumDisplaySettings(NULL,iModeNum++,&devmode)){*pcxBitmap=max(*pcxBitmap,(int)devmode.dmPelsHeight);*pcyBitmap=max(*pcyBitmap,(int)devmode.dmPelsHeight);}}LRESULT CALLBACK WindowProc(HWND hwnd, // handle to windowUINT uMsg, // message identifierWPARAM wParam, // first message parameterLPARAM lParam // second message parameter){static BOOL fLeftButtonDown,fRightButtonDown;static HBITMAP hBitmap;static HDC hdcMem;static int cxBitmap,cyBitmap,cxClient,cyClient,xMouse,yMouse;HDC hdc;PAINTSTRUCT ps;switch(uMsg){case WM_CREATE:GetLargestDisplayMode(&cxBitmap,&cyClient);hdc=GetDC(hwnd);hBitmap=(HBITMAP)CreateCompatibleDC(hdc);ReleaseDC(hwnd,hdc);if(!hBitmap){DeleteDC(hdcMem);return -1;}SelectObject(hdcMem,hBitmap);PatBlt(hdcMem,0,0,cxBitmap,cyBitmap,WHITENESS);return 0;case WM_SIZE:cxClient=LOWORD(lParam);cyClient=HIWORD(lParam);return 0;case WM_LBUTTONDOWN:if(!fRightButtonDown){SetCapture(hwnd);}xMouse=LOWORD(lParam);yMouse=HIWORD(lParam);fLeftButtonDown=TRUE;return 0;case WM_LBUTTONUP:if(fLeftButtonDown){SetCapture(NULL);}fLeftButtonDown=FALSE;return 0;case WM_RBUTTONDOWN:if(!fLeftButtonDown){SetCapture(hwnd);}xMouse=LOWORD(lParam);yMouse=HIWORD(lParam);fRightButtonDown=TRUE;return 0;case WM_RBUTTONUP:if(fRightButtonDown){SetCapture(NULL);}fRightButtonDown=FALSE;return 0;case WM_MOUSEMOVE:if(!fLeftButtonDown&&!fRightButtonDown){return 0;}hdc=GetDC(hwnd);SelectObject(hdc,GetStockObject(fLeftButtonDown?BLACK_PEN:WHITE_PEN));SelectObject(hdcMem,GetStockObject(fLeftButtonDown?BLACK_PEN:WHITE_PEN));MoveToEx(hdc,xMouse,yMouse,NULL);MoveToEx(hdcMem,xMouse,yMouse,NULL);xMouse=(short)LOWORD(lParam);yMouse=(short)HIWORD(lParam);LineTo(hdc,xMouse,yMouse);LineTo(hdcMem,xMouse,yMouse);ReleaseDC(hwnd,hdc);return 0;case WM_PAINT:hdc=BeginPaint(hwnd,&ps);BitBlt(hdc,0,0,cxClient,cyClient,hdcMem,0,0,SRCCOPY);EndPaint(hwnd,&ps);return 0;case WM_DESTROY:DeleteDC(hdcMem);DeleteObject(hBitmap);PostQuitMessage(0);return 0;}return DefWindowProc(hwnd,uMsg,wParam,lParam);}
不做过多的解释,自己动手敲敲,有用的。要下载Windows程序设计第五版光盘代码的朋友,可以到我的资源下载。
- 位图和位块传输(5)之画图程序
- 位图和位块传输(3)之加载位图资源
- Windows程序设计-位图和位块传输
- 位图和位块传输(2)压缩拉伸之StretchBlt函数
- 第十四章 位图和Bitblt(位块传输)
- 位图和位块传输(1)BitBlt与PatBlt
- 第 14 章 位图和位块传输
- 位图和位块传输(4)位图画刷与画画
- 位图和位块传输(6)画框与会移动的小球
- 《Windows程序设计》之位块传输
- 14.3 位块传输
- Linux文件系统分析之二(超级块,i节点位图和逻辑块位图)
- 位图和像素位
- 位图和像素位
- [珠玑之椟]位向量/位图的定义和应用
- 位块传输 BitBlt与StretchBlt
- 8位位图和24位位图的相互转换
- LaTeX之画图语言和画图软件
- ibatis获取主键自动增长ID(Oracle/MSSQL/mysql),取得刚插入的ID编号
- Qt 各种控件 设置背景(持续更新)
- 将图片保存到Documents文件夹里
- set 命令介绍
- HDU-2087(KMP)
- 位图和位块传输(5)之画图程序
- hibernate 表关联 数据出错报的异常
- 怎样像iPhone模拟器中添加图片
- HDU 1020 Encoding 典型的字符串的压缩
- C++ const与指针关系
- 内连接,迫切内连接,左外连接,迫切左外连接
- ORA-12516, TNS: listener could not find available handler with matching protocol stack'
- SQL Server 模糊查询
- 堆和栈的区别