MOOC清华《VC++面向对象与可视化程序设计》第2章:Windows绘图-例(2)映像模式的使用(一)

来源:互联网 发布:自学编程的app 编辑:程序博客网 时间:2024/06/03 17:33

#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_ISOTROPICInvalidateRect(hwnd,NULL,1);//刷新用户区break;case WM_RBUTTONDOWN://单击鼠标右键消息nMode=MM_ANISOTROPIC;//更改显示模式为MM_ANISOTROPICInvalidateRect(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;}




阅读全文
0 0
原创粉丝点击