“可视化程序设计”试卷

请使用API函数编写程序,要求如下:
1.工程文件的名字取” 学号_姓名_课内考查”,工程文件中所有文件名均为“学号_姓名_课内考查”(包括.cpp,.rc,.h等文件),否则按照“未完成任务”处理(10分)
2.显示一个WINDOWS窗口,窗口的标题为“学号_姓名_课内考查”,例如“2018620101_张三_课内考查”,演示录屏时该窗口不能遮挡VC6.0窗口的左上侧的文件列表,否则按未完成任务处理。(20分)
3.将光标设定为自己名字中的姓氏的第一个字,要求蓝色字体,红色背景。(10分)。
4.将图标设定为自己名字中的最后一个字,要求绿色字体白色背景(10分)
5.在窗口的左半侧显示一组图形并填充网格,如下图(10分)
图一
6.在窗口右半侧显示红色正方形如下图(10分)
图二
7.创建一个菜单,其中有一个菜单项“文件”,“文件” 菜单项包含“创建”、 “删除”、“退出”等项。选择“创建”选项时则动态创建一个菜单“编辑”,该“编辑”菜单项包含“绘图”选项,同时“创建”选项变为不可用状态。选择“删除”选项时,则删除菜单项“编辑”,同时“删除”选项变为不可用状态。选择 “退出”选项时,退出程序(20分)

选择“绘图”选项时,则在窗口中间显示下方图形(在下一页),要求第5,第6题的显示图不能消失,否则该题不得分。(10分)

图三

以下是主文件源代码

#include <windows.h>
#include "2000000000_XXX_课内考查.h"

//全局变量、函数申明
HINSTANCE hInst;
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
BOOL CALLBACK DlgProc(HWND, UINT, WPARAM, LPARAM);
static int Paint = 0;

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
    HACCEL hAccel;
    WNDCLASSEX wcex;
    HWND hWnd;
    MSG msg;
    TCHAR lpszMenuName[] = L"Menu";
    TCHAR lpszClassName[] = L"模态对话框";
    TCHAR lpszTitle[] = L"20203099_XXX_课内考查";
    //------------------------------以下初始化窗口类------------------------------
    wcex.cbSize = sizeof(WNDCLASSEX);                                           //窗口类的大小
    wcex.style = 0;                                                             //窗口类型为默认类型
    wcex.lpfnWndProc = WndProc;                                                 //窗口处理函数为WndProc
    wcex.cbClsExtra = 0;                                                        //窗口类无扩展
    wcex.cbWndExtra = 0;                                                        //窗口实例无扩展
    wcex.hInstance = hInstance;                                                 //当前实例句柄
   // wcex.hIcon = LoadIcon(NULL, MAKEINTRESOURCE(IDR_MAINFRAME));                //窗口的图标为默认图标  
    wcex.hIcon = LoadIcon(NULL, MAKEINTRESOURCE(IDI_APPLICATION));
    wcex.hCursor = LoadCursorFromFile(L"20000099_XXX_课内考查.cur");                           //窗口采用箭头光标 
   // wcex.hCursor = LoadCursor(NULL, MAKEINTRESOURCE(IDC_ARROW));
    wcex.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);                   //窗口背景为白色
    wcex.lpszMenuName = lpszMenuName;                                           //窗口中无菜单
    wcex.lpszClassName = lpszClassName;                                         //窗口类名为“窗口示例”
    wcex.hIconSm = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDR_MAINFRAME));    //窗口的小图标为默认图标
    //wcex.hIconSm = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_APPLICATION));


    //------------------------------以下进行窗口类的注册------------------------------
    if (!RegisterClassEx(&wcex))                                //如果注册失败则发出警告
    {
        MessageBox(NULL, L"窗口类注册失败!", L"窗口注册", NULL);
        return 1;
    }
    //------------------------------以下创建窗口------------------------------
    hWnd = CreateWindow(
        lpszClassName,                                          //窗口类名
        lpszTitle,                                              //窗口实例的标题名
        WS_OVERLAPPEDWINDOW,                                    //窗口的风格
        CW_USEDEFAULT, CW_USEDEFAULT,                           //窗口左下角坐标为默认值
        CW_USEDEFAULT, CW_USEDEFAULT,                           //窗口的高和宽为默认值
        NULL,                                                   //此窗口无父窗口
        NULL,                                                   //此窗口无主菜单
        hInstance,                                              //创建此窗口应用程序的当前句柄
        NULL                                                    //不使用该值
    );
    if (!hWnd)                                                  //如果创建窗口失败则发出警告
    {
        MessageBox(NULL, L"创建窗口失败!", L"创建窗口", NULL);
        return 1;
    }
    //显示窗口
    ShowWindow(hWnd, nCmdShow);                                
    UpdateWindow(hWnd);
    hInst = hInstance;
    hAccel = LoadAccelerators(hInst, lpszMenuName);
    //绘制用户区
    while (GetMessage(&msg, NULL, 0, 0))                        //消息循环
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }

    return(int)msg.wParam;                                      //程序终止时将信息返回系统
}



LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    HPEN hP;//画笔
    HBRUSH hB;//画刷
    HDC hDC;   //定义指向设备上下文的句柄	
    PAINTSTRUCT PtStr; //定义指向包含绘图信息的结构体变量
    HMENU  Menu;//主菜单句柄
    static HMENU hadmenu;//新建菜单句柄

    switch (message)
    {
    
    case WM_COMMAND:
        switch (LOWORD(wParam))
        {
        
        case IDM_EXIT://"退出"
            SendMessage(hwnd, WM_DESTROY, 0, 0);       break;
        
        case IDM_PAINT://“绘图”
            Paint = 1;
            InvalidateRect(hwnd, NULL, 1);
            break;

        case IDM_OPEN://“创建”
            Menu = GetMenu(hwnd);
            EnableMenuItem(Menu, IDM_OPEN, MF_BYCOMMAND | MF_GRAYED);//“创建”选择项不可用
            //新建弹出式菜单
            hadmenu = CreateMenu();
            AppendMenu(hadmenu, MF_POPUP, IDM_PAINT, L"绘图");
            InsertMenu(Menu, 3, MF_POPUP | MF_BYPOSITION, (UINT)hadmenu, L"编辑");
            DrawMenuBar(hwnd);
            break;

        case IDM_DELETE://“删除”
            Menu = GetMenu(hwnd);
            DeleteMenu(Menu, (UINT)hadmenu, MF_BYCOMMAND);//删除“编辑”选项    
            EnableMenuItem(Menu, IDM_DELETE, MF_BYCOMMAND | MF_GRAYED);//“删除”不可用
            DrawMenuBar(hwnd);
            break;     
        }
        break;

    case WM_DESTROY:
        PostQuitMessage(0);
        break;
        
    case WM_PAINT:    //处理重画消息  
        hDC = BeginPaint(hwnd, &PtStr); 	//开始绘画

        SetMapMode(hDC, MM_TEXT);

        if (Paint == 1)//点击“绘图”
        {
            //画圆角矩形
            hP = CreatePen(PS_DASHDOT, 2, RGB(0, 0, 0));
            SelectObject(hDC, hP);
            hB = CreateHatchBrush(HS_CROSS, RGB(255, 0, 0));
            RoundRect(hDC, 400, 40, 500, 160, 10, 10);
            //黑色填充画刷画椭圆
            hB = (HBRUSH)GetStockObject(BLACK_BRUSH);
            SelectObject(hDC, hB);
            Ellipse(hDC, 400, 50, 500, 150);
        }
        //画右半边红色矩形
        hB = (HBRUSH)GetStockObject(DC_BRUSH);
        SetDCBrushColor(hDC, RGB(225, 0, 0));
        SelectObject(hDC, hB);
        Rectangle(hDC, 700, 100, 780, 180);

        //画左半边网格填充
        hB = CreateHatchBrush(HS_CROSS, RGB(255, 0, 0));
        SelectObject(hDC, hB);
        RoundRect(hDC, 120, 10, 200, 70, 10, 10);
        Pie(hDC, 120, 70, 200, 160, 150, 70, 170, 70);
        Rectangle(hDC, 120, 160, 200, 220);    
        //蓝色描边
        hP = CreatePen(PS_DASHDOT, 2, RGB(0, 30, 250));
        SelectObject(hDC, hP);
        RoundRect(hDC, 120, 10, 200, 70, 10, 10);
        Pie(hDC, 120, 70, 200, 160, 150, 70, 170, 70);
        Rectangle(hDC, 120, 160, 200, 220);
        //删除画笔画刷
        DeleteObject(hB);
        DeleteObject(hP);
        EndPaint(hwnd, &PtStr);
       
        return 0;
    default:  return  DefWindowProc(hwnd, message, wParam, lParam);
    }
    return 0;
}


BOOL CALLBACK DlgProc(HWND hdlg, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)
    {
    case WM_COMMAND:
        switch (LOWORD(wParam))
        {
        case IDOK:
            EndDialog(hdlg, 0);
            break;
        }
        break;
    case WM_CLOSE:
        EndDialog(hdlg, 0);
        break;
    }
    return 0;

}

以下是资源文件添加代码

#include <windows.h>

#include "200000000_XXX_课内考查.h"

Menu MENU
{
    POPUP "文件"
    {
    MENUITEM "创建",     IDM_OPEN
        MENUITEM SEPARATOR
    MENUITEM "删除",   IDM_DELETE
        MENUITEM SEPARATOR
    MENUITEM "退出",   IDM_EXIT
    }

}

Menu ACCELERATORS

{
  "^O",             IDM_OPEN
  "^S",             IDM_DELETE
}

IDR_MAINFRAME ICON "2020000009_XXX_课内考查.ico"


头文件添加代码

#define IDM_OPEN  10
#define IDM_PAINT 15
#define IDM_EXIT 17
#define IDR_MAINFRAME 128
#define IDM_DELETE 30

实验截图
由于无法截图鼠标光标,和菜单选项,用手机传图,有点模糊
手机传图

考试心得:
终于结课了!这一路学习过来,我才发现我的自学能力还是不错的,老师其实没有帮上什么忙,反而事情很多(主观评价毋在意)。在考场上呢我没有全部完成所以功能,还是有很多问题。但是我发现大部分问题都是细节出的错,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值