一个简单的windows窗口程序

一个简单的windows窗口程序一个简单的windows窗口程序创建一个windows窗口程序的步骤具体实现代码实现效果创建一个windows窗口程序的步骤定义窗口类注册窗口类创建窗口更新显示窗口建立消息循环处理消息具体实现代码#include”framework.h”#include”第一个windows窗口程序.h”#include<windows.h>#defineMAX_LOADSTRING100//全局变量:HINSTANCEhInst;

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

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

所用环境:Visual Studio 2019

(1)打开vs2019,选择创建新项目
在这里插入图片描述
(2)选择windows桌面应用程序在这里插入图片描述
(3)输入项目名称及存储路径,点击创建
在这里插入图片描述
(4)如图创建完成
在这里插入图片描述

二、具体实现代码

(1)找到wndproc这个函数块
在这里插入图片描述
(2)在switch里写入点击鼠标左键出现窗口的代码

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

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

(3)在VM_PAINT中写入代码,实现在窗体中显示文本,例如“我的第一个windows窗口文件”
在这里插入图片描述
代码如下

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中写入代码,实现点击关闭按钮弹出提示窗口

在这里插入图片描述

代码如下

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 <windows.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_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窗口程序分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:http://bianchenghao.cn/29610.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注