MOOC清华《VC++面向对象与可视化程序设计》第2章:Windows绘图-例(2)映像模式的使用(一)
2017-09-26 21:19
381 查看
#include <windows.h> #include <string.h> #include <stdlib.h> #include <stdio.h> int nMode; LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM); int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInst,LPSTR lpszCmdLine,int nCmdShow) { HWND hwnd ; MSG Msg ; WNDCLASS wndclass ; char lpszClassName[] = "映射模式"; char lpszTitle[]= "My_Map_Mode"; wndclass.style = 0; wndclass.lpfnWndProc = WndProc ; wndclass.cbClsExtra = 0 ; wndclass.cbWndExtra = 0 ; wndclass.hInstance = hInstance ; wndclass.hIcon = LoadIcon( NULL, IDI_APPLICATION) ; wndclass.hCursor = LoadCursor( NULL, IDC_ARROW) ; wndclass.hbrBackground =(HBRUSH) GetStockObject( WHITE_BRUSH) ; wndclass.lpszMenuName = NULL ; wndclass.lpszClassName = lpszClassName ; if( !RegisterClass( &wndclass)) { MessageBeep(0) ; return FALSE ; } hwnd = CreateWindow ( lpszClassName, lpszTitle, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL ); ShowWindow( hwnd, nCmdShow) ; //显示窗口 UpdateWindow(hwnd); //绘制用户区 while( GetMessage(&Msg, NULL, 0, 0)) //消息循环 { TranslateMessage( &Msg) ; DispatchMessage( &Msg) ; } return Msg.wParam; //消息循环结束时将信息返回系统 } LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam) { HDC hdc; PAINTSTRUCT ps; HBRUSH hB1,hB2; switch(message) { case WM_LBUTTONDOWN: //单击鼠标左键的消息 nMode=MM_ISOTROPIC; //更改映射模式为MM_ISOTROPIC InvalidateRect(hwnd,NULL,1); //刷新用户区 break; case WM_RBUTTONDOWN: //单击鼠标右键消息 nMode=MM_ANISOTROPIC; //更改显示模式为MM_ANISOTROPIC InvalidateRect(hwnd,NULL,1); //刷新用户区 break; case WM_PAINT: hdc=BeginPaint(hwnd,&ps); //取得设备环境句柄 SetMapMode(hdc,nMode); //设置映射模式 SetWindowExtEx(hdc,150,150,NULL); //设置窗口区域 SetViewportExtEx(hdc,150,100,NULL); //设置视口区域 SetViewportOrgEx(hdc,150,60,NULL); //设置视口原点 hB1=(HBRUSH)GetStockObject(WHITE_BRUSH); //定义白色画刷 hB2=(HBRUSH)GetStockObject(BLACK_BRUSH); //定义黑色画刷 SelectObject(hdc,hB1); //将黑白刷选入设备环境 RoundRect(hdc,0,0,150,150,30,30); //绘制圆角矩形并填充 SelectObject(hdc,hB2); //更改当前画刷为黑色画刷 Ellipse(hdc,0,10,150,140); //绘制椭圆并填充 EndPaint(hwnd,&ps); //释放设备环境句柄 DeleteObject(hB1); //删除画刷句柄 DeleteObject(hB2); break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hwnd,message,wParam,lParam); } return 0; }
相关文章推荐
- MOOC清华《VC++面向对象与可视化程序设计》第2章:Windows绘图-例(4)映像模式的使用(二)
- MOOC清华《VC++面向对象与可视化程序设计》第2章:Windows绘图-例(3)移动图形的绘制
- MOOC清华《VC++面向对象与可视化程序设计》第2章:Windows绘图-例(1)静态图形的绘制
- Windows界面绘图使用缓冲区避免闪烁:MFC版本 和 GDI版本
- Windows桌面应用程序(1-2-4-6th) 使用Direct2D绘图
- MOOC清华《面向对象程序设计》第2章:初始化列表实验
- MOOC清华《程序设计基础》第2章第2题:求圆周长2
- MOOC清华《面向对象程序设计》第2章:类型推导操作符decltype实验
- MOOC清华《面向对象程序设计》第2章:auto变量实验
- MOOC清华《面向对象程序设计》第2章:基于范围的for循环实验
- MOOC清华《程序设计基础》第2章第3题:直角三角形求斜边
- MOOC清华《面向对象程序设计》第2章:右值引用实验
- MOOC清华《程序设计基础》第2章第4题:解方程2
- (原创)Windows下使用android ADT工具dmtracedump.exe绘图
- 使用Windows绘图合成多张图
- MOOC清华《程序设计基础》第2章第5题:银行存款问题2
- MOOC清华《面向对象程序设计》第2章:函数参数的缺省值实验
- 使用GDI在windows下绘图(二)——GDI绘图方法
- MOOC清华《面向对象程序设计》第2章:私有成员与公有成员不可同名实验
- MOOC清华《面向对象程序设计》第2章:函数重载实验