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

来源:互联网 发布:cf刷枪软件永久 编辑:程序博客网 时间:2024/05/21 14:57
#include <windows.h>#include <string.h>#include <stdlib.h>#include <stdio.h>LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);int nMode=MM_TEXT;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;HPEN hPen;switch(message){case WM_CHAR:if(wParam=='a'||wParam=='A')    nMode=MM_ISOTROPIC;else if(wParam=='b'||wParam=='B')nMode=MM_ANISOTROPIC;else if(wParam=='c'||wParam=='C')nMode=MM_LOMETRIC;else ;InvalidateRect(hwnd,NULL,1);//刷新用户区break;case WM_PAINT:hdc=BeginPaint(hwnd,&ps);//取得设备环境句柄SetMapMode(hdc,nMode);              //设置映射模式SetWindowExtEx(hdc,15,15,NULL); //设置窗口区域SetViewportExtEx(hdc,15,10,NULL); //设置视口区域SetViewportOrgEx(hdc,120,120,NULL); //设置视口原点        hPen=CreatePen(PS_SOLID,2,RGB(255,0,0)); //创建红色画笔SelectObject(hdc,hPen);  //将画笔选入设备环境//画坐标系,原点在视口原点        LineTo(hdc,200,0);LineTo(hdc,195,-5);MoveToEx(hdc,200,0,NULL);LineTo(hdc,195,5);    MoveToEx(hdc,0,0,NULL);LineTo(hdc,0,200);LineTo(hdc,-5,195);MoveToEx(hdc,0,200,NULL);LineTo(hdc,5,195);DeleteObject(hPen); //删除画笔EndPaint(hwnd,&ps);//释放设备环境句柄break;case WM_DESTROY:PostQuitMessage(0);break;   default:return  DefWindowProc(hwnd,message,wParam,lParam);}return 0;}




阅读全文
0 0