- 注册时间
- 2005-4-8
- 最后登录
- 1970-1-1
|
教程发出来,自己才发现起点设的稍稍有些高了,所以赶紧加了一篇上手介绍,配以简单的实例,给大家一个对我的那个框架的比较直观的认识。
大家只要把下面的代码覆盖掉原来的main.cpp中的代码就可以执行了
1.简单图形
下面列举了几个常见的画图函数
- #include "Window.h"
- #include "time.h"
- #include "Frame.h"
- void Main(HWND hWnd)
- {
- //先获得一个dc,就当他是画布好了
- HDC hDC=::GetDC(hWnd);
- //1.画线,这个api比较奇怪,需要先moveto
- ::MoveToEx(hDC,10,10,NULL);
- ::LineTo(hDC,100,100);
- //2.画方块
- ::Rectangle(hDC,110,10,210,110);
- //3.画椭圆,四个参数是外接四边形的四个顶点
- ::Ellipse(hDC,320,10,420,110);
- //4.实心方块
- //先创建一个红色的刷子,RGB里面的三个参数是红,绿,蓝三种颜色的成分,255最大。
- HBRUSH brush=::CreateSolidBrush(RGB(255,0,0));
- //再创建一个RECT类型的变量
- RECT rect;
- rect.left =100;
- rect.top=300;
- rect.right=200;
- rect.bottom =400;
- //可以画了,第二个参数中的&表示把rect这个变量的地址传进去,第三个参数就是刚才那个刷子
- ::FillRect(hDC,&rect,brush);
- //删掉创建的brush
- ::DeleteObject(brush);
- //5.写字
- ::TextOut(hDC,200,200,"Hello Windows!",14);
- //6.实心圆,和实心方块不太相同,因为实心方块提供了FillRect函数,而圆则没有,还是要靠Ellipse函数
- //先创建一个绿色的刷子,RGB里面的三个参数是红,绿,蓝三种颜色的成分,255最大。
- HBRUSH brush2=::CreateSolidBrush(RGB(0,255,0));
- //在把这个刷子设置成当前刷子
- HGDIOBJ oldBrush=::SelectObject(hDC,brush2);
- //画一个圆
- ::Ellipse(hDC,100,400,200,500);
- //再把原来的刷子恢复了
- ::SelectObject(hDC,oldBrush);
- //删掉创建的brush
- ::DeleteObject(brush2);
- //7.彩色的线
- //先创建一个黄色的花笔,PS_SOLID表示实线,你可以试试PS_DASH,2表示线宽
- HPEN pen=::CreatePen(PS_SOLID,2,RGB(0,0,255));
- //把这个画笔设置成当前画笔
- HGDIOBJ oldPen=::SelectObject(hDC,pen);
- //画线
- ::MoveToEx(hDC,200,400,NULL);
- ::LineTo(hDC,300,500);
- //恢复原来的画笔
- SelectObject(hDC,oldPen);
- //删掉创建的pen
- ::DeleteObject(pen);
- }
- void Render(HWND hWnd)
- {
-
- }
复制代码
2.小动画
并附有循环和判断语句的简介
- #include "Window.h"
- #include "time.h"
- #include "Frame.h"
- void Main(HWND hWnd)
- {
- //先获得一个dc,就当他是画布好了
- HDC hDC=::GetDC(hWnd);
- //1.画个移动的方块
- //创建一个使用背景色的画笔,GetBkColor可以获得当前画布(dc)的背景色;
- HPEN bkPen=::CreatePen(PS_SOLID,1,::GetBkColor(hDC));
- //这个是c/c++中的循环语句
- //i是循环变量,这句表示i从0循环到30,循环要执行的内容用画括号括起来
- //int是i的类型,一般这里就用int型的变量就可以了
- //i=0表示一开始i的值为0
- //i<30表示当i小于30的时候才继续循环,否则就跳出花括号继续
- //i++表示每次执行完循环体(就是花括号里面的东西),i都要加一(++表示把自己加一)
- for(int i=0;i<30;i++)
- {
- //先画一个方块
- ::Rectangle(hDC,110+i*5,10,210+i*5,110);
- //休息100毫秒,让大家能看一下
- ::Sleep(100);
- //选出来那个背景色的画笔
- HGDIOBJ oldPen=::SelectObject(hDC,bkPen);
- //用背景画一下,就擦掉了
- ::Rectangle(hDC,110+i*5,10,210+i*5,110);
- //恢复原来的笔
- ::SelectObject(hDC,oldPen);
- }
- //这里循环结束
-
- //删除创建的画笔
- ::DeleteObject(bkPen);
-
- //2.来串花的
- //循环画一串点,这里循环400次
- for(int i=0;i<400;i++)
- {
- //i%10表示求i除以5的余数,==表示判断是否相等。 i % 5 == 0表示i除以5余0,就是i是5的倍数
- //if()是c/c++的判断语句,这句表示,如果i是5的倍数,那么执行if下面那个花括号中的语句
- //否则执行else下面花括号中的语句(当然,else和下面那个花括号是可以省略的,那么就继续执行)
- if(i % 5 == 0)
- {
- //如果i是5的倍数,那么画个紫色的点(红加蓝=紫)
- //这个是画点函数,最后可以带一个颜色
- ::SetPixel(hDC,100+i*2,300,RGB(255,0,255));
- }
- else
- {
- //如果不是,那么画个绿色的点
- ::SetPixel(hDC,100+i*2,300,RGB(0,255,0));
- }
- }
- }
- //这里定义的变量是全局变量,在定义的时候给他一个初始值为0。
- int j=0;
- void Render(HWND hWnd)
- {
- //3.这里使用Render函数,这个函数在Main结束后不停的执行
- //获得一个dc
- HDC hDC=::GetDC(hWnd);
- //画个椭圆,这次没有擦,所以会留在屏幕上
- ::Ellipse(hDC,10+j*3,10,50+j*3,70);
- //把j的值加一
- j++;
- //如果j的值大于300,那么执行花括号中的东西
- if(j>300)
- {
- //把j重新变成0,注意这里是=,而判断是否相等用==
- j=0;
- }
- //GetKey()是我写的一个函数,大家可以当api来用,表示检测按键,如果没有按键,则返回-1;
- //如果有按键,则返回按键的值
- //!=表示不等于,这句话表示先执行GetKey(),然后看他的返回值,如果这个值不等于-1,也就是说有按键,则执行花括号中内容
- if(::GetKey() != -1)
- {
- //退出程序,这个也是我写的,注意大小写
- ::Exit(hWnd);
- }
- //否则会继续执行
-
- }
复制代码 |
|