Windows编程基础,第一个Windows程序,注册窗口,创建窗口(上)

简介: Windows编程基础,第一个Windows程序,注册窗口,创建窗口

Win32编程,指的是用Window提供的API(Application Programming Interface)为Window编写应用程序。Windows编程,大家也通常称为win32编程,或win32 SDK编程,其含义是针对32位Windows操作系统。

在这一章节中,我们会带大家认识Windows应用程序,编写第一个Windows程序,带大家学习注册窗口和创建窗口。

一.Windows应用程序分类

在Windows平台下,我们可以将应用程序大致分为一下几类:

  • 控制台程序
  • 窗口程序
  • 库程序(静态库.lib,动态库.dll)

二.开发工具和库

开发工具我们现在大多数都是用visual studio,visual studio开发平台集成了很多工具,非常方便了我们使用,这里我来带领大家看看编译程序到底是如何实现的:

  • 编译器cl.exi,可以将我们写好的.c或者.cpp编译成目标代码.obj文件
  • 链接器LINK.EXE,将目标代码,库链接生成最终文件
  • 资源编译器RC.EXE(编译.rc文件<脚本语言代码>),将资源(应用程序图标等)编译,最终通过链接器生成最终文件。
    接下来带大家看看几个重要的库文件:
    Windows库:
  • Kernel32.dll:提供核心API,例如进程,线程,内存管理
  • user32.dll:提供了窗口,消息等API
  • gdi32.dll:绘图相关API
    库和头文件
  • windows.h:所有Windows头文件的集合
  • windef.h:Windows数据类型
  • winbase.h:kernel32的API
  • wingdi.h:gdi32的API
  • winuser.h:user32的API
  • winnt.h:UNICODE字符集支持

三.程序编译过程

  • 环境准备:vcvars32.bat
  • 编译程序:cl.exe xxxxxx.c xxxxxxx.cpp
  • 链接程序:LINK.EXE xxxxxx,obj xxxxx.lib
  • 编写资源.rc资源脚本文件
  • 编译.rc文件:rc.exe xxx.res
  • 将资源链接到程序中
    这里给出一张图帮助大家理解:

四.第一个Windows程序

