第四章 GDI、控件------结束语


      前情回顾:

      在讲述了WINDOWS编程的梗概后,作者讲解WINDOWS的匈牙利命名法体系,WINDOWS结构和窗口建立,接着进一步讲解了WINDOW的深入点的用法,WINDOWS的消息机制及应用,GDI介绍和资源(.RC)使用。


      第四章要点:

1.GDI进阶。

如何用GDI画点,线,面。 GDI的概念是,模拟真实的画画,先创建笔和刷子,笔用来勾勒,刷子用来上色,再想画什么,然后勾出来上色。

例:

		hdc = GetDC(hwnd);
		color = RGB(rand()%256,rand()%256,rand()%256);
		color_pen = CreatePen(PS_SOLID,10,color);
		color_brush = CreateSolidBrush(color);

    	 

		//erase
		SelectObject(hdc,bg_brush);
		SelectObject(hdc,bg_pen);
		Ellipse(hdc,rect_ellipse.left,rect_ellipse.top,rect_ellipse.right,rect_ellipse.bottom);
		MoveToEx(hdc,0,0,NULL);
		LineTo(hdc,point.x,point.y);
		Rectangle(hdc,rect.left,rect.top,rect.right,rect.bottom); 

		//draw
		SelectObject(hdc,color_brush);    //init
		SelectObject(hdc,color_pen);  
		SetRect(&rect,400,0,400+rand()%401,rand()%401);  
		SetRect(&rect_ellipse,0,400,rand()%401,400+rand()%401);
		point.x = rand()%401; point.y = rand()%401;

		MoveToEx(hdc,0,0,NULL);   //line
		LineTo(hdc,point.x,point.y);

		Rectangle(hdc,rect.left,rect.top,rect.right,rect.bottom); 		//FillRect(hdc,&rect,color_brush);

		Ellipse(hdc,rect_ellipse.left,rect_ellipse.top,rect_ellipse.right,rect_ellipse.bottom);    //ellipse

		for(int i=0;i<5;++i){
			poly[i].x = 400+rand()%401;
			poly[i].y = 400+rand()%401;
		}

		Polygon(hdc,poly,5);

		Sleep(400);
		
		DeleteObject(color_brush);
		DeleteObject(color_pen);
		ReleaseDC(hwnd,hdc);


2.文本函数

SelectObject(hdc,FONT); 函数为文本设置样式 ,FONT表示什么样式,可以用FONT=GetStockObject来或者自带FONT,也可以用FONT=CreatFont来自定义。


3.定时

介绍了两种定时方法

1).WM_TIMER消息

设置一个timer,SetTimer(hwnd,id,delay,fn);

timer会每隔delay的时间发送一个WM_TIMER的消息,并自动执行回调函数fn。可以将自己想执行的任务房子WM_TIMER后,也可以放在fn中。

2).GetTickCount()

返回当然计时。

例:

	start_time = GetTickCount();

	while(true){
		if(PeekMessage(&msg,NULL,0,0,PM_REMOVE)){
			if(msg.message == WM_QUIT) break;
			TranslateMessage(&msg);
			DispatchMessage(&msg);
		}

		//game
		hdc = GetDC(hwnd);
		if(GetTickCount()-start_time>33){
			Colorful(hdc,hwnd);
			start_time = GetTickCount();
		}
	}


4 .控件

控件也就是窗口,只不过是输入父窗口的子窗口。它有自己的窗口属性,句柄函数,会发送WM_COMMAND消息。

通过SendMessage(hwnd,message,wparam,lparam)向控件发送消息,以操控控件。


5.获取消息

我们想知道自己的程序在怎么样一个电脑上跑,是在一个老爷机上跑,还是在Alient上跑,是在大屏幕液晶上跑,还是在学校机房上跑。

那么就需要获取信息。

有大量的函数来告诉你相关信息,如

int width = GetSystemMetrics(SM_CXSCREEN);//返回屏幕宽度

GetTextMetrics(hdc,lptextmetris);//获取字体信息


6.T3D游戏控制台程序

讲解了一个游戏框架:

WinMain{

CreateWindow()

Init()

----------loop

game()

----------------

gameover()

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值