程序: 1、要求:建立一个新的工程文件,命名“学号_姓名_Win32Application_4_1”,先建立一个空的工程文件,命名“学号_姓名_Win32Application_4_1”,然后在工程中

程序: 1、要求:建立一个新的工程文件,命名“学号_姓名_Win32Application_4_1”,先建立一个空的工程文件,命名“学号_姓名_Win32Application_4_1”,然后在工程中新添加一个空的C++文件,文件命名为“学号_姓名_Win32Application_4_1”,然后参考04_文本ppt中示例4-1和4-3和的代码,写入该C++文件,将窗口上的标题改为“学号_姓名_Win32Application_4_1“;然后保存,编译链接,调试程序,并通过。通过后以工程名为word的文件名完成作业,内容为调试程序出现的问题和解决方法!  

// 2019339901078_李海龙Win32Application_4_01.cpp : 定义应用程序的入口点。
//

#include "framework.h"
#include "2019339901078_李海龙Win32Application_4_01.h"
#include <tchar.h>
#define MAX_LOADSTRING 100

// 全局变量:
HINSTANCE hInst;                                // 当前实例
WCHAR szTitle[MAX_LOADSTRING];                  // 标题栏文本
WCHAR szWindowClass[MAX_LOADSTRING];            // 主窗口类名

// 此代码模块中包含的函数的前向声明:
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 wWinMain(_In_ HINSTANCE hInstance,
                     _In_opt_ HINSTANCE hPrevInstance,
                     _In_ LPWSTR    lpCmdLine,
                     _In_ int       nCmdShow)
{
    UNREFERENCED_PARAMETER(hPrevInstance);
    UNREFERENCED_PARAMETER(lpCmdLine);

    // TODO: 在此处放置代码。

    // 初始化全局字符串
    LoadStringW(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
    LoadStringW(hInstance, IDC_MY2019339901078WIN32APPLICATION401, szWindowClass, MAX_LOADSTRING);
    MyRegisterClass(hInstance);

    // 执行应用程序初始化:
    if (!InitInstance (hInstance, nCmdShow))
    {
        return FALSE;
    }

    HACCEL hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_MY2019339901078WIN32APPLICATION401));

    MSG msg;

    // 主消息循环:
    while (GetMessage(&msg, nullptr, 0, 0))
    {
        if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
        {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
    }

    return (int) msg.wParam;
}



//
//  函数: MyRegisterClass()
//
//  目标: 注册窗口类。
//
ATOM MyRegisterClass(HINSTANCE hInstance)
{
    WNDCLASSEXW 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_MY2019339901078WIN32APPLICATION401));
    wcex.hCursor        = LoadCursor(nullptr, IDC_ARROW);
    wcex.hbrBackground  = (HBRUSH)(COLOR_WINDOW+1);
    wcex.lpszMenuName   = MAKEINTRESOURCEW(IDC_MY2019339901078WIN32APPLICATION401);
    wcex.lpszClassName  = szWindowClass;
    wcex.hIconSm        = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));

    return RegisterClassExW(&wcex);
}

