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.消息处理
相关文章
|
21天前
|
消息中间件 编译器 API
Windows窗口程序
Windows窗口程序
|
2月前
|
Windows
实现Windows程序的数据更新
实现Windows程序的数据更新
13 0
|
2月前
|
Windows
构建布局良好的Windows程序
构建布局良好的Windows程序
11 0
|
2月前
|
C# Windows
初识Windows程序
初识Windows程序
10 0
|
21天前
|
编译器 C语言 C++
|
6天前
|
API C++ Windows
windows编程入门_链接错误的配置
windows编程入门_链接错误的配置
12 0
|
Shell Windows
Windows 注册和取消注册一个dll或者ocx
原文: Windows 注册和取消注册一个dll或者ocx   一、DLL是什么        DLL,是Dynamic Link Library 的缩写形式,中文名称为动态链接库。        DLL是一个包含可由多个程序同时使用的代码和数据的库,DLL不是可执行文件。
1350 0
|
2月前
|
安全 数据安全/隐私保护 Windows
解锁安全之门,Windows Server 2019密码修改攻略大揭秘
解锁安全之门,Windows Server 2019密码修改攻略大揭秘
|
2月前
|
存储 安全 网络安全
铁壁如墙-WINDOWS SERVER 2019勒索病毒终极防御指南
铁壁如墙-WINDOWS SERVER 2019勒索病毒终极防御指南
|
2月前
|
网络协议 数据安全/隐私保护 Windows
Windows Server 各版本搭建域控制器实现通过域管理用户(03~19)
Windows Server 各版本搭建域控制器实现通过域管理用户(03~19)

热门文章

最新文章