学生学号
实验课成绩
武汉理工大学
学生实验报告书
实验课程名称 可视化编程
开 课学院 计算机科学与技术学院
指导老师姓名
学生姓名
学生专业班级
2010
2011学年第二学期
实验课程名称: 可视化编程
实验项目名称
API编程实现
实验成绩
实验者
专业班级
组别
同组者
实验日期
年 月曰
第一部分:实验分析与设计(可加页)
、实验内容描述(问题域描述)
要求:设计一个键盘程序,当按 CTRL键时,表明要画椭圆;当按下 Shift键时,表明要画
矩形。然后单击向 w键,椭圆或矩形的长度向上加 10;单击s时,椭圆或矩形的高度向下
加10;单击a键时,椭圆或矩形的长度向左加 10;单击d时,椭圆或矩形的高度向右加 10;单击—键时,整个圆形或矩形向左移动,单击t键时,整个圆形或矩形向右移动;单击 f键时,整个圆形或矩形向上移动;单击J建时,矩形 or圆形向下移动。
二、实验基本原理与设计(包括实验方案设计,实验手段的确定,试验步骤等,用硬件逻辑或 者算法描述)
#in elude <win dows.h>
#i nclude <stdlib.h>
#in elude <stri ng.h>
long WINAPI WndProc(HWND hWnd,UINT iMessage,UINT wPara m,L ONG IParam);
BOOL InitWin dowsClass(HINSTANCE hI nsta nee);
BOOL InitWin dows(HINSTANCE hln sta nee, i nt n CmdShow); HWND hWndMa in;
RECT reet1;
int WINAPI WinM ai n( HINSTANCE hI nsta nee,
HINSTANCE hPrevI nsta nee,
LPSTR lpCmdLi ne, int n CmdShow)
{MSG Message;
if(!I nitWin dowsClass(hI nsta nee))
return FALSE;
if(!I nitWin dows(hI nsta nee, nCmdShow))
return FALSE;
while(GetMessage(&Message,0,0,0)) {
Tran slateMessage(&Message); DispatehMessage(&Message);
}
return Message.wParam;
}
long WINAPI WndProe(HWND hWnd,
UINT iMessage,
UINT wParam,
LONG IParam)
{HDC hDC;
static BOOL bCircle=FALSE,bRect=FALSE;
PAINTSTRUCT ps;
switch(iMessage)
{
case WM_KEYDOWN:
if(wParam == VK_CONTROL)
{
bCircle = TRUE;
bRect = FALSE;
rect1.left = 0;
rect1.right = 0;
rect1.top = 0; rect1.bottom = 0;
}
else if(wParam == VK_SHIFT)
{
bRect = TRUE;
bCircle = FALSE;
rect1.left = 0;
rect1.right = 0;
rect1.top = 0; rect1.bottom = 0;
}
else if(wParam == VK_RIGHT)
{
rect1.right +=10;
if(bRect == TRUE || bCircle == TRUE)
{
In validateRect(hWnd,NULL,TRUE);
}
}
else if(wParam == VK_DOWN)
{
rect1.bottom +=10;
if(bRect == TRUE || bCircle == TRUE) {
In validateRect(hWnd,NULL,TRUE);
}
}
else if(wParam == VK_PRIOR)
{
rect1.top -=10;
rect1.bottom -=10;
if(bRect == TRUE || bCircle == TRUE)
{
In validateRect(hWnd,NULL,TRUE);
}
}
else if(wParam == VK_NEXT)
{
rect1.top +=10;
rect1.bottom +=10;
if(bRect == TRUE || bCircle == TRUE)
{
In validateRect(hWnd,NULL,TRUE);
}
}
else if(wParam == VK_HOME)
{
rect1.left -=10;
rect1.right -=10;
if(bRect == TRUE || bCircle == TRUE)
{
In validateRect(hWnd,NULL,TRUE);
}
}
else if(wParam == VK_END)
{
rect1.left +=10;
rect1.right +=10;
if(bRect == TRUE || bCircle == TRUE)
{
In validateRect(hWnd,NULL,TRUE);
}
}
break;
case WM_PAINT:
hDC = Begi nPain t(hWnd,&ps);
if(bCircle == TRUE)
{
Ellipse(hDC,rect1.left,rect1.top,rect1.right,rect1.bottom);
}
if(bRect == TRUE)
{
Recta ngle(hDC,rect1.left,rect1.top,rect1.right,rect1.bottom);
}
En dPai nt(hWnd,&ps);
break;
case WM_DESTROY:
PostQuitMessage(O);
return 0;
default:
retur n( DefWi ndowProc(hWnd,iMessage,wParam,IParam)); }
return 0;
}
BOOL InitWin dows(HINSTANCE hln sta nee, i nt n CmdShow) {HWND hWnd;
hWnd=CreateWi ndow("6_4",
"鼠标显示实例程序",
WS_OVERLAPPEDWINDOW, CW_USEDEFAULT,
0,
CW_USEDEFAULT,
0,
NULL,
NULL, hln sta nee, NULL);
if(!hWnd) return FALSE;
hWndMa in=hWnd;
ShowWi ndow(hWnd, nCmdShow);
UpdateWi ndow(hWnd);
return TRUE;
}
BOOL InitWin dowsCIass(HINSTANCE hln sta nee)
{ WNDCLASS WndCIass;
WndClass.cbClsExtra=O;
WndClass.cbWndExtra=O;
WndCIass.hCursor=LoadCursor(NULL,IDC_ARROW);
WndCIass.hIeo n=Loadlco n(NULL,IDI_APPLICATION);
WndCIass.hI nsta nce=hl nsta nee;
WndClass.lpfnWndProc=WndProc;
WndClass.lpszClassName="6_4";
WndCIass.IpszMe nu Name=NULL;
return RegisterCIass(&WndCIass);
}
三.主要仪器设备及耗材
电脑VC++6.0软件
第二部分:实验调试与结果分析(可加页)
一、 调试过程(包括调试方法描述、实验数据记录,实验现象记录,实验过程发现的问题等) 最开头掉了 #include<windows>导致程序错误,加上后,运行良好。
二、 实验结果及分析(包括结果描述、实验现象分析、影响因素讨论、综合分析和结论等)
结果如图:
■ Si吕昙示丈翌糧序
实验项目名称
实验者
同组者
计算器设计
专业班级
实验成绩
组别
实验日期 年 月曰
第一部分:实验分析与设计(可加页)
、实验内容描述(问题域描述) 用MFC的向导创建编辑框,在编辑框中实现算术加、减、乘和除的运算。
二、实验基本原理与设计(包括实验方案设计,实验手段的确定,试验步骤等,用硬件逻辑或 者算法描述)
用class wizard 对各按钮以及编辑框进行添加变量
然后在jisuanDlg.cpp 文件开头定义变量
最后在下方添加下列代码
void CJisua nDlg::O nButto n1()
{
// TODO: Add your con trol no tificati on han dler code here UpdateData(TRUE);
char *p1 = m_e1.GetBuffer(m_e1.GetLe ngth());
char *p2 = m_e2.GetBuffer(m_e2.GetLe ngth());
float a1;
a1=atof(p1);
float a2;
a2=atof(p2);
a3=a1+a2;
m_e3.Format("%f",a3);
UpdateData(FALSE);
}
void CJisua nDlg::O nButto n2()
{
UpdateData(TRUE);
char *p1 = m_e1.GetBuffer(m_e1.GetLe ngth());
char *p2 = m_e2.GetBuffer(m_e2.GetLe ngth());
float a1;
a1=atof(p1);
float a2;
a2=atof(p2);
a3=a1-a2;
m_e3.Format("%f",a3);
UpdateData(FALSE);
}
void CJisua nDlg::O nButto n3()
{
UpdateData(TRUE);
char *p1 = m_e1.GetBuffer(m_e1.GetLe ngth());
char *p2 = m_e2.GetBuffer(m_e2.GetLe ngth());
float a1;
a1=atof(p1);
float a2;
a2=atof(p2);
a3=a1*a2;
m_e3.Format("%f",a3);
UpdateData(FALSE);
}
void CJisua nDlg::O nButto n4()
{
UpdateData(TRUE);
char *p1 = m_e1.GetBuffer(m_e1.GetLe ngth());
char *p2 = m_e2.GetBuffer(m_e2.GetLe ngth());
float a1;
a1=atof(p1);
float a2;
a2=atof(p2);
a3=a1/a2;
m_e3.Format("%f",a3);
UpdateData(FALSE);
}
void CJisua nDlg::O nButto n9()
{ UpdateData(TRUE);
// TODO: Add your con trol no tificati on han dler code here m_e1 = _T(””);
m_e2 = _T("");
m_e3 = _T("");
UpdateData(FALSE);}
三、主要仪器设备及耗材
电脑VC++
第二部分:实验调试与结果分析(可加页)
一、调试过程(包括调试方法描述、实验数据记录,实验现象记录,实验过程发现的问题等)
一开始没有加入 UpdateData(TRUE) UpdateData(FALSE) 等代码,导致计算结果无法
刷新与显示。
m_e1 = _T(””);
m_e2 = _T("");
m_e3 = _T("");
这段代码是由其他同学在程序中找到的,灰体字,一开始没怎么注意,后来才发现可以执行清 零功能
、实验结果及分析(包括结果描述、实验现象分析、影响因素讨论、综合分析和结论等)
1
2
3
+
4
5
6
■
1 2
?
1 }
0
等于(-)
C
I L
三、实验小结、建议及体会
通过这次上机实验,初步掌握了 mfc编写对话框的基本方法,通过编写一个简单的小程 序使自己对vc++有了更多的认识,对 mfc编程有了更深的体会,熟悉了使用 class wizard 添
加函数以及变量的方法,认识到了 mfc与api相比的方便之处。
实验项目名称实验者—同组者—
实验项目名称
实验者
—同组者—
菜单设计
专业班级
实验成绩
组别
实验日期 年 月~~日
第一部分:实验分析与设计(可加页)
、实验内容描述(问题域描述)
MFC编程菜单应用
实验内容:编写一个单文档应用程序在主菜单中增加 【曲线】、【线宽】和【颜色】三个菜单项, 【曲线】菜单中包含【正弦】和【余弦】两个菜单项; 【线宽】菜单中包含【线宽 2】和【线
宽3】两个菜单项;【颜色】菜单中包含【红色】和【蓝色】两个菜单项 二、基本原理与设计(包括实验方案设计,实验手段的确定,试验步骤等,用硬件逻辑或者算 法描述)
void CMai nF rame::O nMen uitem32771()
{
// TODO: Add your comma nd han dler code here jp=o;
CClie ntDC dc(this);
CRect cr;
GetClie ntRect (&cr);
dc.FillSolidRect(cr,RGB(255,255,255)); dc.SelectStockObject(BLACK_PEN);
for(int j=O;j<1OO;j++) //生成正弦曲线的点坐标
{
lpSi n[j].x=(lo ng)(j*2*Pi/100*90);
lpS in [j].y=(lo ng)(dfRa nge*s in (j*2*Pi/100))+100;
} dc.P olyli ne(l pSi n,100);
void CMai nF rame::O nMen uitem32772()
{
// TODO: Add your comma nd han dler code here jp=1;
CClie ntDC dc(this);
CRect cr;
GetClie ntRect (&cr);
dc.FillSolidRect(cr,RGB(255,255,255));
dc.SelectStockObject(BLACK_PEN);
for(int j=0;j<100;j++) //生成正弦曲线的点坐标
{
IpSi n[j].x=(lo ng)(j*2*Pi/100*90);
IpS in [j].y=(lo ng)(dfRa nge*cos(j*2*Pi/100))+100;
}
dc.P olyli ne(l pSi n,100);
}
void CMai nF rame::O nMen uitem32773()
{CClie ntDC dc(this);
CRect cr;
GetClie ntRect (&cr);
// TODO: Add your comma nd han dler code here
HPEN hp;
hp=CreatePe n(PS_INSIDEFRAME,6,RGB(0,0,0)); dc.SelectObject(hp);
if(jp==1)
{for(int j=0;j<100;j++) //生成正弦曲线的点坐标
{
lpSi n[j].x=(lo ng)(j*2*Pi/100*90);
lpS in [j].y=(lo ng)(dfRa nge*cos(j*2*Pi/100))+100;
}
}
else
{
for(int j=0;j<100;j++) //生成正弦曲线的点坐标
{
lpSi n[j].x=(lo ng)(j*2*Pi/100*90);
lpS in [j].y=(lo ng)(dfRa nge*s in (j*2*Pi/100))+100;
}
}
dc.P olyli ne(l pSi n,100);
}
void CMai nF rame::O nMen uitem32775()
{
// TODO: Add your comma nd han dler code here
CClie ntDC dc(this);
CRect cr;
GetClie ntRect (&cr);
// TODO: Add your comma nd han dler code here
HPEN hp;
hp=CreatePe n(PS_INSIDEFRAME,6,RGB(0,0,255));
dc.SelectObject(hp);
if(jp==1)
{for(int j=O;j<1OO;j++) //生成正弦曲线的点坐标
{lpSi n[j].x=(lo ng)(j*2*Pi/100*90);
lpS in [j].y=(lo ng)(dfRa nge*cos(j*2*Pi/100))+100;
}
}
else
{
for(int j=0;j<100;j++) //生成正弦曲线的点坐标
{lpSi n[j].x=(lo ng)(j*2*Pi/100*90);
lpS in [j].y=(lo ng)(dfRa nge*s in (j*2*Pi/100))+100;
}
}
dc.P olyli ne(l pSi n,100);
}
void CMai nF rame::O nMen uitem32776()
{CClie ntDC dc(this);
CRect cr;
GetClie ntRect (&cr);
HPEN hp;
hp=CreatePe n(PS_INSIDEFRAME,6,RGB(255,0,0));
dc.SelectObject(hp);
if(jp==1)
{for(int j=0;j<100;j++) //生成正弦曲线的点坐标
{lpSi n[j].x=(lo ng)(j*2*Pi/100*90);
lpS in [j].y=(lo ng)(dfRa nge*cos(j*2*Pi/100))+100;
}
}
else
{
for(int j=0;j<100;j++) //生成正弦曲线的点坐标
{lpSi n[j].x=(lo ng)(j*2*Pi/100*90);
lpS in [j].y=(lo ng)(dfRa nge*s in (j*2*Pi/100))+100;
}
}
dc.P olyli ne(l pSi n,100);
}
三、主要仪器设备及耗材
电脑 VC ++6.0
第二部分:实验调试与结果分析(可加页)
一、 调试过程(包括调试方法描述、实验数据记录,实验现象记录,实验过程发现的问题等)
由于菜单的认识还不是很了解 只能初步设计下菜单按键的响应函数。
在执行画笔时,每一次都要重新写一遍函数。希望以后有待加强
二、 实验结果及分析(包括结果描述、实验现象分析、影响因素讨论、综合分析和结论等)
文件旧(V) WSO(H)匪察锲S嚴色
交悯F)啊⑹?(V) 皑氏应尺色
三、实验小结、建议及体会
通过这次试验体会菜单的制作以及画笔的使用方法, 也初步掌握了菜单的修改和一些按钮的设
置。