1 F h PCreate Pen int n Pen
- Slides: 59
1. 画笔(续) F 也可创建新画笔, 形式如下: h. P=Create. Pen ( int n. Pen. Style, int n. Width, COLORREF rgb. Color ); PS_DASH: 虚线 PS_DASHDOT: 点划线 PS_DASHDOTDOT:双点划线 PS_DOT: 点线 PS_INSIDEFRAME:实线 PS_NULL: 无 PS_SOLID: 实线 //确定画笔样式 //画笔宽度 //画笔颜色 23
2. 画刷(续) F 可调用创建画刷函数: – Create. Solid. Brush – Create. Hatch. Brush h. Br=Create. Solid. Brush(rgb. Color); h. Br=Create. Hatch. Brush (int n. Hctch. Style, COLORREF rgb. Color ); 创建具有 指定颜色 的单色画刷 创建指定阴 影图案和颜 色的画刷 HS_BDIAGONAL 45度从左上到右下 HS_DIAGCROSS 45度叉线 HS_FDIAGONAL 45度从左下到右上 HS_CROSS 垂直相交的阴影线 HS_HORIZONTAL 水平阴影线 HS_VERTICAL 垂直阴影线 27
8. 绘制椭圆,并用当前画刷填充 BOOL Ellipse(HDC hdc, int. X 1, int. Y 1, int. X 2, int. Y 2) 9.绘制多边形,并用当前画刷填充 BOOL Polygon(HDC hdc, LPPOINT lp. Points, int n. Count) 包含各点坐标的 POINT数组的地址 多边形点的个数 35
#include<windows. h> #include<stdlib. h> #include<string. h> long WINAPI Wnd. Proc ( HWND h. Wnd, UINT i. Message, UINT w. Param, LONG l. Param ); BOOL Init. Windows. Class(HINSTANCE h. Instance); BOOL Init. Windows(HINSTANCE h. Instance, int n. Cmd. Show); HWND h. Wnd. Main; 38
Int WINAPI Win. Main ( HINSTANCE h. Instance, HINSTANCE h. Prev. Instance, LPSTR lp. Cmd. Line, int n. Cmd. Show) { MSG Message; if(!Init. Windows. Class(h. Instance)) if(!Init. Windows(h. Instance, n. Cmd. Show)) while(Get. Message(&Message, 0, 0, 0)) { Translate. Message(&Message); Dispatch. Message(&Message); } return Message. w. Param; } //主函数 return FALSE; //消息循环 39
消息处理函数 long WINAPI Wnd. Proc(HWND h. Wnd, UINT i. Message, UINT w. Param, LONG l. Param) { HDC h. DC; //定义指向设备的句柄 HBRUSH h. Brush; //定义指向画刷的句柄 HPEN h. Pen; //定义指向画笔的句柄 PAINTSTRUCT Pt. Str; //定义指向包含绘图信息的结构体变量 switch(i. Message) //处理消息 { case WM_PAINT: //处理绘图消息 h. DC=Begin. Paint(h. Wnd, &Pt. Str); Set. Map. Mode(h. DC, MM_ANISOTROPIC); //设置映像模式 h. Pen=(HPEN)Get. Stock. Object(BLACK_PEN); //黑色画笔 h. Brush=(HBRUSH)Get. Stock. Object(DKGRAY_BRUSH); //深灰色刷 Select. Object(h. DC, h. Brush); //选择画刷 40
Select. Object(h. DC, h. Pen); //选择画笔 Round. Rect(h. DC, 50, 120, 100, 200, 15); //绘制圆角矩形 h. Brush=(HBRUSH)Get. Stock. Object(LTGRAY_BRUSH); //亮灰色刷 Select. Object(h. DC, h. Brush); //选择画刷 Ellipse(h. DC, 150, 200, 150); //绘制椭圆 h. Brush=(HBRUSH)Get. Stock. Object(HOLLOW_BRUSH); //虚画刷 Select. Object(h. DC, h. Brush); //选择画刷 Pie(h. DC, 250, 300, 100, 250, 300, 50); //绘制饼形 End. Paint(h. Wnd, &Pt. Str); //结束绘图 return 0; case WM_DESTROY: //结束应用程序 Post. Quit. Message(0); return 0; default: //其他消息处理程序 return(Def. Window. Proc(h. Wnd, i. Message, w. Param, l. Param)) ; } } 41
BOOL Init. Windows(HINSTANCE h. Instance, int n. Cmd. Show)//初始化窗口 { HWND h. Wnd; h. Wnd=Create. Window("Win. Fill", //生成窗口 "填充示例程序", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, NULL, h. Instance, NULL); if(!h. Wnd) return FALSE; h. Wnd. Main=h. Wnd; Show. Window(h. Wnd, n. Cmd. Show); //显示窗口 Update. Window(h. Wnd); return TRUE; } 42
BOOL Init. Windows. Class(HINSTANCE h. Instance) //定义窗口类 { WNDCLASS Wnd. Class; Wnd. Class. cb. Cls. Extra=0; Wnd. Class. cb. Wnd. Extra=0; Wnd. Class. hbr. Background=(HBRUSH)(Get. Stock. Object(WHITE_BRUSH)); Wnd. Class. h. Cursor=Load. Cursor(NULL, IDC_ARROW); Wnd. Class. h. Icon=Load. Icon(NULL, "END"); Wnd. Class. h. Instance=h. Instance; Wnd. Class. lpfn. Wnd. Proc=Wnd. Proc; Wnd. Class. lpsz. Class. Name="Win. Fill"; Wnd. Class. lpsz. Menu. Name=NULL; Wnd. Class. style=CS_HREDRAW|CS_VREDRAW; return Register. Class(&Wnd. Class); } 43
在消息WM_PAINT处理程序中,调用函数Begin. Paint()获得 设备环境句柄。由此经过线性差分计算圆半径的大小 l. Radious,第 1个 1/4周期的程序代码如下: if(i<=25) //第一个 1/4周期 { h. Pen=Create. Pen(PS_DASH, 1, RGB(255, 0, 0)); //红笔 h. Brush=Create. Hatch. Brush(HS_BDIAGONAL, RGB(255, 0, 0)); //红刷 //计算半径 l. Radious=(long)(df. Range*0. 2+i%25*df. Range*0. 4/25); } ……. 46
#include <windows. h> #include <stdlib. h> #include <string. h> #include <math. h> #define Pi 3. 1415926 long WINAPI Wnd. Proc(HWND h. Wnd, UINT i. Message, UINT w. Param, LONG l. Param); double df. Theta=0, df. Range=100. 0; //正弦曲线的角度变量. long i=0, j=0; long l. Centre. X=0, l. Centre. Y=0, l. Radious=(long)(0. 2*df. Range); //定义圆心坐标和圆坐标. POINT lp. Sin[100]; //定义正弦曲线的点坐标. 48
int WINAPI Win. Main(…, …, …, . . . ) { …… // 填写窗口类属性 if(!Register. Class(&Wnd. Class)) { Message. Beep(0); return FALSE; } //注册窗口. h. Wnd=Create. Window ("SIN", "4_6", //窗口类名. //标题名. WS_OVERLAPPEDWINDOW, //带标题栏, 最大/小按钮的窗口 CW_USEDEFAULT, //窗口左上角坐标. 0, CW_USEDEFAULT, //采用缺省的宽度和高度. 0, NULL, //无父窗口. NULL, //无主菜单. h. Instance, //当前实例句柄. NULL); . 49
Show. Window(h. Wnd, n. Cmd. Show); //显示窗口. Update. Window(h. Wnd); //更新并绘制用户区. for(int j=0; j<100; j++) //生成正弦曲线的点坐标. { lp. Sin[j]. x=(long)(j*2*Pi/100*60); lp. Sin[j]. y=(long)(df. Range*sin(j*2*Pi/100)); } while(Get. Message(&Message, 0, 0, 0)) { Translate. Message(&Message); Dispatch. Message(&Message); } return Message. w. Param; //消息循环. } 50
long WINAPI Wnd. Proc(HWND h. Wnd, UINT i. Message, UINT w. Param, LONG l. Param) { HDC h. DC; //定义设备环境句柄. HBRUSH h. Brush; //定义画刷句柄 HPEN h. Pen; //定义画笔句柄 PAINTSTRUCT Pt. Str; //定义包含绘图信息的结构体变量 witch(i. Message) { case WM_PAINT: //处理绘图消息 h. DC=Begin. Paint(h. Wnd, &Pt. Str); //获得设备环境指针 Set. Window. Org. Ex(h. DC, -200, NULL); //设置原点坐标 h. Pen=Create. Pen(PS_DASH, 1, RGB(255, 0, 0)); //建新画笔 Select. Object(h. DC, h. Pen); //选入画笔 Polyline(h. DC, lp. Sin, 100); //绘制正弦曲线 51
if(i<=25) //第一个 1/4周期. { h. Pen=Create. Pen(PS_DASH, 1, RGB(255, 0, 0)); h. Brush=Create. Hatch. Brush(HS_BDIAGONAL, RGB(255, 0, 0)); l. Radious=(long)(df. Range*0. 2+i%25*df. Range*0. 4/25); //计算半径 } else if(i<=50)//第二个 1/4周期. { h. Pen=Create. Pen(PS_DASH, 1, RGB(0, 255, 0)); h. Brush=Create. Hatch. Brush(HS_DIAGCROSS, RGB(0, 255, 0)); l. Radious=(long)(df. Range*0. 2+i%25*df. Range*0. 4/25); } else if(i<=75)//第三个 1/4周期. { h. Pen=Create. Pen(PS_DASH, 1, RGB(0, 0, 255)); h. Brush=Create. Hatch. Brush(HS_CROSS, RGB(0, 0, 255)); l. Radious=(long)(df. Range*0. 2+i%25*df. Range*0. 4/25); } else//第四个 1/4周期. { h. Pen=Create. Pen(PS_DASH, 1, RGB(255, 0)); h. Brush=Create. Hatch. Brush(HS_VERTICAL, RGB(255, 0)); l. Radious=(long)(df. Range*0. 2+i%25*df. Range*0. 4/25); } 52
Select. Object(h. DC, h. Brush); //选入画刷. Select. Object(h. DC, h. Pen); //选入画笔. l. Centre. X=lp. Sin[i]. x; //圆心x坐标. l. Centre. Y=lp. Sin[i]. y; //圆心y坐标. Ellipse(h. DC, l. Centre. X-l. Radious, l. Centre. Y-l. Radious, l. Centre. X+l. Radious, l. Centre. Y+l. Radious); //画圆 i++; Delete. Object(h. Pen); //删除画笔 Delete. Object(h. Brush); //删除画刷 End. Paint(h. Wnd, &Pt. Str); //删除设备环境指针 Sleep(100); //停 0. 1秒 if(i<100) Invalidate. Rect(h. Wnd, NULL, 1); //刷新用户区 return 0; case WM_DESTROY: //关闭窗口. Post. Quit. Message(0); return 0; default: return(Def. Window. Proc(h. Wnd, i. Message, w. Param, l. Param)); } } 53
#include <windows. h> #include <string. h> #include <stdlib. h> #include <stdio. h> LRESULT CALLBACK Wnd. Proc(HWND, UINT, WPARAM, LPARAM); int WINAPI Win. Main(HINSTANCE h. Instance, HINSTANCE h. Prev. Inst, LPSTR lpsz. Cmd. Line, int n. Cmd. Show) { HWND hwnd; MSG Msg; WNDCLASS wndclass; char lpsz. Class. Name[] = "基本绘图"; char lpsz. Title[]= "My_Drawing"; wndclass. style = 0; …… //填写属性 wndclass. lpsz. Class. Name = lpsz. Class. Name ; if(!Register. Class(&wndclass)) { Message. Beep(0); return FALSE; } hwnd = Create. Window(…, ………, …); Show. Window(hwnd, n. Cmd. Show) ; Update. Window(hwnd); while( Get. Message(&Msg, NULL, 0, 0)) {Translate. Message(&Msg); Dispatch. Message(&Msg); } return Msg. w. Param; } 55
LRESULT CALLBACK Wnd. Proc(HWND hwnd, UINT message, WPARAM w. Param, LPARAM l. Param) { HDC hdc; PAINTSTRUCT ps; HPEN h. P; //定义画笔句柄 HBRUSH h. B; //定义画刷句柄 switch(message) { case WM_PAINT: //通过响应WM_PAINT消息完成绘图 作 h. P=Create. Pen(PS_DASHDOT, 1, RGB(0, 255, 0)); //自定义绿笔 //所画线条为点划线,宽度为 1 h. B=Create. Hatch. Brush(HS_CROSS, RGB(255, 0, 0)); //红色网状 hdc=Begin. Paint(hwnd, &ps); //取得设备环境句柄 Set. Map. Mode(hdc, MM_TEXT); //设置映射模式,用缺省模式 //使用当前缺省画笔、画刷进行绘图 Rectangle(hdc, 130, 60, 270, 200); //绘制矩形,并填充 Select. Object(hdc, h. B); //更新画刷,用“红色网状” Ellipse(hdc, 130, 70, 270, 190); //绘制椭圆,并填充 56
Select. Object(hdc, h. P); //更新画笔,选“自定义绿笔” Move. To. Ex(hdc, 100, 130, NULL); //使用当前画笔绘制轴线 Line. To(hdc, 300, 130); Move. To. Ex(hdc, 200, 30, NULL); Line. To(hdc, 200, 230); End. Paint(hwnd, &ps); //释放设备环境句柄 break; case WM_DESTROY: Delete. Object(h. P); //退出窗口时删除画笔 Delete. Object(h. B); //退出窗口时删除黑色画刷 Post. Quit. Message(0); break; default: return Def. Window. Proc(hwnd, message, w. Param, l. Param); } return 0; } 57
(第四章) 完 12/12/2021 58
- Int sum(int a int n) int sum=0 i
- Divideint
- Int max(int x int y)
- Inheritance calculator
- Public void drawsquare(int x, int y, int len)
- Int main int argc char argv
- Voidswap
- 7팩토리얼
- Int f (int n)
- Interface myinterface int foo(int x)
- Const arduino
- Int max int min c++
- Int main(int argc, char** argv)
- Int main int num 4
- Kutsilyo de almasen
- Inverted pen grasp dental
- Public void int
- Char char slide
- Algèbre relationnelle
- Public int id { get; set; }
- Global brand database
- Num +1
- Science and technology center in ukraine
- Counter pointer
- Int num
- Matlab int to binary
- Contoh array 3 dimensi
- Void func(int num)
- Corr alt int
- G int
- Int
- Public int available() throws ioexception
- What is
- Esercizi alberi binari
- Long long int c
- Num 2
- Signed vs unsigned int
- Who.int
- Typedef node
- Char ch int i scanf c&i
- Int 32
- Dependex
- Typedef struct tree int info
- [email protected]
- Strlen char *
- Nodeleaf
- String value of int
- Int x;
- Int num;
- Arrayint
- Characteristics of system
- Integer overflow
- Private int
- Tipe data int mempunyai ukuran
- Int ans
- Int myarray[][] = {{0, 0, 3}, {0, 0, 0}, {7, 0, 0}};
- Birth defects