Win32编程day01 学习笔记

摘要:
Win32 Windows编程1 Windows编程基础2 Windows文本编码3窗口程序4窗口消息5菜单和快捷键6绘图7对话框8基本控件…..-Windows编程基础1 Win32应用程序的基本类型1.1控制台程序不需要完美的Windows窗口,但可以在DOS窗口模式下显示。Win32窗口程序:它将生成自己的窗口,并可以输出结果或接受来自窗口的输入。

Win32 Windows编程

 1 Windows编程基础
 2 Windows文字的编码
 3 窗口程序
 4 窗口消息
 5 菜单和加速键
 6 绘图
 7 对话框
 8 基本控件
  .....

一 Windows编程基础

 1 Win32应用程序的基本类型
 
   1.1 控制台程序
      不需要完善的Windows窗口,可以使用DOS窗口
      的方式显示。
   1.2 Win32窗口程序
      包含窗口的程序。可以通过窗口与程序进行交互。
   1.3 Win32库程序
      提供已有的代码,供其他程序使用。
      动态库:DLL 是在执行的时候可以加载的程序。
      静态库:LIB 是在编译链接时使用的程序。
   1.4 对比
      1.4.1 程序的入口函数不同
         控制台:main
         Win32窗口程序:WinMain
         动态库DLL:DllMain
         静态库LIB:无

      1.4.2 编译链接后存在的形式不同
         控制台和Win32窗口程序:EXE文件,可以执行
         动态库DLL:DLL文件,无法执行
         静态库LIB:LIB文件,无法执行
        
      1.4.3 执行结果不同
         控制台:使用DOS窗口,自己没有窗口。
         Win32窗口程序:会产生自己的窗口,
            可以将结果输出或者从窗口接受输入。
         动态库DLL:自己无法执行,提供可以执行
           的代码,当EXE等程序执行时,可以使用
           这些代码.执行时,该库必须在指定的路径.
         静态库LIB: 自己无法执行,提供给程序在
           编译链接时使用,将库中的代码嵌入到
           程序当中.执行时,不需要该库存在.

二 Win32窗口程序和编译环境

  2.1 开发和编译环境
    VC1.5 - VC6.0(2008) - VC10.0(2010)
 
    2.1.1 编译器 CL.EXE
      将源代码编译目标代码. OBJ文件.
    2.1.2 链接器 Link.EXE
      将OBJ文件和库函数链接.生成EXE.
    2.1.3 资源编译器 rc.exe
      将资源脚本编译成可以链接的文件(RES).

  2.2 头文件和库
    2.2.1 头文件 windows.h包含了windows
      常用的定义等.其他,还包含了一些其他的
      头文件:
       windef.h - 定义了各种的数据类型
    winbase.h- 定义了kernel的相关函数
    wingdi.h - 定义了绘图和文字
    winuser.h- 窗口 控件等函数
    winnt.h - 提供Unicode支持

    2.2.2 库
       kernel32.lib - 提供进程/线程/内存等等
           API函数支持
       user32.lib - 包括窗户/界面等等.
       gdi32.lib  - 提供绘图/文字等。
   
  2.3 Hello World程序
 
    2.3.1 入口函数

     int WinMain( 
        HINSTANCE hInstance, 
        HINSTANCE hPrevInstance,
        LPSTR pszCmdLine,
        int  nShowCmd )

     hInstance -  应用程序的实例句柄    
    hPrevInstance - 该应用程序的前一个实例句柄
    pszCmdLine - 命令行参数
    nShowCmd - 窗口的显示方式
   
    2.3.2 MessageBox
   
  2.4 编译环境的准备
 
    在VC98的BIN目录下VCVARS32.BAT

  2.5 编译CL.EXE
    CL的常用选项
     /c 只编译不链接
     /TC 编译C文件
     /TP 编译C++文件
           如果不指定,CL会根据文件类型自动区分
       /I 头文件所在路径
     字符大小写敏感
  2.6 链接LINK.EXE
     LINK常用选项:
      /out:文件名,链接成指定文件名的程序
     /LIBPATH:LIB文件存放的路径, /LIBPATH:"E:\XXX"
     /SUBSYSTEM: CONSOLE/WINDOW
    字符大小写不敏感

  2.7 执行
     正常执行或带参数执行
    
