TextOut(hDC,nXChar,nYChar*(1+x),textbuf[x],lstrlen(textbuf[x]));
EndPaint(hWnd,&PtStr);
return0;
caseWM_DESTROY:
//结束应用程序
PostQuitMessage(0);
return0;
default:
//其他消息处理程序
return(DefWindowProc(hWnd,iMessage,wParam,lParam));
}
}
BOOLInitWindowsClass(HINSTANCEhInstance)//定义窗口类
{
WNDCLASSWndClass;
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;
returnRegisterClass(&WndClass);
}
BOOLInitWindows(HINSTANCEhInstance,intnCmdShow)//初始化窗口
{HWNDhWnd;
hWnd=CreateWindow("WinFill",//生成窗口
"填充示例程序",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
0,
CW_USEDEFAULT,
0,
NULL,
NULL,
hInstance,
NULL);
if(!
hWnd)returnFALSE;
ShowWindow(hWnd,nCmdShow);//显示窗口
UpdateWindow(hWnd);
returnTRUE;
}
五、实验结果的分析与评价
初次上手有点生疏,但经过多次实践,略微懂得其中原理
实验报告(三)
实验名称
Windows绘图试验
同组人姓名
实验性质
□基本操作□验证性
□综合性□设计性
实验日期
实验成绩
教师评价:
实验预习□实验操作□实验结果□实验报告□其它□
教师签名:
1、实验目的及要求
理解DC概念,掌握坐标映射的设置方法,熟悉Windows绘图的基本方法和函数。
2、实验内容
运用Windows提供的GDI函数,完成窗口图形输出功能。
三、主要设备及软件
Windows2000+VC6.0+MSDN
4、实验流程、操作步骤或核心代码、算法片段
1)将窗口划分为5个区域,并用白色到黑色线性变化的颜色填充这5个区域,画一条斜线穿过这5个区域;
2)编写一个程序,在屏幕上出现一个圆心沿正弦曲线轨迹移动的实心圆,而且,每隔四分之一周期,圆的填充色和圆的周边颜色都发生变化,同时,圆的半径在四分之一周期之内由正弦曲线幅值的0.2倍至0.6倍线性增长。
#include"stdafx.h"
#include"resource.h"
LRESULTCALLBACKWndProc(HWNDhWnd,UINTmessage,WPARAMwParam,LPARAMlParam)
{
staticinti=0;
staticintj=0;
staticintk=1;
HBRUSHhBrush;//定义画刷的句柄
HPENhPen;
PAINTSTRUCTPtStr;//定义指向包含绘图信息的结构体变量
intwmId,wmEvent;
PAINTSTRUCTps;
HDChdc;
TCHARszHello[MAX_LOADSTRING];
LoadString(hInst,IDS_HELLO,szHello,MAX_LOADSTRING);
switch(message)
{
caseWM_COMMAND:
wmId=LOWORD(wParam);
wmEvent=HIWORD(wParam);
switch(wmId)
{
caseIDM_action:
j=1;
i=0;
InvalidateRect(hWnd,NULL,1);
break;
caseIDM_wait:
j++;
InvalidateRect(hWnd,NULL,1);
break;
caseIDM_change:
//改背景
k++;
break;
caseIDM_end:
DestroyWindow(hWnd);
break;
default:
returnDefWindowProc(hWnd,message,wParam,lParam);
}
break;
caseWM_PAINT:
if(j%2==1)
{
hdc=BeginPaint(hWnd,&PtStr);
hPen=(HPEN)GetStockObject(NULL_PEN);//获取系统定义的空画笔
SelectObject(hdc,hPen);//选择画笔
hBrush=(HBRUSH)GetStockObject(BLACK_BRUSH);//获取系统定义的画刷
SelectObject(hdc,hBrush);//选择画刷
LineTo(hdc,50,50);//画线
DeleteObject(hPen);//删除画笔
hPen=CreatePen(PS_SOLID,2,RGB(255,0,0));//创建画笔
SelectObject(hdc,hPen);//选择画笔
Arc(hdc,63+(i%200)*5,137,138+(i%200)*5,212,100+(i%200)*5,137,100+(i%200)*5,137);//画一个圆
i++;
DeleteObject(hPen);//删除画笔
DeleteObject(hBrush);//删除画刷
EndPaint(hWnd,&PtStr);//结束绘图
Sleep(50);
InvalidateRect(hWnd,NULL,1);
}
if(k%2==0)
{
}
break;
caseWM_DESTROY:
PostQuitMessage(0);
break;
default:
returnDefWindowProc(hWnd,message,wParam,lParam);
}
return0;
}
五、实验结果的分析与评价
初步掌握绘图的过程,了解了其中大意
实验报告(四)
实验名称
文本的输出方法与字体设置
同组人姓名
实验性质
□基本操作□验证性
□综合性□设计性
实验日期
实验成绩
教师评价:
实验预习□实验操作□实验结果□实验报告□其它□
教师签名:
一、实验目的及要求
理解字体句柄的念,熟悉Windows文字输出的基本方法和函数,学习字体格式的控制。
二、实验内容
(选做1个)
1、在窗口中显示出26个英文字母,从左向右字母依次位置提高10个像素单位,并且颜色变为红色,然后回到正常位置;当到达最右端后改变方向从右向左依次变成红色并位置提高10个像素单位。
在窗口的第二行显示26个字母,字体从正常到斜体,颜色从黑色到天蓝色不断变换。
2、编写一个程序,在窗口中显示“VC中显示字体与背景”,字体颜色为红色,背景色为黄色,字体为宋体,字高40。
三、主要设备及软件
4、实验流程、操作步骤或核心代码、算法片段
1)在窗口中显示出26个英文字母,从左向右字母依次位置提高10个像素单位,并且颜色变为红色,然后回到正常位置;当到达最右端后改变方向从右向左依次变成红色并位置提高10个像素单位。
在窗口的第二行显示26个字母,字体从正常到斜体,颜色从黑色到天蓝色不断变换。
#include
#include
#include
#include
inta=0;
//函数提前声明
BOOLInitWindowsClass(HINSTANCEhInstance);
BOOLInitWindows(HINSTANCEhInstance,intnCmdShow);
longWINAPIWndProc(HWNDhWnd,UINTiMessage,UINTwParam,LONGlParam);
BOOLInitWindowsClass(HINSTANCEhInstance)//初始化窗口类
{
WNDCLASSWndClass;
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.lpszClassName="WinFill";
WndClass.lpfnWndProc=WndProc;
WndClass.lpszMenuName=NULL;
WndClass.style=CS_HREDRAW|CS_VREDRAW;
return(:
:
RegisterClass(&WndClass));
}
//
BOOLInitWindows(HINSTANCEhInstance,intnCmdShow)//初始化窗口
{
HWNDhWnd;
hWnd=:
:
CreateWindow("WinFill","填充实例程序",
WS_OVERLAPPEDWINDOW,//窗口类型
250,150,450,450,NULL,NULL,hInstance,NULL);
if(!
hWnd)
{
returnFALSE;
}
:
:
ShowWindow(hWnd,nCmdShow);
:
:
UpdateWindow(hWnd);
returnTRUE;
}
longWINAPIWndProc(HWNDhWnd,UINTiMessage,UINTwParam,LONGlParam)
{
HDChdc;//设置环境句柄
charstr[]="abcdefghijklmnopqrstuvwxyz";
inti=0;
staticn;
PAINTSTRUCTps;
TEXTMETRICtm;
intLY=50;//初始坐标
HFONThF_black,hF_blue;//字体句柄
switch(iMessage){
caseWM_CREATE:
SetTimer(hWnd,1,300,NULL);
break;
caseWM_PAINT:
hdc=BeginPaint(hWnd,&ps);
GetTextMetrics(hdc,&tm);//获取默认句柄,写入tm结构中
for(i=0;i<26;i++)
{
inty=LY;//LY
if(i==n)
{
if(a==0)
y=LY-30;
elsey=LY+30;
SetTextColor(hdc,RGB(255,0,0));//设置单个的颜色为红
}
TextOut(hdc,2*i*tm.tmAveCharWidth,y,&str[i],1);//依次为字符串起始坐标,所显示的字符串,输出的字节数
SetTextColor(hdc,RGB(0,0,0));//设置整排的颜色为黑
}
if(n%2==0)//当时钟为偶数时显示黑色字体
{
hF_black=CreateFont(30,//字体的高度
0,0,0,
FW_NORMAL,//字体的粗度
0,//定义斜体
0,0,
GB2312_CHARSET,
OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS,
DEFAULT_QUALITY,
DEFAULT_PITCH,
"正常");
SelectObject(hdc,hF_black);
GetTextMetrics(hdc,&tm);
for(i=0;i<26;i++)
{
SetTextColor(hdc,RGB(0,0,0));
TextOut(hdc,(25-i)*tm.tmAveCharWidth,LY+3*tm.tmHeight+tm.tmInternalLeading,&str[25-i],1);
}
}
else
{
hF_blue=CreateFont(20,//字体的高度
0,
0,
0,
FW_HEAVY,//字体的粗度
1,//定义斜体
0,
0,
GB2312_CHARSET,
OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS,
DEFAULT_QUALITY,
DEFAULT_PITCH,
"粗体字");
SelectObject(hdc,hF_blue);
GetTextMetrics(hdc,&tm);
for(i=0;i<26;i++)
{
SetTextColor(hdc,RGB(0,0,255));
TextOut(hdc,(25-i)*tm.tmAveCharWidth,LY+3*tm.tmHeight+tm.tmInternalLeading,&str[25-i],1);
}
}
EndPaint(hWnd,&ps);
break;
caseWM_TIMER:
n++;
if(n==26)
n=0;
RECTrc;
GetClientRect(hWnd,&rc);//获取当前窗口可用区
InvalidateRect(hWnd,&rc,true);//对该区域进行刷新
UpdateWindow(hWnd);
break;
caseWM_KEYDOW