zoukankan      html  css  js  c++  java
  • Windows应用程序组成及编程步骤

    Windows应用程序组成及编程步骤:

    1、应用程序的组成:
    一个完整的Windows应用程序通常由五种类型的文件组成
    1.C语言源程序文件
    2.头文件
    3.模块定义文件
    4.资源描述文件
    5.项目文件

    2、源程序组成结构:
    1.所有应用程序的入口,类似main函数
    2.完成一系列的定义和初始化,并产生消息循环

    Windows应用程序-> 入口函数WinMain,窗口函数WndProc->构成基本框架->
    包含多种数据类型、数据结构与函数等。

    /*WinMain和WndProc是Windows应用程序的主体*/
    (1)WinMain函数
    1.基本组成部分:函数说明、初始化和消息循环

    2.功能:注册窗口类,建立窗口及执行必要的初始化
    进入消息循环,具接受的消息调用相应的处理过程
    当消息循环检索到WM_QUIT时终止程序

    3.WinMain函数说明

     1 int WINAPI WinMain
     2 (
     3 HINSTANCE hThisInst,//应用程序当前实例句柄
     4 HINSTANCE hPrevInst,//应用程序其他实例句柄
     5 LPSTR lpszCmdLine,//指向程序命令行参数的指针
     6 int nCmdShow    //应用程序开始执行时窗口显示方式的整数值标识
     7 )
     8 {
     9 return 010 }


    注意!Windows是多任务管理的,同一应用程序的多个窗口可能会同时存在,
    Windows系统对每个窗口的执行称为一个实例,并用一个实例句柄来唯一标识
    (2)初始化
    窗口类的定义:定义窗口类的形式与功能->LoadIcon/LoadCursor/GetStockObject
    窗口类的注册:窗口类必须先注册后使用->RegisterClass
    创建窗口实例:CreatWindow
    显示窗口:ShowWindow,UpdateWindow
    (a)窗口类定义
    通过给窗口类数据结构WNDCLASS赋值完成,该数据结构中包含窗口类的各种
    属性。窗口类定义常用以下函数:
    LoadIcon的作用是在应用程序中加载一个窗口图标。其原型为:
    HICON LoadIcon(HINSTANCE hInstance,LPCTSTR IpIconName)
    第一个参数:图标资源所在的模块句柄,NULL则使用系统预定义图标
    第二个参数:图标资源名或系统预定义图标标识名

    //窗口类定义
    wndclass.style = 0;    //窗口类型为缺省类型
    wndclass.IpfnWndProc = WndProc;    //定义窗口过程函数
    wndclass.cbClsExtra = 0;    //窗口类无拓展
    wndclass.cbWndExtra = 0;    //窗口实例无拓展
    wndclass.hInstance = hinstance;    //当前实例句柄
    wndclass.hIcon = LocadIcon(NULL,IDI_APPLICATION);//窗口的最小化图标为缺省图标
    wndclass.hCursor = LocadCursor(NULL,IDC_ARROW);//窗口采用箭头光标
    wndclass.hbrBackground = GetStockObject(WHITE_BRUSH);//窗口背景为白色
    wndclass.IpszMenuName = NULL;//窗口中无菜单
    wndclass.IpszClassName = IpszClassName;//窗口类名为"窗口"

    LoadCursor的作用是在应用程序中加载一个窗口光标
    HCURSOR LoadCursor(HINSTANCE hInstance,LPCTSTR lpCursorName)
    第一个参数:光标资源所在的模块句柄,NULL则使用系统预定义图标
    第二个参数:光标资源名或系统预定义图标标识名

    应用程序调用函数GetStockObject获取系统提供的背景刷
    HBRUSH GetStockObject(int nBrush);

    (b)注册窗口类
    Windows系统本身提供部分预定义的窗口类,程序员也可以自定义窗口类,
    窗口类必须先注册后使用。窗口了的注册由函数
    RegisterClass()实现。

    RegisterClass(&wndclass);//wndclass为窗口类结构
    RegisterClass函数返回为布尔值,注册成功则返回真

    (c)创建窗口实例
    创建一个窗口类的实例由函数CreateWindow()实现

    函数原型如下:

    HWND CreateWindow
    (
    LPCTSTR lpszClassName,    //窗口类名
    LPCTSTR lpszTitle,    //窗口标题名
    DWORD dwStyle,    //创建窗口的样式
    int x,y,    //窗口左上角坐标
    int nWidth,nHeight,    //窗口宽度和高度
    HWND hwndParent,    //该窗口的父窗口句柄
    HMENU hMenu,    //窗口主菜单句柄
    HINSTACNCE hInstcane,    //创建窗口的应用程序当前句柄
    LPVOID lpParam    //指向一个传递给窗口的参数值的指针
    )

    (d)显示窗口
    窗口类的显示由ShowWindow和UpdateWindow函数实现。应用程序调用
    ShowWindow函数在屏幕上显示窗口
    ShowWindow(hwnd,nCmdshow);//nCmdshow为窗口显示形式标识
    SW_HIDE 隐藏窗口
    SW_SHOWNORMAL 显示并激活窗口
    SW_SHOWMINIMIZE 显示并最小化窗口
    SW_SHOWMAXMIZE 显示并最大化窗口
    SW_SHOWNOACTIVE 显示但不激活窗口
    SW_RESTORE 恢复窗口的原来位置及尺寸
    显示窗口后,应用程序调用UpdateWindow更新并绘制用户区,
    并发出WM_PAINT消息。
    UpdateWindow(hwnd);

    (3)消息循环
    Windows将产生的消息在WinMain函数中传给窗口函数的相应过程处理
    从消息队列中读取一条消息,并将消息放在MSG结构体中

    消息循环的常见格式如下:

    1 MSG Msg;
    2 3 while (GetMessage (&Msg,NULL,0,0))
    4 { 
    5 TranslateMessage(&Msg);//将消息的虚拟键转换为字符信息
    6 DispatchMessage(&Msg); //将消息传送到指定窗口函数
    7 }


    其中函数GetMessage形式为:
    (返回零值,即检索到WM_QUIT消息,程序结束循环并退出)

    1 GetMessage
    2 (lpMSG,    //指向MSG结构的指针
    3 hwnd,
    4 nMsgFilteMin, //用于消息过滤的最小消息号值
    5 nMsgFilterMax //用于消息过滤的最大消息号值
    6
  • 相关阅读:
    Redis基础
    MySQL基础
    MySQL基础
    MySQL基础
    MySQL基础
    Hello 博客园
    Linux | 常用命令
    JVM | 性能调优
    JVM | 垃圾回收
    学习笔记 | 分布式技术
  • 原文地址:https://www.cnblogs.com/veis/p/6940039.html
Copyright © 2011-2022 走看看