三 第一个窗口程序

   3.1 入口函数WinMain
   3.2 窗口处理函数
     当窗口处理消息事件时,系统调用该函数

       LRESULT CALLBACK WindowProc(
      HWND hwnd,      // 窗口的句柄
      UINT uMsg,      // 消息的ID号
      WPARAM wParam,  // 消息所对应的参数
      LPARAM lParam   // 消息所对应的参数
        );

   3.3 注册窗口类型

    typedef struct _WNDCLASS { 
    UINT    style;  //窗口类的风格
    WNDPROC lpfnWndProc; //窗口处理函数
    int     cbClsExtra; //窗口类附加数据大小
    int     cbWndExtra; //窗口附加数据大小
    HANDLE  hInstance; //当前应用程序的实例句柄
    HICON   hIcon; //窗口图标
    HCURSOR hCursor; //窗口的鼠标
    HBRUSH  hbrBackground; //窗口的背景画刷
    LPCTSTR lpszMenuName; //菜单
    LPCTSTR lpszClassName; //类型名称
    } WNDCLASS;

    注册函数 RegisterClass
   3.4 创建窗口

     HWND CreateWindow(
          LPCTSTR lpClassName,  //窗口类型名称
          LPCTSTR lpWindowName, //窗口名称
          DWORD dwStyle,        //窗口类型
          int x,                //窗口的左上角X坐边
          int y,                //窗口的左上角X坐边
          int nWidth,           //窗口的宽度
          int nHeight,          //窗口的高度
          HWND hWndParent,      //父窗口句柄
          HMENU hMenu,          //窗口菜单句柄
        HANDLE hInstance,     //应用程序的实例句柄
        LPVOID lpParam        //创建的参数,一般为NULL
          );

   3.5 显示窗口
     ShowWindow 显示窗口

        BOOL ShowWindow(
              HWND hWnd,     //显示的窗口句柄
            int nCmdShow   //显示的方式
              );

     UpdateWindow 刷新窗口
   3.6 消息处理
     GetMessage 获取消息
     DispatchMessage 派发消息
  
   3.7 程序退出
     窗口销毁时,退出程序。在WndProc中实现。
        WM_DESTROY: 当窗口销毁时,会调用WndProc
          传递给使用者。
        PostQuitMessage:发送一个退出消息。

Win32编程day01 学习笔记第1张Win32编程day01 学习笔记第2张View Code
#include <windows.h>

HINSTANCE g_hInst = NULL;
//2. 窗口处理函数
LRESULT CALLBACK WndProc(
                                HWND hWnd,
                                UINT nMsg,
                                WPARAM wParam,
                                LPARAM lParam)
{
    switch(nMsg)
    {
        case WM_DESTROY:
            PostQuitMessage(0); 
            return 0;
    }
    return DefWindowProc(hWnd, nMsg, wParam, lParam);
}

//3. 注册窗口类型
BOOL MyRegister(LPSTR pszClassName)
{
    WNDCLASS wc = {0};
    ATOM nAtom = 0;
    wc.style = CS_VREDRAW|CS_HREDRAW;
    wc.lpfnWndProc = WndProc;
    wc.cbClsExtra = 0;
    wc.cbWndExtra = 0;
    wc.hInstance = g_hInst;
    wc.hIcon = NULL;
    wc.hCursor = NULL;
    wc.hbrBackground = (HBRUSH)(COLOR_BTNFACE);
    wc.lpszMenuName = NULL;
    wc.lpszClassName = pszClassName;
    
    nAtom = RegisterClass(&wc);
    if(0 == nAtom)
    {
        MessageBox(NULL, "Register Failed", "Error", MB_OK|MB_ICONWARNING);
    }
    else
    {
        MessageBox(NULL, "Register Succeeded", "Succeeded", MB_OK);
    }
    return TRUE;
}

//4. 窗口创建
HWND MyCreate(LPSTR pszClassName)
{
    HWND hWnd = CreateWindow(pszClassName, 
                    "Hello Windows", 
                    WS_OVERLAPPEDWINDOW, 
                    100, 
                    100, 
                    300, 
                    500, 
                    NULL, 
                    NULL, 
                    g_hInst, 
                    NULL);
    if(NULL == hWnd)
    {
        MessageBox(NULL, "CreateWnd Failed", "Error", MB_OK);
    }
    else
    {
        MessageBox(NULL, "CreateWnd Succeeded", "Succeeded", MB_OK);
    }
    return hWnd;
}

