专业课程实验报告
课程名称: windows程序设计
开课学期: 2015 至 2016 学年 第 1 学期
专业: 计算机科学与技术 年级班级: 2013级
学生姓名: 刘敏 学号:***************
实验教师: 刘红俊
计算机与信息科学学院 软件学院
实验项目名称 | 实验课(第5次)windows程序设计 | ||||
实验时间 | 12.2 | 实验类型 | □验证性 □设计性 □综合性 | ||
一、实验目的 1.掌握菜单和对话框资源的创建和使用. 2.掌握图标的创建; 3.学习了解资源在windows编程中的应用; 二、实验要求 1.掌握菜单和对话框资源的创建和使用. 2.编写程序: 设计一个窗口应用程序, 其中有一个VC菜单, 该菜单下有”显示”, “隐藏”, “退出”选项; 3.当选择”显示”选项时, 窗口中显示一个对话框, 在对话框中显示”我们一起来学习VC++”; 4.当选择”隐藏”按钮时,对话框消失; 5.选择”退出”时, 退出应用程序; 6.并为该程序加载图标. | |||||
三、实验内容与设计(主要内容,操作步骤、算法描述或程序代码) (一)主要内容: 1.掌握菜单和对话框资源的创建和使用. 2.编写程序: 设计一个窗口应用程序, 其中有一个VC菜单, 该菜单下有”显示”, “隐藏”, “退出”选项; 3.当选择”显示”选项时, 窗口中显示一个对话框, 在对话框中显示”我们一起来学习VC++”; 4.当选择”隐藏”按钮时,对话框消失; 5.选择”退出”时, 退出应用程序; 6.并为该程序加载图标. (二)操作步骤与算法描述: 1.菜单的创建过程: 1)定义菜单: 菜单资源名 MENU [,载入特定选项] {菜单项列表} 2)加载菜单资源: 1 在窗口类中加载菜单; 2 在创建窗口时加载菜单; 3 动态加载菜单。 本程序采用的是在窗口类中加载菜单。 wcex.lpszMenuName = MAKEINTRESOURCE(IDC_WIN32PROJECT2); 2.对话框资源及其应用: 1)模式对话框: 1 定义对话框资源: 资源文件中如此定义对话框资源: 对话框名 DIALOGEX x,y,weight,hight STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "" FONT 9, "" BEGIN 对话框的控件定义 END 2 调用函数DiaLogBox显示对话框; 3 构造对话框消息处理函数; 4 关闭对话框。 2)非模式对话框: 1 定义非模式对话框: STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU|WS_VISIBLE 2 创建对话框函数: HWND CreateDialog{hInst, MAKEINTRESOURCE(IDD_SHOWBOX),hWnd,(DLGPROC)DlgProc} 3 消息循环: while (GetMessage(&msg, NULL, 0, 0)) { if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)) { TranslateMessage(&msg); DispatchMessage(&msg); } } 4 关闭对话框: DestroyWindow(hDlg); 3)程序加载图标: IDI_WIN32PROJECT2 ICON "Win32Project2.ico" IDI_SMALL ICON "small.ico" | |||||
(三)程序代码: Win32Project2.cpp // Win32Project2.cpp : 定义应用程序的入口点。 // #include "stdafx.h" #include "Win32Project2.h" #define MAX_LOADSTRING 100 // 全局变量: HINSTANCE hInst; // 当前实例 TCHAR szTitle[MAX_LOADSTRING]; // 标题栏文本 TCHAR szWindowClass[MAX_LOADSTRING]; // 主窗口类名 BOOL CALLBACK DlgProc(HWND,UINT,WPARAM,LPARAM); //定义对话框处理函数 HWND hDlg; //对话框句柄 ATOM MyRegisterClass(HINSTANCE hInstance); BOOL InitInstance(HINSTANCE, int); LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); INT_PTR CALLBACK About(HWND, UINT, WPARAM, LPARAM); int APIENTRY _tWinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPTSTR lpCmdLine, _In_ int nCmdShow) { UNREFERENCED_PARAMETER(hPrevInstance); UNREFERENCED_PARAMETER(lpCmdLine); MSG msg; HACCEL hAccelTable; LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING); LoadString(hInstance, IDC_WIN32PROJECT2, szWindowClass, MAX_LOADSTRING); MyRegisterClass(hInstance); if (!InitInstance (hInstance, nCmdShow)) { return FALSE; } hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_WIN32PROJECT2)); while (GetMessage(&msg, NULL, 0, 0)) { if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)) { TranslateMessage(&msg); DispatchMessage(&msg); } } return (int) msg.wParam; } // // 函数: MyRegisterClass() // // 目的: 注册窗口类。 // ATOM MyRegisterClass(HINSTANCE hInstance) { WNDCLASSEX wcex; wcex.cbSize = sizeof(WNDCLASSEX); wcex.style = CS_HREDRAW | CS_VREDRAW; wcex.lpfnWndProc = WndProc; wcex.cbClsExtra = 0; wcex.cbWndExtra = 0; wcex.hInstance = hInstance; wcex.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_WIN32PROJECT2)); wcex.hCursor = LoadCursor(NULL, IDC_ARROW); wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); wcex.lpszMenuName = MAKEINTRESOURCE(IDC_WIN32PROJECT2); wcex.lpszClassName = szWindowClass; wcex.hIconSm = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL)); return RegisterClassEx(&wcex); } // // 函数: InitInstance(HINSTANCE, int) // // 目的: 保存实例句柄并创建主窗口 // // 注释: // // 在此函数中,我们在全局变量中保存实例句柄并 // 创建和显示主程序窗口。 // BOOL InitInstance(HINSTANCE hInstance, int nCmdShow) { HWND hWnd; hInst = hInstance; // 将实例句柄存储在全局变量中 hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL); if (!hWnd) { return FALSE; } ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd); return TRUE; } // // 函数: WndProc(HWND, UINT, WPARAM, LPARAM) // // 目的: 处理主窗口的消息。 // // WM_COMMAND - 处理应用程序菜单 // WM_PAINT - 绘制主窗口 // WM_DESTROY - 发送退出消息并返回 // // LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { int wmId, wmEvent; PAINTSTRUCT ps; HDC hdc; switch (message) { case WM_COMMAND: wmId = LOWORD(wParam); wmEvent = HIWORD(wParam); switch(LOWORD(wParam)) { case 10: hDlg=CreateDialog(hInst, MAKEINTRESOURCE(IDD_SHOWBOX),hWnd,(DLGPROC)DlgProc); break; case 11: DestroyWindow(hDlg); break; case自动弹窗代码 105: PostQuitMessage(0); break; } switch (wmId) { case IDM_ABOUT: DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About); break; case IDM_EXIT: DestroyWindow(hWnd); break; default: return DefWindowProc(hWnd, message, wParam, lParam); } break; case WM_PAINT: hdc = BeginPaint(hWnd, &ps); // TODO: 在此添加任意绘图代码... EndPaint(hWnd, &ps); break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hWnd, message, wParam, lParam); } return 0; } BOOL CALLBACK DlgProc(HWND hDlg,UINT message,WPARAM wParam,LPARAM lParam) { switch(message) { case WM_INITDIALOG: return 1; } return 0; } // “关于”框的消息处理程序。 INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) { UNREFERENCED_PARAMETER(lParam); switch (message) { case WM_INITDIALOG: return (INT_PTR)TRUE; case WM_COMMAND: if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL) { EndDialog(hDlg, LOWORD(wParam)); return (INT_PTR)TRUE; } break; } return (INT_PTR)FALSE; } //Microsoft Visual C++ 生成的资源脚本。 // #include "resource.h" #define APSTUDIO_READONLY_SYMBOLS ///////////////////////////////////////////////////////////////////////////// // // 从 TEXTINCLUDE 2 资源生成。 // #ifndef APSTUDIO_INVOKED #include "targetver.h" #endif #define APSTUDIO_HIDDEN_SYMBOLS #include "windows.h" #undef APSTUDIO_HIDDEN_SYMBOLS ///////////////////////////////////////////////////////////////////////////// #undef APSTUDIO_READONLY_SYMBOLS #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS) LANGUAGE 4, 2 // 图标 // ID 值最低的图标放在最前面,以确保应用程序图标 // 在所有系统中保持一致。 IDI_WIN32PROJECT2 ICON "Win32Project2.ico" IDI_SMALL ICON "small.ico" // 菜单 // IDC_WIN32PROJECT2 MENU DISCARDABLE BEGIN POPUP "文件(&F)" BEGIN MENUITEM "显示", IDM_SHOW MENUITEM "隐藏", IDM_HIDE MENUITEM "退出(&X)", IDM_EXIT END POPUP "帮助(&H)" BEGIN MENUITEM "关于(&A) ...", IDM_ABOUT END END IDC_WIN32PROJECT2 ACCELERATORS BEGIN "?", IDM_ABOUT, ASCII, ALT "/", IDM_ABOUT, ASCII, ALT END IDD_SHOWBOX DIALOGEX 50, 50, 170, 62 STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU|WS_VISIBLE CAPTION "关于 Win32Project2" FONT 12, "我们一起来学习vc++" BEGIN ICON IDR_MAINFRAME,IDC_STATIC,14,14,21,20 LTEXT "我们一起来学习vc++",IDC_STATIC,42,14,114,8,SS_NOPREFIX END #ifdef APSTUDIO_INVOKED GUIDELINES DESIGNINFO BEGIN IDD_ABOUTBOX, DIALOG BEGIN LEFTMARGIN, 7 RIGHTMARGIN, 163 TOPMARGIN, 7 BOTTOMMARGIN, 55 END END #endif // APSTUDIO_INVOKED #ifdef APSTUDIO_INVOKED 1 TEXTINCLUDE BEGIN "resource.h\0" END 2 TEXTINCLUDE BEGIN "#ifndef APSTUDIO_INVOKED\r\n" "#include ""targetver.h""\r\n" "#endif\r\n" "#define APSTUDIO_HIDDEN_SYMBOLS\r\n" "#include ""windows.h""\r\n" "#undef APSTUDIO_HIDDEN_SYMBOLS\r\n" "\0" END 3 TEXTINCLUDE BEGIN "\r\n" "\0" END #endif // APSTUDIO_INVOKED STRINGTABLE BEGIN IDC_WIN32PROJECT2 "WIN32PROJECT2" IDS_APP_TITLE "Win32Project2" END #endif #ifndef APSTUDIO_INVOKED #endif // 不是 APSTUDIO_INVOKED Resource。H //{{NO_DEPENDENCIES}} // Microsoft Visual C++ generated include file. // Used // #define IDS_APP_TITLE 103 #define IDR_MAINFRAME 128 #define IDD_WIN32PROJECT2_DIALOG 102 #define IDD_SHOWBOX 13 //#define IDD_SHOW 14 #define IDD_ABOUTBOX 103 #define IDM_ABOUT 104 #define IDM_EXIT 105 #define IDI_WIN32PROJECT2 107 #define IDI_SMALL 108 #define IDC_WIN32PROJECT2 109 #define IDC_MYICON 2 #ifndef IDC_STATIC #define IDC_STATIC -1 #define IDM_SHOW 10; #define IDM_HIDE 11; //#define IDM_EXIT 12; #endif // 新对象的下一组默认值 // #ifdef APSTUDIO_INVOKED #ifndef APSTUDIO_READONLY_SYMBOLS #define _APS_NO_MFC 130 #define _APS_NEXT_RESOURCE_VALUE 129 #define _APS_NEXT_COMMAND_VALUE 32771 #define _APS_NEXT_CONTROL_VALUE 1000 #define _APS_NEXT_SYMED_VALUE 110 #endif #endif | |||||
三、测试数据和执行结果 (在给定数据下,执行操作、算法和程序的结果,可使用数据、图表、截图等给出) 图1 图2 | |||||
四、实验结果分析及总结(对实验的结果是否达到预期进行分析,总结实验的收获和存在的问题等) (一)实验结果: 实验结果达到预期要求。 (二)实验收货: 1.通过此次试验,我掌握了资源在windows编程中的应用。 2.学习了菜单资源及其应用; 3.模式对话框与非模式对话框资源及其应用; 4.图标资源及其应用。 (三)存在的问题: 在此实验中,单击菜单中的显示会弹出非模式对话框,但是我只能通过单击隐藏来关闭对话框,单击对话框中的叉并不能关闭对话框。 | |||||
教 师 评 阅 | 实验内容和设计(A-E): | ||||
操作过程、算法或代码(A-E): | |||||
实验结果(A-E): | |||||
实验分析和总结(A-E): | |||||
实验成绩(A-E): 反馈评语: | |||||
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论