一个简单的windows窗口程序

目录

  • 一、创建一个windows窗口程序的步骤
  • 二、具体实现代码
  • 三、实现效果

一、创建一个windows窗口程序的步骤

  • 定义窗口类
  • 注册窗口类
  • 创建窗口
  • 更新显示窗口
  • 建立消息循环
  • 处理消息

所用环境:Visual Studio 2019

(1)打开vs2019,选择创建新项目
一个简单的windows窗口程序_第1张图片
(2)选择windows桌面应用程序一个简单的windows窗口程序_第2张图片
(3)输入项目名称及存储路径,点击创建
一个简单的windows窗口程序_第3张图片
(4)如图创建完成
一个简单的windows窗口程序_第4张图片

二、具体实现代码

(1)找到wndproc这个函数块
一个简单的windows窗口程序_第5张图片
(2)在switch里写入点击鼠标左键出现窗口的代码

在这里插入图片描述
代码如下

case WM_LBUTTONDOWN: //点击鼠标左键
        MessageBox(hWnd, TEXT("点击了鼠标左键"), TEXT("事件"), MB_OK);//MB_OK设置一个ok按钮
        break;

(3)在VM_PAINT中写入代码,实现在窗体中显示文本,例如“我的第一个windows窗口文件”
一个简单的windows窗口程序_第6张图片
代码如下

case WM_PAINT://绘制主窗口
        {
     
        PAINTSTRUCT ps; //绘图结构体
        HDC hdc = BeginPaint(hWnd, &ps); //开始绘图
        SetTextColor(hdc, RGB(0,0,0));//黑色的画笔
        TextOut(hdc, 150, 150, L"我的一个window窗口文件", strlen("我的一个window窗口文件"));
        EndPaint(hWnd, &ps);//结束绘图
        break;
        }
        break;

(3)在VM_CLOSE中写入代码,实现点击关闭按钮弹出提示窗口

一个简单的windows窗口程序_第7张图片

代码如下

case WM_CLOSE: //关闭窗口
    {
     
        if (IDYES == MessageBox(hWnd, TEXT("是否退出窗口"), TEXT("关闭窗口"), MB_YESNO))//MB_OK设置一个o按钮
        {
     
            DestroyWindow(hWnd);//关闭窗口
        }
    }
        break;

(4)程序完整代码如下

#include "framework.h"
#include "第一个windows窗口程序.h"
#include 

#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_WINDOWS, szWindowClass, MAX_LOADSTRING);
    MyRegisterClass(hInstance);

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

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

    MSG msg;

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

    return (int) msg.wParam;
}




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;//传递给MyRegisterClass的hInstance参数值
    wcex.hIcon          = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_WINDOWS));//默认的图标
    wcex.hCursor        = LoadCursor(nullptr, IDC_ARROW);//设置光标为箭头
    wcex.hbrBackground  = (HBRUSH)(COLOR_WINDOW+1);//默认背景
    wcex.lpszMenuName   = MAKEINTRESOURCEW(IDC_WINDOWS);
    wcex.lpszClassName  = szWindowClass;
    wcex.hIconSm        = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));

    return RegisterClassExW(&wcex);//注册窗口类
}


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;
}




LRESULT CALLBACK WndProc(
    HWND hWnd,//窗户句柄
    UINT message, 
    WPARAM wParam, //附加信息
    LPARAM lParam
)//处理主窗口的消息。
{
     
    switch (message)
    {
     
    case WM_LBUTTONDOWN: //点击鼠标左键
        MessageBox(hWnd, TEXT("点击了鼠标左键"), TEXT("事件"), MB_OK);//MB_OK设置一个ok按钮
        break;
    case WM_CLOSE: //关闭窗口
    {
     
        if (IDYES == MessageBox(hWnd, TEXT("是否退出窗口"), TEXT("关闭窗口"), MB_YESNO))//MB_OK设置一个o按钮
        {
     
            DestroyWindow(hWnd);//关闭窗口
        }
    }
        break;
    
    case WM_PAINT://绘制主窗口
        {
     
        PAINTSTRUCT ps; //绘图结构体
        HDC hdc = BeginPaint(hWnd, &ps); //开始绘图
        SetTextColor(hdc, RGB(0,0,0));//黑色的画笔
        TextOut(hdc, 150, 150, L"我的一个window窗口文件", strlen("我的一个window窗口文件"));
        EndPaint(hWnd, &ps);//结束绘图
        break;
        }
        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;
}

三、实现效果

运行程序
一个简单的windows窗口程序_第8张图片
鼠标左键点击窗口
一个简单的windows窗口程序_第9张图片
关闭窗口一个简单的windows窗口程序_第10张图片

你可能感兴趣的:(mfc)