//5. 显示窗口
void DisplayWnd(HWND hWnd)
{
    ShowWindow(hWnd, SW_SHOW);
    UpdateWindow(hWnd);
}

//6. 消息处理
void Message()
{
    MSG msg = {0};
    while(GetMessage(&msg, NULL, 0, 0))
    {
        DispatchMessage(&msg);
    }
}

//1. 入口函数
int WINAPI WinMain(
                                        HINSTANCE hInstance,
                                        HINSTANCE hPrevInstance,
                                        LPSTR pszCmdLine,
                                        int nShowCmd)
{
    HWND hWnd = NULL;
    g_hInst = hInstance;
    MyRegister("MyWnd");
    hWnd = MyCreate("MyWnd");
    DisplayWnd(hWnd);
    Message();
    return 0;
}

四 资源的处理

 4.1 资源和资源脚本
    资源:ICON/CUSRUR/BITMAP/MENU......
    资源脚本: 扩展名为rc文件。
 4.2 编译资源
    使用rc.exe编译资源,生成RES文件
 4.3 链接资源
    使用link.exe将RES文件链接到程序当中
 4.4 ICON的使用
   LoadIcon从指定程序中加载ICON资源。
  

五 NMAKE和Makefile

   1 NMAKE - 命令解释器
     Makefile - 脚本语言定义的文件

免责声明:文章转载自《Win32编程day01 学习笔记》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Ubuntu 12.04 Subversion及GUI客户端RabbitVCS安装(转载)HTTP状态码下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

iOS开发-单例模式

什么是单例模式?>是开发设计模式(共23种)中的1种>它可以保证在程序运行过程,一个类只有一个实例(一个对象),而且该实例易于供外界访问,从而方便地控制了实例个数,并节约系统资源>使用场合:在整个应用程序中,共享一份资源(这份资源只需要创建初始化1次) iOS系统中的一些单例UIApplication(应用程序实例) NSNoti...

Linux命令发送Http的get或post请求(curl和wget两种方法)

    Http请求指的是客户端向服务器的请求消息,Http请求主要分为get或post两种,在Linux系统下可以用curl和wget命令来模拟Http的请求。下面就来介绍一下Linux系统如何模拟Http的get或post请求。 一、get请求:   1、使用curl命令:   curl “http://www.baidu.com” 如果这里的URL指...

协议(Protocol) 和代理(Delegate)

1、概念与组成 delegate是iOS中一种常见的设计模式,是一种消息传递的的方式,常见的消息传递方式还有以下几种: 通知:在iOS中由通知中心进行消息接收和消息广播,是一种一对多的消息传递方式。 代理:是一种通用的设计模式,iOS中对代理支持的很好,由代理对象、委托者、协议三部分组成。 block:iOS4.0中引入的一种回调方法,可以将回调处理代...

Autoit安装及启动

1、Autoit下载:   官网下载地址:https://www.autoitscript.com/site/autoit/downloads/   提供百度网盘下载:https://pan.baidu.com/s/17l5fOlz_ZHjoHxnQwiQBYA(如果链接失效,请在评论中索要,会在评论中再次给出) 2、Autoit安装:   安装教程一般百...

DevOps专题|Lua引擎打造超轻量级客户端

Lua 作为一门轻量级脚本语言,源码使用标准C语言发布,语法简洁,非常适合嵌入式、客户端、游戏等场景。 Lua引擎语言特点 轻量级 源码简单,以lua最新版5.3.5为例,加上lua自身提供的lib库,仅30多个.c文件,编译后仅200多k,strip后经upx压缩,可控制在100k以下。 语法简洁 小巧灵活,支持闭包,有GC机制,通过语法糖可实现面向对...

自己动手设计并实现一个linux嵌入式UI框架(设计)

  看了“自己动手设计并实现一个linux嵌入式UI框架”显然没有尽兴,因为还没有看到庐山真面目,那我今天继续,先来说说,我用到了哪些知识背景。如:C语言基础知识,尤其是指针、函数指针、内存分布,linux 基础知识、如消息队列、framebuffer、多线程、多线程同步、等,数据结构、算法(如链表、队列等),window .netframework 框架...