可视化编程实验报告Word格式文档下载.docx
《可视化编程实验报告Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《可视化编程实验报告Word格式文档下载.docx(24页珍藏版)》请在冰豆网上搜索。
目的:
用API创建一个基本窗口
本实验运用Windows编程的基础知识,包括窗口、事件驱动的基本概念等,进一步了解认识Windows编程中经常用到的“消息”以及对“消息”的响应,及Windows程序的结构框架。
通过这些内容的学习及本次实验的练习,加深对这些知识点的理解及在实际编程中的应用。
2.主要仪器设备及耗材
PC一台、MicrosoftVisualC++6.0
第二部分:
实验过程记录(可加页)(包括实验原始数据记录,实验现象记录,实验过程发现的问题等)
#include<
windows.h>
LRESULTCALLBACKWndProc(HWNDhwnd,UINTmessage,WPARAMwParam,LPARAMlParam);
//函数原型说明
intWINAPIWinMain(HINSTANCEhInstance,HINSTANCEhPreInstance,LPSTRlpCmdLine,intnCmdShow)//入口函数
{HWNDhwnd;
MSGMsg;
WNDCLASSwndclass;
wndclass.style=0;
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="
基本窗口"
;
if(!
RegisterClass(&
wndclass))//窗口的注册
{
MessageBeep(0);
returnFALSE;
}
hwnd=CreateWindow//创建窗口
("
"
My-Windows"
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
NULL,
hInstance,
NULL);
ShowWindow(hwnd,nCmdShow);
//显示窗口
UpdateWindow(hwnd);
while(GetMessage(&
Msg,NULL,0,0))
TranslateMessage(&
Msg);
DispatchMessage(&
returnMsg.wParam;
}
longWINAPIWndProc(HWNDhwnd,UINTmessage,WPARAMwParam,LPARAMlParam)//窗口函数
{
switch(message)
caseWM_DESTROY:
PostQuitMessage(0);
break;
default:
returnDefWindowProc(hwnd,message,wParam,lParam);
return0;
第三部分结果与讨论(可加页)
一、实验结果分析(包括数据处理、实验现象分析、影响因素讨论、综合分析和结论等)
实验运行结果如下:
二、小结、建议及体会
通过这次的实验,我学习掌握了如何用API函数来创建一个基本的窗口,在实践中掌握了Windows编程的基础知识和应用,认识了解了很多专业术语,并且对可视化程序设计的学习有了一个大概的概念,但是觉得这些函数还是有些复杂,需要多上机实验才可以更好的掌握。
基于API编程
(一)
在窗口中画一个旋转的风车,风车中有三个叶片,颜色分别为红、黄和蓝,叶片外侧有一个外接圆。
运用所学的图形设备接口的基本概念以及Windows应用程序中绘图的主要步骤和绘图函数,并查阅相关资料和书籍,完成本实验的要求,掌握Windows应用程序中有关图形的编程技术及其应用。
旋转小风车的源程序代码:
#include<
math.h>
#definePI3.141592654
intn=0;
longWINAPIWndProc(HWNDhWnd,
UINTiMessage,
UINTwParam,
LONGlParam);
//消息处理函数声明.
BOOLInitWindowsClass(HINSTANCEhInstance);
//初始化窗口类声明
BOOLInitWindows(HINSTANCEhInstance,intnCmdShow);
//初始化窗口声明.
HWNDhWndMain;
intWINAPIWinMain(HINSTANCEhInstance,
HINSTANCEhPrevInstance,
LPSTRlpCmdLine,
intnCmdShow)//主函数
HWNDhwnd;
WNDCLASSwn;
charlpszClassName[]="
窗口"
charlpszTitle[]="
My_Windows"
wn.style=0;
wn.lpfnWndProc=WndProc;
wn.cbClsExtra=0;
wn.cbWndExtra=0;
wn.hInstance=hInstance;
wn.hIcon=LoadIcon(NULL,IDI_APPLICATION);
wn.hCursor=LoadCursor(NULL,IDC_ARROW);
wn.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
wn.lpszMenuName=NULL;
wn.lpszClassName=lpszClassName;
RegisterClass(&
wn);
hwnd=CreateWindow(lpszClassName,lpszTitle,WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,hInstance,NULL);
Msg,0,0,0))
//消息循环.
UINTmessage,
LONGlParam)//消息处理函数.
HDChdc;
PAINTSTRUCTps;
HPENhp;
HBRUSHhb;
intx,y;
intjiaodu;
caseWM_PAINT:
hdc=BeginPaint(hWnd,&
ps);
SetMapMode(hdc,MM_ANISOTROPIC);
SetWindowExtEx(hdc,400,300,NULL);
//设置窗口逻辑单位,所谓逻辑单位,即在比例一致情况下选择足够大的区域
SetViewportExtEx(hdc,550,450,NULL);
SetViewportOrgEx(hdc,300,200,NULL);
Ellipse(hdc,-100,100,100,-100);
hp=(HPEN)GetStockObject(BLACK_PEN);
hb=CreateSolidBrush(RGB(255,0,0));
SelectObject(hdc,hb);
SelectObject(hdc,hp);
jiaodu=int(n*PI/10);
x=int(50*cos(jiaodu));
y=int(50*sin(jiaodu));
Pie(hdc,x-50,y-50,x+50,y+50,0,0,2*x,2*y);
hb=CreateSolidBrush(RGB(0,255,0));
x=int(50*cos(jiaodu+2*PI/3));
y=int(50*sin(jiaodu+2*PI/3));
hb=CreateSolidBrush(RGB(0,0,255));
x=int(50*cos(jiaodu+4*PI/3));
y=int(50*sin(jiaodu+4*PI/3));
n++;
Sleep(100);
InvalidateRect(hWnd,NULL,1);
EndPaint(hWnd,&
return0;
//处理绘图消息.
PostQuitMessage(0);
return(DefWindowProc(hWnd,message,wParam,lParam));
return(0);
程序运行结果如下:
通过使用API函数在窗口中对旋转风车的绘制,加深了对Windows应用程序中绘图函数应用的理解,掌握了一些基本的有关图形的编程技术及其应用。
这次实验让我体会到VC++可视化编程功能的强大,同时也体会到它的复杂,方法函数的繁多,而且很多函数的定义及使用课本上没有,需要主动查阅一些有关资料,多参考分析网上现有的一些经典源代码,加深对这些常用方法函数是理解和使用。
基于API编程
(二)
设计一个键盘程序,当按Ctrl键时,表明要画椭圆;
当按Shift键时,表明要画矩形。
然后单击向右箭头键,椭圆或矩形的长度加10;
单击向下箭头时,椭圆或矩形的高度加10;
单击Home键时,整个圆形或矩形向左移动;
单击End键时,整个圆形或矩形向右移动;
单击PageUp键时,整个圆形或矩形向上移动;
单击PageDown键时,整个圆形或矩形向下移动。
通过Windows应用程序中常见的键盘及鼠标的操作及其编程方法和对鼠标操作的响应知识,实现上述实验的目的,在实验中学习掌握在Windows应用程序中有关键盘和鼠标的应用和操作。
PC一台、VC6.0
1.键盘程序源代码
stdlib.h>
string.h>
BOOLWINPAIWndProc(HWNDhWnd,UINTiMessage,UINTwParam,LONGlParam);
BOOLInitWindows(HINSTANCEhInstance,intnCmdShow);
//窗口显示
intWINAPIWinMain(HINSTANCEhInstance,HINSTANCEhPrevInstance,LPSTRlpCmdLine,intnCmdShow)
MSGMessage;
InitWindowsClass(hInstance))
returnFALSE;
InitWindows(hInstance,nCmdShow))
Message,0,0,0))
TranslateMessage(&
Message);
DispatchMessage(&
returnMessage.wParam;
LRESULTCALLBACKWndProc(HWNDhWnd,UINTiMessage,UINTwParam,LONGlParam)
HDChdc;
HPENhp;
staticintc,s,left,top,right,bottom;
HBRUSHhb;
PAINTSTRUCTps;
switch(iMessage)
caseWM_KEYDOWN:
if(wParam==VK_CONTROL)
{
c=1;
s=0;
left=0;
right=50;
top=0;
bottom=50;
InvalidateRect(hWnd,NULL,1);
}
elseif(wParam==VK_SHIFT)
s=1;
c=0;
InvalidateRect(hWnd,NULL,1);
elseif(wParam==VK_RIGHT)
right=right+10;
if(s==1||c==1)
{
InvalidateRect(hWnd,NULL,1);
}
elseif(wParam==VK_DOWN)
bottom=bottom+10;
elseif(wParam==VK_PRIOR)
{
top=top-10;
bottom=bottom-10;
elseif(wParam==VK_NEXT)
top=top+10;
elseif(wParam==VK_HOME)
{
left=left-10;
right=right-10;
elseif(wParam==VK_END)
left=left+10;
SetMapMode(hdc,MM_TEXT);
hp=(HPEN)GetStockObject(BLACK_PEN);
hb=(HBRUSH)GetStockObject(WHITE_BRUSH);
SelectObject(hdc,hb);
if(c==1)
{
Ellipse(hdc,left,top,right,bottom);
if(s==1)
{
Rectangle(hdc,left,top,right,bottom);
};
DeleteObject(hp);
break;
return(DefWindowProc(hWnd,iMessage,wParam,lParam));
BOOLInitWindows(HINSTANCEhInstance,intnCmdShow)
HWNDhWnd;
hWnd=CreateWindow("
键盘响应"
"
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
0,
NULL,
hInstance,
NULL);
hWnd)
ShowWindow(hWnd,nCmdShow);
UpdateWindow(hWnd);
returnTRUE;
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="
WndClass.lpszMenuName=NULL;
WndClass.style=0;
returnRegisterClass(&
WndClass);
通过这次实验,熟悉了Windows应用程序中常见的键盘及鼠标的操作及其编程方法和对鼠标操作的响应,对API编程的应用有了跟深入广泛的了解,体会到上机多做实验的重要性,很多知识只有在实践中才能真正理解并转化为自己的知识。
基于MFC编程
(一)
用MFC的向导创建编辑框,在编辑框中实现算术加、减、乘和除的运算。
本实验应用所学的编辑框控件知识,通过编程简易计算器,熟悉使用MFC编程的内容及步骤,加深对MFC应用的理解和认识。
2.主要仪器设备及耗材
1.用MFC编程简易计算器的主要源程序代码:
voidCMyDlg:
:
OnButton6()
OnOK();
OnButton5()重置
m_e1=0;
m_e2=0;
i=0;
m_result.Format("
%d"
i);
UpdateData(FALSE);
OnButton4()除法
UpdateData();
if(m_e2==0)
AfxMessageBox("
分母不能为0!
"
else
float(i)=float(m_e1)/float