面对对象编程实验

上传人:简****9 文档编号:110895225 上传时间:2019-11-01 格式:DOC 页数:12 大小:492.50KB
返回 下载 相关 举报
面对对象编程实验_第1页
第1页 / 共12页
面对对象编程实验_第2页
第2页 / 共12页
面对对象编程实验_第3页
第3页 / 共12页
面对对象编程实验_第4页
第4页 / 共12页
面对对象编程实验_第5页
第5页 / 共12页
点击查看更多>>
资源描述

《面对对象编程实验》由会员分享,可在线阅读,更多相关《面对对象编程实验(12页珍藏版)》请在金锄头文库上搜索。

1、 面向对象编程技术实验三 实验报告班 级:电子二班学 号:姓 名:时 间:1 实验要求12 实验过程及结果12.1调试示例程序Childwin12.2改进ChildWin示例程序12.3跟踪消息传递过程42.4设计、实现一个软键盘.42.5增加新的资源.5 2.6增加菜单.62.7增加快捷菜单处理.73 实验总结8附录 关键代码81实验要求理解、窗口之间的消息传送、调用栈;掌握光标、图标、菜单的制作和使用方式;掌握菜单的响应方式、快捷菜单的载入及使用方式;理解GetWindowLong/SetWindowLong, GetClassLong/SetClassLong函数的用法。2 实验过程及结

2、果2.1调试示例程序Childwin,查找程序中的UnderstandCallStack函数,跟踪调试。在UnderstandCallStack函数中加断点,在一步一步进行调试,看每一步函数的取值,看函数取值是否正确,以及每一步是否出现错误。2.2改进ChildWin示例程序,在子窗口内显示出窗口特定信息(窗口ID号);尝试在每个子窗口中绘制特定颜色的矩形。在子窗口添加函数利用GetWindowLong函数取出子窗口的id值,在将id值赋值给已经定义的数组,再用wsprintf函数打印出来。再利用Rectangle函数绘制特定颜色的矩形。绘制出如图的小矩形。2.3跟踪消息传递过程在Childw

3、in的主窗口和子窗口过程函数设置断点,运行程序,查看各断点的响应过程。利用switch-case结构来确定窗口过程收到的消息的类型以及相应的处理方法。当窗口过程函数对消息进行处理后,应返回0,所有窗口过程不进行处理的消息都必须传给DefWindowProc的函数。DefWindowProc的返回值必须从窗口过程返回。2.4设计、实现一个软键盘用子窗口实现一个软键盘,鼠标点击每个子窗口,可输入不同的字符。将输入的字符显示到屏幕上。本实验在ChildWin示例程序的基础上加以改编,首先创建好子窗口,在子窗口上打印上键盘的字母定义一个数组,利用 GetWindowLong(hWnd, GWL_ID)

