专业课程实验报告
课程名称:    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小时内删除。