//
//   函数: InitInstance(HINSTANCE, int)
//
//   目标: 保存实例句柄并创建主窗口
//
//   注释:
//
//        在此函数中,我们在全局变量中保存实例句柄并
//        创建和显示主程序窗口。
//
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
   hInst = hInstance; // 将实例句柄存储在全局变量中

   HWND hWnd = CreateWindowW(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
      CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, nullptr, nullptr, hInstance, nullptr);

   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)
{
    HDC hdc;
    HFONT hF_black, hF_big;	//定义两种字体句柄
    PAINTSTRUCT ps;
    TEXTMETRIC tm;		//定义一个TEXTMETRIC结构,用以记录字体信息
    LPCWSTR lpsz_1 = L"这是一行红色的、字体为SYSTEM_FONT的文字,红色代表未来";
    LPCWSTR lpsz_2 = L"现在显示的是自定义绿色字体,绿色代表生机勃勃";
    LPCWSTR lpsz_3 = L"这一行是蓝色的粗体字,蓝色代表广阔的海洋和天空";
    LPCWSTR lpsz_4 = L"这是大号、斜体并带有下划线的文字";
    LPCWSTR lpsz_5 = L"您掌握了字体的操作了吗?";
    LPCWSTR lpsz_6 = L"祝您成功!";
    LPCWSTR lpsz_7 = L"Visual C++课程很有用!";
    int X = 0, Y = 0;
    static RECT rect = { 0,300,0,350 };
    SIZE size;
    switch (message)
    {
    case WM_CREATE:
        SetTimer(hWnd, 9999, 50, NULL);		//设置定时器
        break;
    case WM_TIMER:
        if (wParam == 9999)     			//定时刷新
            InvalidateRect(hWnd, NULL, true);
        break;
    //case WM_COMMAND:
    //    {
    //        int wmId = LOWORD(wParam);
    //        // 分析菜单选择:
    //        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:
        {
        static long nXChar, nCaps, nYChar;
        int pointx, pointy, i, j;
        //PAINTSTRUCT ps;
     //   HDC hdc = BeginPaint(hWnd, &ps);
        // TODO: 在此处添加使用 hdc 的任何绘图代码...
        rect.right += 2;  				//矩形的右边界增2
        hdc = BeginPaint(hWnd, &ps);
        SetTextColor(hdc, RGB(255, 0, 0));		//设置文本颜色为红色
        GetTextMetrics(hdc, &tm);			//获取默认字体,写入tm结构中
        TextOut(hdc, X, Y, lpsz_1, _tcsclen(lpsz_1));	//使用当前字体输出文本
        Y = Y + tm.tmHeight + tm.tmExternalLeading;//计算换行时下一行文本的输出坐标
        hF_black = CreateFont			//创建自定义字体
        (20,		//字体的高度
            0,		//由系统根据高宽比选取字体最佳宽度值
            0,		//文本的倾斜度为0,表示水平 
            0,		//字体与基线的倾斜度为0, 表示与基线平行
            FW_HEAVY,		//字体的粗度,FW_HEAVY为最粗
            0,			//非斜体字
            0,			//无下划线
            0,			//无删除线
            GB2312_CHARSET,	//表示所用的字符集为ANSI_CHARSET
            OUT_DEFAULT_PRECIS,		//输出精度为默认精度
            CLIP_DEFAULT_PRECIS,		//剪裁精度为默认精度
            DEFAULT_QUALITY,		//输出质量为默认值
            DEFAULT_PITCH | FF_DONTCARE,	//字间距和字体系列使用默认值
            L"粗体字"			//字体名称
        );
        SetTextColor(hdc, RGB(0, 255, 0));	//设置文本颜色为绿色
        SelectObject(hdc, hF_black);		//将自定义字体选入设备环境
        GetTextMetrics(hdc, &tm);	//获取字体的信息,并写入tm结构中
        TextOut(hdc, X, Y, lpsz_2, _tcsclen(lpsz_2));//使用当前字体输出文本
        //换行继续输出文本,计算新行的起始Y坐标位置
        Y = Y + tm.tmHeight + 5 * tm.tmExternalLeading;
        GetTextExtentPoint32(hdc, lpsz_2, _tcsclen(lpsz_2), &size);
        //获取字符串的宽度
        SetTextColor(hdc, RGB(0, 0, 255));		//设置文本颜色为蓝色
        TextOut(hdc, X, Y, lpsz_3, _tcsclen(lpsz_3));	//用当前字体输出文本
        Y = Y + tm.tmHeight + 5 * tm.tmExternalLeading;
        hF_big = CreateFont				//引入新字体
        (30,				//字体高度
            0, 0, 0, FW_NORMAL,
            1,				//定义斜体
            1,				//定义输出时带下划线
            0,
            GB2312_CHARSET,		//所使用的字符集
            OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS,
            DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE,
            L"大号字");
        SelectObject(hdc, hF_big);	//将第二种自定义字体选入设备环境
        SetTextColor(hdc, RGB(155, 155, 155));		//设置文本颜色为灰色
        Y = Y + tm.tmHeight + 5 * tm.tmExternalLeading;
        TextOut(hdc, X, Y, lpsz_4, _tcsclen(lpsz_4));	//以当前字体输出文本
        SetTextColor(hdc, RGB(255, 0, 0));		//设置文本颜色为红色
        Y = Y + tm.tmHeight + 10 * tm.tmExternalLeading;
        TextOut(hdc, X, Y, lpsz_5, _tcsclen(lpsz_5)); 	//输出文本
        //在该行继续输出文本
        GetTextExtentPoint32(hdc, lpsz_5, _tcsclen(lpsz_5), &size);
        X = X + size.cx;					//获取字符串的宽度
        TextOut(hdc, X + 5, Y, lpsz_6, _tcsclen(lpsz_6)); 	//输出文本
        hF_big = CreateFont				//引入新字体
        (
            48,				//字体高度
            0, 0, 0, FW_NORMAL,
            0,				//定义斜体
            0,				//定义输出时带下划线
            0,
            GB2312_CHARSET,		//所使用的字符集
            OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS,
            DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE,
            L"楷体_GB2312");
        SelectObject(hdc, hF_big);				//获取起始坐标		SetTextColor(hdc,RGB(0,0,0));
        SetBkColor(hdc, RGB(100, 150, 100));
        TextOut(hdc, 0, 300, lpsz_7, _tcsclen(lpsz_7)); 	//输出文本
        SetTextColor(hdc, RGB(0, 255, 0));
        SetBkColor(hdc, RGB(150, 50, 50));
        DrawText(hdc, lpsz_7, _tcslen(lpsz_7), &rect, DT_LEFT);
        GetTextExtentPoint32(hdc, lpsz_7, _tcsclen(lpsz_7), &size);
        if (rect.right >= size.cx) rect.right = 0;
        DeleteObject(hF_black);			//删除自定义字体句柄
        DeleteObject(hF_big);


        static LPCWSTR textbuf[4] = {
            {_T("故人西辞黄鹤楼")},
            {_T("烟花三月下扬州")},
            {_T("孤帆远影碧空尽")},
            {_T("唯见长江天际流")} };
        TEXTMETRIC cm;				//存放字体各种属性的结构体变量
        hdc = GetDC(hWnd);   				//获取当前设备表句柄
        GetTextMetrics(hdc, &cm); 			//获取字体信息
        nXChar = cm.tmAveCharWidth;  			//获取字符宽度
        nYChar = cm.tmHeight + cm.tmExternalLeading;	//字符高度
        nCaps = (cm.tmPitchAndFamily & 1 ? 3 : 2) * nXChar / 2;	//字间距


        for (i = 4; i > 0; i--)
        {
            for (j = 0; j < 7; j++)				//输出文本
            {
                pointx = 600 + i * nXChar * 5;
                pointy = 500 + j * (nYChar + nCaps);
                TextOut(hdc, pointx, pointy, textbuf[4 - i] + j * 1, 1);
            }

        }




        EndPaint(hWnd, &ps);
    }

        
        break;
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
    default:
        return DefWindowProc(hWnd, message, wParam, lParam);
    }
  //  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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值