可视化编程实验报告Word文档格式.docx
《可视化编程实验报告Word文档格式.docx》由会员分享,可在线阅读,更多相关《可视化编程实验报告Word文档格式.docx(17页珍藏版)》请在冰豆网上搜索。
实验分析与设计(可加页)
一、实验内容描述(问题域描述)
要求:
设计一个键盘程序,当按CTRL键时,表明要画椭圆;
当按下Shift键时,表明要画
矩形。
然后单击向w键,椭圆或矩形的长度向上加10;
单击s时,椭圆或矩形的高度向下加10;
单击a键时,椭圆或矩形的长度向左加10;
单击d时,椭圆或矩形的高度向右加10;
单击←键时,整个圆形或矩形向左移动,单击→键时,整个圆形或矩形向右移动;
单击↑键时,整个圆形或矩形向上移动;
单击↓建时,矩形or圆形向下移动。
二、实验基本原理与设计(包括实验方案设计,实验手段的确定,试验步骤等,用硬件逻辑或者算法描述)
#include<
windows.h>
stdlib.h>
string.h>
longWINAPIWndProc(HWNDhWnd,UINTiMessage,UINTwParam,LONGlParam);
BOOLInitWindowsClass(HINSTANCEhInstance);
BOOLInitWindows(HINSTANCEhInstance,intnCmdShow);
HWNDhWndMain;
RECTrect1;
intWINAPIWinMain(HINSTANCEhInstance,
HINSTANCEhPrevInstance,
LPSTRlpCmdLine,
intnCmdShow)
{MSGMessage;
if(!
InitWindowsClass(hInstance))
returnFALSE;
InitWindows(hInstance,nCmdShow))
while(GetMessage(&
Message,0,0,0))
{
TranslateMessage(&
Message);
DispatchMessage(&
}
returnMessage.wParam;
}
longWINAPIWndProc(HWNDhWnd,
UINTiMessage,
UINTwParam,
LONGlParam)
{HDChDC;
staticBOOLbCircle=FALSE,bRect=FALSE;
PAINTSTRUCTps;
switch(iMessage)
caseWM_KEYDOWN:
if(wParam==VK_CONTROL)
{
bCircle=TRUE;
bRect=FALSE;
rect1.left=0;
rect1.right=0;
rect1.top=0;
rect1.bottom=0;
}
elseif(wParam==VK_SHIFT)
bRect=TRUE;
bCircle=FALSE;
rect1.right=0;
elseif(wParam==VK_RIGHT)
rect1.right+=10;
if(bRect==TRUE||bCircle==TRUE)
{
InvalidateRect(hWnd,NULL,TRUE);
}
elseif(wParam==VK_DOWN)
rect1.bottom+=10;
elseif(wParam==VK_PRIOR)
{
rect1.top-=10;
rect1.bottom-=10;
elseif(wParam==VK_NEXT)
rect1.top+=10;
elseif(wParam==VK_HOME)
rect1.left-=10;
rect1.right-=10;
elseif(wParam==VK_END)
rect1.left+=10;
break;
caseWM_PAINT:
hDC=BeginPaint(hWnd,&
ps);
if(bCircle==TRUE)
{
Ellipse(hDC,rect1.left,rect1.top,rect1.right,rect1.bottom);
if(bRect==TRUE)
{Rectangle(hDC,rect1.left,rect1.top,rect1.right,rect1.bottom);
EndPaint(hWnd,&
caseWM_DESTROY:
PostQuitMessage(0);
return0;
default:
return(DefWindowProc(hWnd,iMessage,wParam,lParam));
return0;
BOOLInitWindows(HINSTANCEhInstance,intnCmdShow)
{HWNDhWnd;
hWnd=CreateWindow("
6_4"
"
鼠标显示实例程序"
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
0,
NULL,
hInstance,
NULL);
hWnd)returnFALSE;
hWndMain=hWnd;
ShowWindow(hWnd,nCmdShow);
UpdateWindow(hWnd);
returnTRUE;
BOOLInitWindowsClass(HINSTANCEhInstance)
{WNDCLASSWndClass;
WndClass.cbClsExtra=0;
WndClass.cbWndExtra=0;
WndClass.hCursor=LoadCursor(NULL,IDC_ARROW);
WndClass.hIcon=LoadIcon(NULL,IDI_APPLICATION);
WndClass.hInstance=hInstance;
WndClass.lpfnWndProc=WndProc;
WndClass.lpszClassName="
;
WndClass.lpszMenuName=NULL;
returnRegisterClass(&
WndClass);
三.主要仪器设备及耗材
电脑VC++6.0软件
第二部分:
实验调试与结果分析(可加页)
一、调试过程(包括调试方法描述、实验数据记录,实验现象记录,实验过程发现的问题等)
最开头掉了#include<
windows>
导致程序错误,加上后,运行良好。
二、实验结果及分析(包括结果描述、实验现象分析、影响因素讨论、综合分析和结论等)
结果如图:
计算器设计
用MFC的向导创建编辑框,在编辑框中实现算术加、减、乘和除的运算。
用classwizard对各按钮以及编辑框进行添加变量
然后在jisuanDlg.cpp文件开头定义变量
最后在下方添加下列代码
voidCJisuanDlg:
:
OnButton1()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
UpdateData(TRUE);
char*p1=m_e1.GetBuffer(m_e1.GetLength());
char*p2=m_e2.GetBuffer(m_e2.GetLength());
floata1;
a1=atof(p1);
floata2;
a2=atof(p2);
a3=a1+a2;
m_e3.Format("
%f"
a3);
UpdateData(FALSE);
OnButton2()
a3=a1-a2;
OnButton3()
a3=a1*a2;
OnButton4()
a3=a1/a2;
OnButton9()
{UpdateData(TRUE);
m_e1=_T("
"
);
m_e2=_T("
m_e3=_T("
三、主要仪器设备及耗材
电脑VC++
一开始没有加入UpdateData(TRUE)UpdateData(FALSE)等代码,导致计算结果无法刷新与显示。
这段代码是由其他同学在程序中找到的,灰体字,一开始没怎么注意,后来才发现可以执行清零功能
三、实验小结、建议及体会
通过这次上机实验,初步掌握了mfc编写对话框的基本方法,通过编写一个简单的小程序使自己对vc++有了更多的认识,对mfc编程有了更深的体会,熟悉了使用classwizard添加函数以及变量的方法,认识到了mfc与api相比的方便之处。
菜单设计
MFC编程菜单应用实验内容:
编写一个单文档应用程序在主菜单中增加【曲线】、【线宽】和【颜色】三个菜单项,【曲线】菜单中包含【正弦】和【余弦】两个菜单项;
【线宽】菜单中包含【线宽2】和【线宽3】两个菜单项;
【颜色】菜单中包含【红色】和【蓝色】两个菜单项
二、基本原理与设计(包括实验方案设计,实验手段的确定,试验步骤等,用硬件逻辑或者算法描述)
voidCMainFrame:
OnMenuitem32771()
Addyourcommandhandlercodehere
jp=0;
CClientDCdc(this);
CRectcr;
GetClientRect(&
cr);
dc.FillSolidRect(cr,RGB(255,255,255));
dc.SelectStockObject(BLACK_PEN);
for(intj=0;
j<
100;
j++)//生成正弦曲线的点坐标
lpSin[j].x=(long)(j*2*Pi/100*90);
lpSin[j].y=(long)(dfRange*sin(j*2*Pi/100))+100;
dc.Polyline(lpSin,100);
OnMenuitem32772()
jp=1;
lpSin[j].y=(long)(dfRange*cos(j*2*Pi/100))+100;
OnMenuitem32773()
{CClientDCdc(this);
HPENhp;
hp=CreatePen(PS_INSIDEFRAME,6,RGB(0,0,0));
dc.SelectObject(hp);
if(jp==1)
{for(intj=0;
else
for(intj=0;
OnMenuitem32775()
hp=CreatePen(PS_INSIDEFRAME,6,RGB(0,0,255));
{lpSin[j].x=(long)(j*2*Pi/100*90);
OnMenuitem32776()
hp=CreatePen(PS_INSIDEFRAME,6,RGB(255,0,0));
电脑VC++6.0
由于菜单的认识还不是很了解只能初步设计下菜单按键的响应函数。
在执行画笔时,每一次都要重新写一遍函数。
希望以后有待加强
通过这次试验体会菜单的制作以及画笔的使用方法,也初步掌握了菜单的修改和一些按钮的设置。