visualc++经典易懂全视频教程之例程三源程序
[color=#0909f7][size=3][b]安装viaual c++,打开附件内的工程,编译,组建,运行即可(近期将陆续上传视频教程内的各例程的源程序,小部分代码有改动,希望能对vc++的初学者有点儿益处![/b][/color][/size]#include<windows.h>//包含应用程序中所需的数据类型和数据的定义
#include<stdlib.h> //包含系统标准库
#include<string.h> //包含系统定义的字符串库
#include<math.h>
#define pi 3.1415926
long winapi wndproc(hwnd hwnd,uint imessage,uint wparam,long lparam); //定义消息处理函数的原型
double dfthdta=0,dfrange=200.0;//正弦曲线的角度变量
long i=0,j=0;
long lcentrex=0,lcentrey=0,lradious=(long)dfrange*0.2;//定义圆心坐标和半径
point lpsin[100];//定义正弦曲线的点坐标
//----------------以下初始化窗口类-----------------
int winapi winmain(hinstance hinstance,hinstance hprevinstance,lpstr lpcmdline,int ncmdshow)
{
hwnd hwnd;
msg message;
wndclass wndclass;
char lpszclassname[]="sin";
wndclass.style=cs_hredraw | cs_vredraw; //窗口类型为缺省类型
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
(
"sin", //窗口类名
"逐梦论坛lyyjl学习编写", //窗口实例的标题名
ws_overlappedwindow, //窗口的风格
cw_usedefault,
0, //窗口左上角坐标为缺省值
cw_usedefault,
0, //窗口的高和宽为缺省值
null, //此窗口无父窗口
null, //此窗口无主菜单
hinstance, //创建此窗口的应用程序的当前句柄
null //不使用该值
);
showwindow(hwnd,ncmdshow);//显示窗口
updatewindow(hwnd);//更新并绘制用户区
for(int j=0;j<100;j++)//生成正弦曲线的点坐标
{lpsin[j].x=(long)(j*pi/100*200);
lpsin[j].y=(long)(dfrange*sin(j*2*pi/100));
}
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);//获得设备环境指针
setwindoworgex(hdc,-100,-350,null);//设置原点坐标
hpen=createpen(ps_dash,1,rgb(255,0,0));//建新画笔
selectobject(hdc,hpen);//选入画笔
polyline(hdc,lpsin,100);//绘制正弦曲线
if(i<=25)//第一个1/4周期
{hpen=createpen(ps_dash,2,rgb(200,0,100));
hbrush=createhatchbrush(hs_bdiagonal,rgb(255,0,0));
lradious=(long)(dfrange*0.2+(i-1)%25*dfrange*0.4/25);//计算半径
}
else if(i<=50)//第二个1/4周期
{hpen=createpen(ps_dash,2,rgb(0,255,0));
hbrush=createhatchbrush(hs_diagcross,rgb(0,255,0));
lradious=(long)(dfrange*0.2+(50-i)%25*dfrange*0.4/25);//计算半径
}
else if(i<=75)//第三个1/4周期
{hpen=createpen(ps_dash,2,rgb(0,0,255));
hbrush=createhatchbrush(hs_cross,rgb(0,0,255));
lradious=(long)(dfrange*0.2+(i-1)%25*dfrange*0.4/25);//计算半径
}
else//第四个1/4周期
{hpen=createpen(ps_dash,2,rgb(50,100,180));
hbrush=createhatchbrush(hs_vertical,rgb(255,255,0));
lradious=(long)(dfrange*0.2+(100-i)%25*dfrange*0.4/25);//计算半径
}
selectobject(hdc,hbrush);//选择画刷
selectobject(hdc,hpen);//选择画笔
lcentrex=lpsin[i].x;//圆心x坐标
lcentrey=lpsin[i].y;//圆心y坐标
ellipse(hdc,lcentrex-lradious,lcentrey-lradious,lcentrex+lradious,lcentrey+lradious);//画圆
i++;
deleteobject(hpen);//删除画笔
deleteobject(hbrush);//删除画刷
endpaint(hwnd,&ptstr);//删除设备环境指针
sleep(100);//停0.2秒
if(i<100) invalidaterect(hwnd,null,1);//刷新用户区
else i=0;invalidaterect(hwnd,null,1);
return 0;
case wm_destroy://关闭窗口
postquitmessage(0);
return 0;
default://其他消息处理程序
return(defwindowproc(hwnd,imessage,wparam,lparam));
}
}
[attach]1678[/attach]
页:
[1]