VS生成的最简WIN32窗口程序

2024-04-14 03:58

本文主要是介绍VS生成的最简WIN32窗口程序,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

// win32_basic.cpp : 定义应用程序的入口点。

//

 

#include "stdafx.h"

#include "win32_basic.h"

 

#define MAX_LOADSTRING 100

 

// 全局变量:

HINSTANCE hInst;                          // 当前实例

TCHAR szTitle[MAX_LOADSTRING];                // 标题栏文本

TCHAR 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 _tWinMain(HINSTANCE hInstance,

                     HINSTANCE hPrevInstance,

                     LPTSTR    lpCmdLine,

                     int       nCmdShow)

{

    UNREFERENCED_PARAMETER(hPrevInstance);

    UNREFERENCED_PARAMETER(lpCmdLine);

 

    // TODO: 在此放置代码。

    MSG msg;

    HACCEL hAccelTable;

 

    // 初始化全局字符串

    LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);

    LoadString(hInstance, IDC_WIN32_BASIC, szWindowClass, MAX_LOADSTRING);

    MyRegisterClass(hInstance);

 

    // 执行应用程序初始化:

    if (!InitInstance (hInstance, nCmdShow))

    {

       return FALSE;

    }

 

    hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_WIN32_BASIC));

 

    // 主消息循环:

    while (GetMessage(&msg, NULL, 0, 0))

    {

       if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))

       {

           TranslateMessage(&msg);

           DispatchMessage(&msg);

       }

    }

 

    return (int) msg.wParam;

}

 

 

 

//

//  函数: MyRegisterClass()

//

//  目的: 注册窗口类。

//

//  注释:

//

//    仅当希望

//    此代码与添加到Windows 95 中的“RegisterClassEx”

//    函数之前的Win32 系统兼容时,才需要此函数及其用法。调用此函数十分重要,

//    这样应用程序就可以获得关联的

//    格式正确的小图标。

//

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_WIN32_BASIC));

    wcex.hCursor      = LoadCursor(NULL, IDC_ARROW);

    wcex.hbrBackground   = (HBRUSH)(COLOR_WINDOW+1);

    wcex.lpszMenuName = MAKEINTRESOURCE(IDC_WIN32_BASIC);

    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 (wmId)

       {

        case IDM_ABOUT:

           //产生模式对话框

           DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);//IDD_ABOUTBOXabout对话框的ID

           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;

}

 

// “关于框的消息处理程序。

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;

}

 

这篇关于VS生成的最简WIN32窗口程序的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/902016

相关文章

java程序远程debug原理与配置全过程

《java程序远程debug原理与配置全过程》文章介绍了Java远程调试的JPDA体系,包含JVMTI监控JVM、JDWP传输调试命令、JDI提供调试接口,通过-Xdebug、-Xrunjdwp参数配... 目录背景组成模块间联系IBM对三个模块的详细介绍编程使用总结背景日常工作中,每个程序员都会遇到bu

k8s admin用户生成token方式

《k8sadmin用户生成token方式》用户使用Kubernetes1.28创建admin命名空间并部署,通过ClusterRoleBinding为jenkins用户授权集群级权限,生成并获取其t... 目录k8s admin用户生成token创建一个admin的命名空间查看k8s namespace 的

uni-app小程序项目中实现前端图片压缩实现方式(附详细代码)

《uni-app小程序项目中实现前端图片压缩实现方式(附详细代码)》在uni-app开发中,文件上传和图片处理是很常见的需求,但也经常会遇到各种问题,下面:本文主要介绍uni-app小程序项目中实... 目录方式一:使用<canvas>实现图片压缩(推荐,兼容性好)示例代码(小程序平台):方式二:使用uni

Vue3 如何通过json配置生成查询表单

《Vue3如何通过json配置生成查询表单》本文给大家介绍Vue3如何通过json配置生成查询表单,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录功能实现背景项目代码案例功能实现背景通过vue3实现后台管理项目一定含有表格功能,通常离不开表单

python获取指定名字的程序的文件路径的两种方法

《python获取指定名字的程序的文件路径的两种方法》本文主要介绍了python获取指定名字的程序的文件路径的两种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 最近在做项目,需要用到给定一个程序名字就可以自动获取到这个程序在Windows系统下的绝对路径,以下

Java使用Javassist动态生成HelloWorld类

《Java使用Javassist动态生成HelloWorld类》Javassist是一个非常强大的字节码操作和定义库,它允许开发者在运行时创建新的类或者修改现有的类,本文将简单介绍如何使用Javass... 目录1. Javassist简介2. 环境准备3. 动态生成HelloWorld类3.1 创建CtC

Python从Word文档中提取图片并生成PPT的操作代码

《Python从Word文档中提取图片并生成PPT的操作代码》在日常办公场景中,我们经常需要从Word文档中提取图片,并将这些图片整理到PowerPoint幻灯片中,手动完成这一任务既耗时又容易出错,... 目录引言背景与需求解决方案概述代码解析代码核心逻辑说明总结引言在日常办公场景中,我们经常需要从 W

C#使用Spire.XLS快速生成多表格Excel文件

《C#使用Spire.XLS快速生成多表格Excel文件》在日常开发中,我们经常需要将业务数据导出为结构清晰的Excel文件,本文将手把手教你使用Spire.XLS这个强大的.NET组件,只需几行C#... 目录一、Spire.XLS核心优势清单1.1 性能碾压:从3秒到0.5秒的质变1.2 批量操作的优雅

Python使用python-pptx自动化操作和生成PPT

《Python使用python-pptx自动化操作和生成PPT》这篇文章主要为大家详细介绍了如何使用python-pptx库实现PPT自动化,并提供实用的代码示例和应用场景,感兴趣的小伙伴可以跟随小编... 目录使用python-pptx操作PPT文档安装python-pptx基础概念创建新的PPT文档查看

基于Python编写自动化邮件发送程序(进阶版)

《基于Python编写自动化邮件发送程序(进阶版)》在数字化时代,自动化邮件发送功能已成为企业和个人提升工作效率的重要工具,本文将使用Python编写一个简单的自动化邮件发送程序,希望对大家有所帮助... 目录理解SMTP协议基础配置开发环境构建邮件发送函数核心逻辑实现完整发送流程添加附件支持功能实现htm