// Win32VS版本.cpp : 定义应用程序的入口点。
#include "framework.h"
#include "Win32VS版本.h"
#define MAX_LOADSTRING 100
LRESULT CALLBACK WindowProc(
  IN  HWND hwnd,
  IN  UINT uMsg,
  IN  WPARAM wParam,
  IN  LPARAM lParam
);
int APIENTRY wWinMain(_In_ HINSTANCE hInstance,
                     _In_opt_ HINSTANCE hPrevInstance,
                     _In_ LPWSTR    lpCmdLine,
                     _In_ int       nCmdShow)
{
    //窗口类名
    TCHAR className[] = TEXT("My First Windows.");
    //创建窗口对象
    WNDCLASS wndclass = { 0 };
    wndclass.hbrBackground = (HBRUSH)0;            //窗口背景颜色
    wndclass.lpfnWndProc = WindowProc;                    //窗口的过程函数
    wndclass.lpszClassName = className;                     //窗口的类名字
    wndclass.hInstance = hInstance;                 //定义窗口类的应用程序的实例句柄
    //注册窗口
    RegisterClass(&wndclass);
    //创建窗口
    HWND hwnd = CreateWindow(
        className,                         //lpname类名
        TEXT("我的第一个窗口。"),          //窗口标题
        WS_OVERLAPPEDWINDOW,               //dwStyle
        10,
        10,
        600,
        300,
        NULL,
        NULL,
        hInstance,
        NULL);
    //显示窗口
    ShowWindow(hwnd, SW_SHOW);
    // 主消息循环:
    MSG msg;
    while (GetMessage(&msg, nullptr, 0, 0))
    {
        if (!TranslateAccelerator(msg.hwnd,NULL, &msg))
        {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
    }
    return (int) msg.wParam;
}
LRESULT CALLBACK WindowProc(
  IN  HWND hwnd,
  IN  UINT uMsg,
  IN  WPARAM wParam,
  IN  LPARAM lParam
)
{
  switch (uMsg)
  {
    //窗口消息              
  case WM_CREATE:
  {
    CREATESTRUCT* createst = (CREATESTRUCT*)lParam;
    return 0;
  }
  case WM_MOVE:
  {
    POINTS points = MAKEPOINTS(lParam);
    return 0;
  }
  case WM_SIZE:
  {
    int newWidth = (int)(short)LOWORD(lParam);
    int newHeight = (int)(short)HIWORD(lParam);
    return 0;
  }
  case WM_DESTROY:
  {
    PostQuitMessage(0);
    return 0;
  }
  //键盘消息              
  case WM_KEYUP:
  {
    return 0;
  }
  case WM_KEYDOWN:
  {
    return 0;
  }
  //鼠标消息              
  case WM_LBUTTONDOWN:
  {
    POINTS points = MAKEPOINTS(lParam);
    return 0;
  }
  }
  return DefWindowProc(hwnd, uMsg, wParam, lParam);
}

在这里向大家介绍一下编写一个Windows程序必要的步骤:

  • 1.定义程序入口WinMain函数
  • 2.定义窗口处理函数(可以自定义,作用:处理消息)
  • 3.注册窗口类(向操作系统内核中写入一段数据)
  • 4.创建窗口(在内存中创建窗口)
  • 5.显示窗口(绘制窗口图像)
  • 6.消息循环(获取,翻译,派发)
  • 7.消息处理
相关文章
|
11月前
|
安全 Ubuntu iOS开发
Nessus Professional 10.10 Auto Installer for Windows - Nessus 自动化安装程序
Nessus Professional 10.10 Auto Installer for Windows - Nessus 自动化安装程序
353 3
Nessus Professional 10.10 Auto Installer for Windows - Nessus 自动化安装程序
|
Windows
Windows下版本控制器(SVN)-验证是否安装成功+配置版本库+启动服务器端程序
Windows下版本控制器(SVN)-验证是否安装成功+配置版本库+启动服务器端程序
380 2
|
Windows
Windows下版本控制器(SVN)-启动服务器端程序
Windows下版本控制器(SVN)-启动服务器端程序
698 4
|
Ubuntu Linux Windows
如何在Ubuntu系统中安装Wine,借此来运行Windows程序
熟悉的登录画面出现,在Ubuntu系统中扫描登录微信程序。
|
Unix Linux 编译器
解决在Windows平台上运行Golang程序时出现的syscall.SIGUSR1未定义错误。
通过这种结构,你的代码既可以在支持 SIGUSR1 信号的系统上正常工作,又可以在不支持这些信号的 Windows 系统上编译通过,确保跨平台的兼容性和功能的完整性。
431 0
|
Shell Windows
Windows 注册和取消注册一个dll或者ocx
原文: Windows 注册和取消注册一个dll或者ocx   一、DLL是什么        DLL,是Dynamic Link Library 的缩写形式,中文名称为动态链接库。        DLL是一个包含可由多个程序同时使用的代码和数据的库,DLL不是可执行文件。
1853 0
|
11月前
|
安全 数据安全/隐私保护 虚拟化
Windows Server 2022 中文版、英文版下载 (2025 年 10 月更新)
Windows Server 2022 中文版、英文版下载 (2025 年 10 月更新)
2511 2
Windows Server 2022 中文版、英文版下载 (2025 年 10 月更新)
|
11月前
|
安全 Unix 物联网
Windows 7 & Windows Server 2008 R2 简体中文版下载 (2025 年 10 月更新)
Windows 7 & Windows Server 2008 R2 简体中文版下载 (2025 年 10 月更新)
1105 0
Windows 7 & Windows Server 2008 R2 简体中文版下载 (2025 年 10 月更新)
|
12月前
|
运维 安全 网络安全
Windows Server 2019拨号“找不到设备”?Error 1058解决指南
Windows Server 2019拨号报错1058?别急!这不是硬件故障,而是关键服务被禁用。通过“服务依存关系”排查,依次启动“安全套接字隧道协议”“远程接入连接管理”和“路由与远程访问”服务,仅需4步即可恢复PPPoE或VPN拨号功能,轻松解决网络中断问题。
804 1
|
11月前
|
存储 SQL 人工智能
Windows Server 2025 中文版、英文版下载 (2025 年 10 月更新)
Windows Server 2025 中文版、英文版下载 (2025 年 10 月更新)
1299 0