windows可视化编程(二)

来源:互联网 发布:北京工业大学 网络 编辑:程序博客网 时间:2024/06/04 01:12

这节总结下笔刷的使用,首先看程序

#include<windows.h>#include<stdlib.h>#include<string.h>long WINAPI WndProc(HWND hWnd,UINT iMessage,UINT wParam,LONG lParam);BOOL InitWindowsClass(HINSTANCE hInstance);BOOL InitWindows(HINSTANCE hInstance,int nCmdShow);int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow){MSG Message;if(!InitWindowsClass(hInstance))return FALSE;if(!InitWindows(hInstance,nCmdShow))return FALSE;while(GetMessage(&Message,0,0,0))//消息循环{TranslateMessage(&Message);DispatchMessage(&Message);}return Message.wParam;}long WINAPI WndProc(HWND hWnd,UINT iMessage,UINT wParam,LONG lParam){HDC hDC;   //定义指向设备上下文的句柄HBRUSH hBrush;  //定义指向画刷的句柄HPEN hPen;//定义指向画笔的句柄PAINTSTRUCT PtStr; //定义指向包含绘图信息的结构体变量switch(iMessage)  //处理消息{case WM_PAINT:    //处理绘图消息hDC=BeginPaint(hWnd,&PtStr);SetMapMode(hDC,MM_ANISOTROPIC);  //设置映射模式hPen=(HPEN)GetStockObject(BLACK_PEN);//设置画笔为系统预定定义的黑色画笔hBrush=(HBRUSH)GetStockObject(DKGRAY_BRUSH); //采用系统预定义的深灰色画刷SelectObject(hDC,hBrush);  //选择画刷SelectObject(hDC,hPen);    //选择画笔RoundRect(hDC,50,120,100,200,15,15); //圆角矩形hBrush=(HBRUSH)GetStockObject(LTGRAY_BRUSH); //采用系统预定义的淡灰色画刷SelectObject(hDC,hBrush);  //选择画刷Ellipse(hDC,150,50,200,150); //椭圆hBrush=(HBRUSH)GetStockObject(HOLLOW_BRUSH); //采用系统预定义的虚画刷SelectObject(hDC,hBrush);  //选择画刷Pie(hDC,250,50,300,100,250,50,300,50);  //饼形EndPaint(hWnd,&PtStr);  //结束绘图return 0;case WM_DESTROY: //结束应用程序PostQuitMessage(0);return 0;default://其他消息处理程序return(DefWindowProc(hWnd,iMessage,wParam,lParam)) ;}}BOOL InitWindows(HINSTANCE hInstance,int nCmdShow)//初始化窗口{HWND hWnd;hWnd=CreateWindow("WinFill",  //生成窗口"填充示例程序",WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,0,CW_USEDEFAULT,0,NULL,NULL,hInstance,NULL);if(!hWnd)return FALSE;ShowWindow(hWnd,nCmdShow);//显示窗口UpdateWindow(hWnd);return TRUE;}BOOL InitWindowsClass(HINSTANCE hInstance) //定义窗口类{WNDCLASS WndClass;WndClass.cbClsExtra=0;WndClass.cbWndExtra=0;WndClass.hbrBackground=(HBRUSH)(GetStockObject(WHITE_BRUSH));WndClass.hCursor=LoadCursor(NULL,IDC_ARROW);WndClass.hIcon=LoadIcon(NULL,"END");WndClass.hInstance=hInstance;WndClass.lpfnWndProc=WndProc;WndClass.lpszClassName="WinFill";WndClass.lpszMenuName=NULL;WndClass.style=CS_HREDRAW|CS_VREDRAW;return RegisterClass(&WndClass);}

首先这个程序在架构上比上一篇程序更加清晰,把注册类,创建窗口写到了两个函数里面。框架搭好了我们就只要处理winproc就行了。

在展示窗口的时候会有一个WM_PAINT消息产生,我们就是要处理这个消息,画刷画笔画图分为以下几步:

① 创建句柄,hdc,hbrush,hpen和定义指向包含绘图信息的结构体变量PtStr;

②获取句柄实例,hdc 通过BeginPaint(hWnd,&PtStr)函数,brush hpen通过GetStockObject

③设置 映射 SetMapMode(hDC,MM_ANISOTROPIC) 不同映射模式效果坐标有所不同

④利用SelectObject选择画笔花刷

⑤利用函数画图:movetoex linetoex polyline arc等等

⑥EndPaint(hWnd,&PtStr)结束画图

原创粉丝点击