可视化编程实验报告

时间:2021-01-15 14:29:23 手机站 来源:网友投稿

学生学号

实验课成绩

武汉理工大学

学生实验报告书

实验课程名称 可视化编程

开 课学院 计算机科学与技术学院

指导老师姓名

学生姓名

学生专业班级

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) 皑氏应尺色

三、实验小结、建议及体会

通过这次试验体会菜单的制作以及画笔的使用方法, 也初步掌握了菜单的修改和一些按钮的设

置。

推荐访问:实验报告 可视化 编程 实验 可视化编程实验报告

版权声明 :以上文章中选用的图片文字均来源于网络或用户投稿 ,如果有侵权请立即联系我们 , 我们立即删除 。