




已阅读5页,还剩13页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
学 院电子信息学院班 级学 号姓 名摘要在高级编程技术中的Windows界面编程的SDK编程框架下的软件开发编程。此程序编写了Windows界面,可以打开菜单,实现运行弹出对话框,输入简谐运动初相位X0,初速度V0和角频率W,并选择查看图像模式sin和cos曲线,计算得出简谐振动方程,绘出简谐振动图像。还有计算简谐运动能流密度I。基于教材中的利用Heron公式编写计算三角形面积的窗口程序,重新编写一个窗口程序计算物理上简谐运动方程和能流密度。并且有所创新,加了一个图形输出,是根据简谐运动方程绘制曲线,将单调的界面丰富了,产生了可视化的效果,更加人性化。此程序虽没有动态效果,但能把静态完整的表示出来,数形结合,更易理解,明白,有着较强的实用性。可做物理演示程序,更加灵活地表现出物理现象。 目录1 摘要31.1 设计题目31.2 设计内容31.3 开发工具31.4 应用平台32 详细设计32.1 程序结构32.2 主要功能42.3 函数实现42.4 开发日志53 程序调试及运行63.1 程序运行结果63.2 程序使用说明73.3 程序开发总结74 附件(源程序)81 摘要1.1 设计题目界面编程简谐运动1.2 设计内容基于Windows界面编程下的SDK编程框架,设计一个带有对话框、GDI图形输出的Windows窗口的程序,实现求解简谐运动方程,能流密度,绘制简谐振动曲线。运行程序,初始化,X0=V0=W=1时的简谐运动方程和简谐振动曲线。当点击“运行|计算绘图”时,弹出对话框对简谐运动初相位X0,初速度V0和角频率W进行修改,点击“确认”,就能计算出简谐运动方程,能流密度,绘制简谐振动曲线,这些结果在窗口显示。1.3 开发工具Visual C+ 6.0和Win32SDKApp1.4 应用平台Windows 2000/XP/Vista 32位2 详细设计2.1 程序结构一、程序的整体结构首先定义资源头文件resource.h;在进行资源描述文件,此过程可通过可视化操作;正式进入编写程序代码: 1、由Win32SDKApp自动生成的SDK编程框架: 头文件 包含所有头文件或链接库文件 全局定义 应用实例、主窗口变量、数据结构等全局定义,固定不变 消息处理函数原型 给出所有消息处理函数的原型,增加/删除消息处理时变动 消息映射表宏定义 定义消息映射表,增加/删除消息处理时变动 窗口过程 窗口过程函数的实现,固定不变 注册窗口类 注册窗口类函数的实现,除非修改窗口属性,一般不动 初始化窗口 初始化窗口函数的实现,除非修改窗口初始化值,一般不动 消息循环 Windows应用程序主消息循环,一般不动 主函数 Windows应用程序基本结构,一般不动 消息处理函数实现 在这编写消息处理函数 2、再对SDK编程框架进行修改: 设置了快捷键就必须对消息循环函数修改 在编写消息处理函数之前: 在消息处理函数原型模块中加入要添加的消息处理函数(如WM_COMMAND、 WM_ONPAIT) 在消息映射表模块增加该消息映射 在消息处理函数实现模块中给出该消息处理函数的实现 如果消息处理函数之间有共享使用的变量,则将它定义为全局变量。 如果消息处理函数需要保持数据,则将它定义为静态局部变量。 由于增加了对话框,需加一个CALLBACK DlgProc对话框过程2、 程序的流程 在WM_COMMAND命令函数中,打开“运行|计算绘图”时,弹出对话框,CALLBACK DlgProc 对话框过程函数运行: 初始化时,将X0、V0、W的值给三个编辑框; 当按“确定”键重新从三个编辑框获取数据,此时WM_COMMAND命令函数中接到命令, 重绘窗口。 在WM_ONPAIT 重绘消息处理函数里,进行数据计算,存入文本,在输出文本。 就这样实现了一次确定功能 2.2 主要功能一、程序实现了计算物理上简谐运动方程和能流密度。 1、这个通过C语言编写,在定义变量时特别注意: 如果消息处理函数之间有共享使用的变量,则将它定义为全局变量,此处用了一个结构体 数据类型的全局变量struct WAVE确定波的三个特性。CALLBACK DlgProc与WM_ONPAIT 共用struct WAVE。 如果消息处理函数需要保持数据,则将它定义为静态局部变量。定义char buf200;const char szTitle=简谐曲线; 2、sprintf函数将数据写进文本,通过调用Windows函数中的TextOut可在窗口中实现输出文本二、程序实现了对简谐运动曲线的绘制。 Windows通过图形设备接口GDI对图形输出进行支持。调用MoveToEx和LineTo画线函数、 SetPixel画点函数。再通过for循环结构对图形的线、点连续输出,会出简谐运动曲线。2.3 函数实现在这就写一下与SDK编程框架不同的地方:一、消息循环函数 添加快捷键代码 HACCEL hAccelTable; hAccelTable=LoadAccelerators(hInst,(LPCTSTR)IDR_APP);二、消息处理函数原型 添加函数原型 LRESULT OnPaint(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam); LRESULT OnCommand(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam);三、消息映射表宏定义 添加函数映射 ON_MSG(WM_PAINT, OnPaint) ON_MSG(WM_COMMAND, OnCommand) 四、消息处理函数 WM_ONPAIT 重绘消息处理函数 独立自主编写 1、如果消息处理函数之间有共享使用的变量,则将它定义为全局变量,此处用了一个结构体 数据类型的全局变量struct WAVE确定波的三个特性。CALLBACK DlgProc与WM_ONPAIT 共用struct WAVE。 如果消息处理函数需要保持数据,则将它定义为静态局部变量。定义char buf200;const char szTitle=简谐曲线; sprintf函数将数据写进文本,通过调用Windows函数中的TextOut可在窗口中实现输出文本 2、调用MoveToEx和LineTo画线函数、SetPixel画点函数。再通过for循环结构对图形的线、点 连续输出,会出简谐运动曲线。 WM_COMMAND命令函数 添加 int r;switch (LOWORD(wParam) case IDM_RUN: r=DialogBoxParam(hInst,(LPCTSTR)IDD_INPUT,hWnd,DlgProc,(LPARAM)&x);if (r=IDOK)InvalidateRect(hWnd,NULL,TRUE); break; 五、CALLBACK DlgProc对话框过程函数 对照实例编写2.4 开发日志刚开始的时候,先对书上的利用Heron公式编写计算三角形面积的窗口程序例子进行输入调试,发现总通不过,继续排错,发现有好多输入错误,大小写,没有分号等问题,面对错误不要惊慌,毕竟头一次编Windows窗口程序,但我把所有错排完以后,出现了一个问题,输出结果不是我想要的。这时就纠结。不知是哪个数据泄露了,或者不是自己控制。所以只得重新编写,看是哪出问题了。在一次一次的反复尝试中总结了,那些函数是干什么的,怎样值传递。在一次一次的摸索当中,不断的积累,对Windows窗口程序有了新的了解。最后,发现成功了,运行很好。在这基础上,就要涉及开始自己的程序了。首先,确定要干啥,与书上的不要差距太远,就选了一个求解物理上简谐运动方程的算法。在改参数的时候,很容易出错,需要更改好几次。但参数改好的时候,运行计算,结果是真确的。感觉非常好。继续对他进行修改,将对话框的设计的更加合理,增加了图像图标,文字描述,选择框等,再将TITLE名修改为简谐运动,将这些表面工作做好,再将窗口输出文本更加合理看起来更加美观。在进行进一步改进,将图形输出与此程序结合,加一个图形输出,简谐运动曲线的绘制,通过调用MoveToEx和LineTo画线函数、SetPixel画点函数,确定屏幕中心,画坐标轴x轴和y轴,再把坐标轴的刻度标出来,x轴上有红点刻度,线段刻度,清楚;y轴上有峰值线而且标有刻度值随着峰值变动,并且能够调整位置。在对GDI图形输出有足够的认识时,能够轻松地解决效果非常好。 将这些代码编好以后对他进行调试,编译通过,整个程序趋向完善。最终,呈现现在的界面。3 程序调试及运行3.1 程序运行结果程序运行弹出窗口(初始化数据X0=V0=W=1) 点击“运行|计算绘图”弹出对话框(输入初相位X0,初速度V0和角频率W) 点击“确认”刷新窗口(重新计算绘图) /*3.2 程序使用说明1、 运行程序初始化 窗口显示X0=V0=W=1时的简谐运动方程和简谐振动曲线2、 点击“运行|计算绘图”(可以用Ctrl+R快捷键)弹出对话框 首先选择sin和cos曲线类型 然后输入初相位X0,初速度V0和角频率W3、点击“确认”窗口显示计算绘图结果4、运行结束点击“运行|退出”(可用快捷键Alt+X)退出窗口3.3 程序开发总结编写界面编程的收获很多:1、 了解了一些Windows界面编程语言,能够读懂一些程序2、 能够在SDK框架下编写窗口程序3、 能够运用Windows界面编程解决一些实际问题4、 当然还有,编写成功带来的快乐对编写程序的思考:1、其实任何语言都有相同之处,了解其本质;就能很快地掌握另一门语言。 Windows界面编程语言主要都是大写英文字母,大多数是首字母大写。在要用的时候可以直接查找这方面的书籍,很快就知道什么意义怎么用。调用函数也是同样的道理,可以根据要实现的功能来查找相应的函数。可已不用背许多代码。2、 Windows界面编程有着巨大的现实作用,是C语言的延伸和拓展,一个C语言具体应用的实例 可通过Windows界面编程提高C语言的编程能力,同时解决实际问题,来方便生活和学习,将 计算机的作用发挥出来了。发展编程能力,最终达到:灵活自如应用,丰富多彩呈现。4 附件(源程序)Resource.h文件:(资源头文件定义)#define IDI_APP 100#define IDI_APPSMALL 101#define IDR_APP 102#define IDD_DIALOG1 129#define IDD_INPUT 129#define IDR_ACCELERATOR1 130#define IDS_APP_TITLE 1000#define IDC_EDIT1 1000#define IDC_RADIO1 1001#define IDC_EDIT2 1002#define IDC_EDIT3 1003#define IDC_RADIO2 1004#define IDM_RUN 1101#define IDM_FILE_OPEN 1102#define IDM_EXIT 1103#define IDM_ABOUT 1104#define IDC_STATIC -1 #ifdef APSTUDIO_INVOKED#ifndef APSTUDIO_READONLY_SYMBOLS#define _APS_NEXT_RESOURCE_VALUE 131#define _APS_NEXT_COMMAND_VALUE 32771#define _APS_NEXT_CONTROL_VALUE 1003#define _APS_NEXT_SYMED_VALUE 110#endif#endif简谐运动.rc文件:(资源描述文件)#include resource.h#define APSTUDIO_READONLY_SYMBOLS/ Generated from the TEXTINCLUDE 2 resource./#define APSTUDIO_HIDDEN_SYMBOLS#include windows.h#undef APSTUDIO_HIDDEN_SYMBOLS#include resource.h/#undef APSTUDIO_READONLY_SYMBOLS/ Chinese (中国) resources#if !defined(AFX_RESOURCE_DLL) | defined(AFX_TARG_CHS)#ifdef _WIN32LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED#pragma code_page(936)#endif /_WIN32/ Icon/ Icon with lowest ID value placed first to ensure application icon/ remains consistent on all systems.IDI_APP ICON DISCARDABLE resapp.icoIDI_APPSMALL ICON DISCARDABLE resappsmall.ico/ Menu/IDR_APP MENU DISCARDABLE BEGIN POPUP 运行 BEGIN MENUITEM 计算绘图(&R)tCtrl+R, IDM_RUN MENUITEM SEPARATOR MENUITEM 退出(&X), IDM_EXIT ENDEND / Accelerator/IDR_APP ACCELERATORS MOVEABLE PURE BEGIN R, IDM_RUN, VIRTKEY, CONTROL X, IDM_EXIT, VIRTKEY, ALTENDIDR_ACCELERATOR1 ACCELERATORS DISCARDABLE BEGIN R, IDM_RUN, VIRTKEY, NOINVERTEND#ifdef APSTUDIO_INVOKED/ TEXTINCLUDE/2 TEXTINCLUDE DISCARDABLE BEGIN #define APSTUDIO_HIDDEN_SYMBOLSrn #include windows.hrn #undef APSTUDIO_HIDDEN_SYMBOLSrn #include resource.hrn 0END3 TEXTINCLUDE DISCARDABLE BEGIN rn 0END1 TEXTINCLUDE DISCARDABLE BEGIN resource.h0END#endif / APSTUDIO_INVOKED/ Dialog/IDD_INPUT DIALOG DISCARDABLE 0, 0, 187, 170STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENUCAPTION 计算绘图FONT 10, SystemBEGIN DEFPUSHBUTTON 确定,IDOK,21,139,50,14 PUSHBUTTON 取消,IDCANCEL,112,139,50,14 GROUPBOX 切换,IDC_STATIC,37,12,112,24 EDITTEXT IDC_EDIT1,42,65,111,14,ES_AUTOHSCROLL LTEXT X0:,IDC_STATIC,20,68,12,8 CONTROL COS曲线,IDC_RADIO1,Button,BS_AUTORADIOBUTTON,100,23, 46,10 ICON IDI_APP,IDC_STATIC,0,1,20,20 EDITTEXT IDC_EDIT2,42,93,111,14,ES_AUTOHSCROLL EDITTEXT IDC_EDIT3,42,119,111,14,ES_AUTOHSCROLL LTEXT V0:,IDC_STATIC,19,96,11,8 LTEXT W:,IDC_STATIC,19,122,10,8 CONTROL SIN曲线,IDC_RADIO2,Button,BS_AUTORADIOBUTTON,46,23, 44,10 LTEXT 输入初相位X0、初速度V0、角频率W:,IDC_STATIC,28,46,131, 8END/ DESIGNINFO/#ifdef APSTUDIO_INVOKEDGUIDELINES DESIGNINFO DISCARDABLE BEGIN IDD_INPUT, DIALOG BEGIN LEFTMARGIN, 7 RIGHTMARGIN, 180 TOPMARGIN, 7 BOTTOMMARGIN, 163 ENDEND#endif / APSTUDIO_INVOKED/ String Table/STRINGTABLE DISCARDABLE BEGIN IDS_APP_TITLE 简谐运动END#endif / Chinese (中国) resources/#ifndef APSTUDIO_INVOKED/ Generated from the TEXTINCLUDE 3 resource./ /#endif / not APSTUDIO_INVOKED 简谐运动.c文件:(程序代码)#include #include resource.h#include #include HINSTANCE hInst; HWND hMainWnd; char szWindowTitle=简谐振动; char szWindowClass=SDKWIN32APP; struct WIN_MSGMAP_ENTRY UINT nMessage; LRESULT (*pfn)(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam);#define BEGIN_MESSAGE_MAP() const struct WIN_MSGMAP_ENTRY _messageEntries=#define ON_MSG(nMessage,pfn) nMessage, pfn,#define END_MESSAGE_MAP() 0, NULL ;LRESULT OnPaint(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam);LRESULT OnCommand(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam);BEGIN_MESSAGE_MAP()ON_MSG(WM_PAINT, OnPaint) ON_MSG(WM_COMMAND, OnCommand) END_MESSAGE_MAP()LRESULT CALLBACK WndProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam)WORD i;for(i=0;_messageEntriesi.nMessage; i+) if (message=_messageEntriesi.nMessage) if (message!=WM_DESTROY) return (*_messageEntriesi.pfn)(hWnd,message,wParam,lParam);(*_messageEntriesi.pfn)(hWnd,message,wParam,lParam);break;if (message=WM_DESTROY) PostQuitMessage(0); return 0; return DefWindowProc(hWnd,message,wParam,lParam); ATOM MyRegisterClass(HINSTANCE hInstance)WNDCLASSEX wcex;wcex.cbSize= sizeof(WNDCLASSEX); wcex.style= CS_HREDRAW|CS_VREDRAW|CS_DBLCLKS;wcex.lpfnWndProc= (WNDPROC)WndProc; wcex.cbClsExtra= 0;wcex.cbWndExtra= 0;wcex.hInstance= hInstance; wcex.hIcon= LoadIcon(hInstance,(LPCTSTR)IDI_APP);wcex.hCursor= LoadCursor(NULL,IDC_ARROW); wcex.hbrBackground= (HBRUSH)GetStockObject(WHITE_BRUSH); wcex.lpszMenuName= (LPCSTR)IDR_APP; wcex.lpszClassName= szWindowClass; wcex.hIconSm= LoadIcon(hInstance,(LPCTSTR)IDI_APPSMALL); return RegisterClassEx(&wcex); BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)DWORD ds=WS_OVERLAPPEDWINDOW|WS_CLIPCHILDREN; hInst=hInstance; hMainWnd=CreateWindow(szWindowClass,szWindowTitle,ds,CW_USEDEFAULT,0,CW_USEDEFAULT,0,NULL,NULL,hInstance,NULL); if (!hMainWnd) return FALSE;ShowWindow(hMainWnd, nCmdShow); UpdateWindow(hMainWnd); return TRUE;int Run() MSG msg;HACCEL hAccelTable;hAccelTable=LoadAccelerators(hInst,(LPCTSTR)IDR_APP); while(GetMessage(&msg,NULL,0,0) if (!TranslateAccelerator(msg.hwnd,hAccelTable,&msg) TranslateMessage(&msg); DispatchMessage(&msg); return msg.wParam; int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance, LPSTR lpCmdLine,int nCmdShow)MyRegisterClass(hInstance); if (!InitInstance(hInstance,nCmdShow) return 0; return Run(); struct WAVE double X0,V0,W; x=1,1,1;LRESULT CALLBACK DlgProc(HWND hDlg,UINT message,WPARAM wParam,LPARAM lParam)static struct WAVE *px; char buf200;switch (message) case WM_INITDIALOG: px=(struct WAVE *)lParam; sprintf(buf,%lf,px-X0); SetDlgItemText(hDlg,IDC_EDIT1,buf);sprintf(buf,%lf,px-V0); SetDlgItemText(hDlg,IDC_EDIT2,buf); sprintf(buf,%lf,px-W);SetDlgItemText(hDlg,IDC_EDIT3,buf);return TRUE; case WM_COMMAND:switch (LOWORD(wParam) case IDOK: GetDlgItemText(hDlg,IDC_EDIT1,buf,sizeof(buf);px-X0=atof(buf); GetDlgItemText(hDlg,IDC_EDIT2,buf,sizeof(buf);px-V0=atof(buf); GetDlgItemText(hDlg,IDC_EDIT3,buf,sizeof(buf);px-W=atof(buf);case IDCANCEL: EndDialog(hDlg,LOWORD(wParam);return TRUE; return FALSE; #define PI 3.1415926LRESULT OnPaint(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam)PAINTSTRUCT ps;HDC hdc; RECT rt;int i,mx,my,r=100;char buf200;const char szTitle=简谐曲线;const char T=t; const char Y=Y; const char z=O;char L200;char hk200;char hz200;hdc=BeginPaint(hWnd,&ps); double s,t,I;t=sqrt(x.X0*x.X0+x.V0*x.V0/(x.W*x.W);s=atan(-x.V0/(x.X0*x.W); sprintf(buf,简谐运动方程 Y=%.2lfCOS(%.2lft%+.2lf),t,x.W,s);I=1/2.0*t*t*x.W*x.W;sprintf(hk,能流密度 I=%.2lfpu,I);sprintf(hz,注释:p-介质密度 u-传播速度);GetClientRect(hWnd, &rt); mx=(rt.right+rt.left)/2; my=(rt.bottom+rt.top)/2; TextOut(hdc,100,60,szTitle,strlen(szTitle);MoveToEx(hdc,0,my,NULL); LineTo(hdc,rt.right,my); MoveToEx(hdc,mx,my/6,NULL);LineTo(hdc,mx,rt.bottom);MoveToEx(hdc,0,30*t+my,NULL);LineTo(hdc,rt.right,30*t+my);M
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 建筑亮化拍摄方案设计
- 单轨吊司机上岗考核试卷及答案
- 沈阳建筑桩基检测方案设计
- 2025版司法局《民事起诉状(姓名权、肖像权纠纷)》民事类法律文书(空白模板)
- 面食餐厅人才发展策略分析
- 银矿开采效率提升策略报告
- 成套的管理咨询方案
- 建筑方案设计时间进度
- 联合教堂建筑分析方案设计
- 班组开年趣味活动方案策划
- 2025强制执行申请书(范文模板)
- 风力发电机自动消防系统
- 公益性岗位业务培训课件
- 时光老人与流浪汉课件
- 屋顶分布式光伏发电项目施工组织设计
- 学校安保培训课件
- 政务中心面试常见问题与答案详解
- 《儿童腺病毒肺炎重症肺炎防治指南》解读课件
- 2025年高考英语新课标Ⅱ卷点评及2026备考方向 课件
- 怎样合理减肥健康教育
- 美容师(皮肤管理师)技能测试题库及答案
评论
0/150
提交评论