4、+65,再将取出的值赋值给定义好的数组,之后在利用wsprintf 打印出键盘上的字符。再在父窗口中添加WM-PAINT消息,当子窗口传来消息时父窗口将获得此时的子窗口是哪一个,这个时候再定义一个数组将传递来的赋值给数组,再用wsprintf函数将它打印在主窗口上。可以是这样如果取值足够大可以同时显示大小写,如下图。2.5增加新的资源2.5.1用资源编辑器编辑一个光标,在资源编辑器增添新的资源,选择新建光标在自己绘制完成后保存检查resource.h的文件中是否以及定义了新建的光标,如果已经定义完成,在注册窗口类的时候包含该光标即可。wc.hCursor = LoadCursor(hInsta

5、nce, MAKEINTRESOURCE(IDC_CURSOR3);2.5.2用资源编辑器编辑一个图标在资源管理器中添加ICON资源,在自定义完成之后,注意查看自己头文件是否已经定义该图标,如果已经成功在注册窗口类的时候包含该图标名,再在下面程序中添加程序,完成添加图标实验,结果显示如下。2.6增加菜单在资源中添加一个新的菜单,在菜单中编写,“欢迎进入”,“编辑”,“退出”。保存,在自定义完成之后,注意查看自己头文件是否已经定义该菜单,如果已经成功在注册窗口类的时候包含该菜单名。本次实验近加入了退出的菜单相应代码。case WM_COMMAND: / 响应编辑控件通知消息if (lParam

6、= 0)switch (LOWORD(wParam)case IDM_FILE_EXIT:SendMessage(hwnd, WM_CLOSE, 0, 0);return 0;2.7增加快捷菜单处理具体的处理下ase WM_CREATE: /获取快捷菜单句柄 hPopMenu = LoadMenu (LPCREATESTRUCT)lParam)-hInstance, TEXT (“PopMenu”); /再获取 hPopMenu 标识的快捷菜单的唯一的菜单便笺句柄 hPopMenu = GetSubMenu (hPopMenu, 0); return 0; case WM_RBUTTONUP:

7、 pt.x = LOWORD (lParam); pt.y = HIWORD (lParam); ClientToScreen (hWnd, &pt); TrackPopupMenu (hPopMenu, /快捷菜单句柄 TPM_LEFTALIGN | TPM_TOPALIGN | TPM_LEFTBUTTON, /标志选项 pt.x, pt.y, 0, hWnd, NULL); return 0; 3实验总结本次实验锻炼了我的很多能力,让我写程序渐渐有了一点思路,以及对各种函数的使用,程序的框架有了一定的了解,在实验过程中也遇到了很多的难题,在做软键盘的时候一开始不知道怎么样在父窗口中显示出

8、字符,之后通过查阅windows编程技术和网上查阅资料了解了父窗口与子窗口之间的通信。进而将子窗口的信息传送给父窗口,在打印出来就行了。在做添加各种控件时,一开始有的时候总没有定义,在头文件中没有控件的定义,这就是我在试验报告中反复强调的检查是否在文件中控件有定义。附录 关键代码软键盘:case WM_SIZE:nXBox = (LOWORD(lParam) * 3 / 2) / COL_NUM;nYBox = (HIWORD(lParam) *2 / 4) / ROW_NUM;/主窗口大小改变时,重新确定各子窗口在主窗口客户区的位置for (x = 0; xCOL_NUM; x+)for (

9、y = 0; y 4;nRow = (nChildWin_ID 15) ? (nChildWin_ID - 4) : nChildWin_ID;InvalidateRect(hWnd, NULL, TRUE);/ 重画时将擦除背景return 0;case WM_PAINT:if (!(LOWORD(wParam) = nChildWin_ID)GetClientRect(hWnd, &rect);hdc = BeginPaint(hWnd, &ps);int number = nChildWin_ID;static TCHAR string20 = 0;static int n = 0;st

10、ringn = number+65 ;n+;DrawText(hdc, string, n, &rect, DT_SINGLELINE);/wsprintf(string, TEXT(%c), number + 65);EndPaint(hWnd, &ps);return 0;case WM_DESTROY:PostQuitMessage(0);return 0;return DefWindowProc(hWnd, message, wParam, lParam);LRESULT CALLBACK ChildWndProc(HWND hWnd, UINT message, WPARAM wPa

11、ram, LPARAM lParam)HDC hdc;PAINTSTRUCT ps;RECT rect;LONG l = 0;static int xy;switch (message)case WM_CREATE:xy+;/置各子窗口命中标志为0,(0号子窗口则为1)if (GetWindowLong(hWnd, GWL_ID) = 0)/if (GetWindowWord (hWnd, GWL_ID) = 0) / 2004.03.11 Liangchenghuil = SetWindowLong(hWnd, 0, 1);elsel = SetWindowLong(hWnd, 0, 0);return 0;case WM_LBUTTONDOWN:/新的子窗口被命中if (GetWindowLong(hWnd, 0) = 0)/置该子窗口命中标志为1SetWindowLong(hWnd, 0, 1);/发送消息通知主窗口S

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 管理学资料

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号