注册通行证 用户名 密码
  • 文章投稿
  • 博客
  • 论坛
  • 设为首页
  • 加入收藏
jztop.com网络技术
  • 首页
  • | iT新闻
  • | 操作系统
  • | 组网建网
  • | 网络安全
  • | 程序开发
  • | 办公一族
  • | 工具软件
  • | 网页制作
  • | 多媒体制作
  • | 网吧技术
  • | 服务器
  • | 专题教程
Vista | 软件评测 | 系统备份 | 优化 | 进程 | 聊天 | 病毒 | Linux | 黑客 | 防火墙 | 数据库 | Web开发 | Java | Word | 游戏 | 32位开发 | 移动开发
当前位置:首页 > 程序开发 > 32位开发 > C/C++ 内容正文:Visual C++ 入门精解-第三部分

Visual C++ 入门精解-第三部分

发布时间:2006-05-05 19:02:09 来源:网易学院 网友评论 0 条

Windows应用程序的基本运行机制与HelloWin程序详解

总的来说最基本的Windows应用程序的运行执行顺序总是以如下的基本顺序执行的。

顺序结构:

调用WinMain函数开始执行--à定义窗口类--à初始化窗口类--à窗口的实例化--à通过消息循环获取消息并将消息发送给消息处理函数做出相应的操作

由于windows应用程序运行的逻辑结构特殊所以代码的详细解释笔者就不把程序于叙述分开了了,这样有利于阅读与分析。

分析代码如下:

//程序作者:管宁 
//
站点:www.cndev-lab.com 
//
所有稿件均有版权,如要转载,请务必注明出处和作者 

#include <windows.h>

#pragma comment(lib,"winmm.lib")//为了要播放声音,必须导入这个库

LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM);

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,PSTR szCmdLine, int iCmdShow)

/*

         HINSTANCE 类型的含义为实例句柄。

                   hInstance 事实上就是当前应用程序自身的标识代号,代号通常都是一个32位整数。

                   hPrevInstance 与过去的16位应用程序有关系,表示指向前一个实例的句柄。

         PSTR 类型的含义是指向以/0结尾的字符串指针。

                   szCmdLine 前面的sz同样是表示指向以/0结尾的字符串指针,这个对象用于保存命令行。

         最后iCmdShow是一个整型数据,标记了程序最初的显示状态。

                   为SW_SHOWNORAML的时候为一般大小显示方式。

                   为SW_SHOWMAXIMIZED的时候为最大化显示方式。

                   为SW_SHOWMINNOACTIVE的时候程序将显示在任务栏上。

*/

{

    static char szAppName[] = TEXT("HelloWin");//预先定义一个c风格字符串,稍后用于设置窗口类名称。

    WNDCLASS wndclass;//定义窗口类对象

/*

         在这里不得不说一下的是,窗口类事实上是struct结构体,内部有10个分量,他们是用来于初始化窗口类对象而用的。

         这个结构体在winuser.h头文件中定义,从方式上来说,分为ASCII版的WNDCLASSA和Unicode版的WNDCLASSW两个。

         typedef struct tagWNDCLASSA {

                   UINT         style;

                   WNDPROC     lpfnWndProc;

                   int           cbClsExtra;

                   int           cbWndExtra;

                   HINSTANCE   hInstance;

                   HICON        hIcon;

                   HCURSOR     hCursor;

                   HBRUSH      hbrBackground;

                   LPCSTR       lpszMenuName;

                   LPCSTR       lpszClassName;

         } WNDCLASSA, *PWNDCLASSA, NEAR *NPWNDCLASSA, FAR *LPWNDCLASSA;

         typedef struct tagWNDCLASSW {

                   UINT          style;

                   WNDPROC     lpfnWndProc;

                   int           cbClsExtra;

                   int           cbWndExtra;

                   HINSTANCE   hInstance;

                   HICON        hIcon;

                   HCURSOR     hCursor;

                   HBRUSH      hbrBackground;

                   LPCWSTR     lpszMenuName;

                   LPCWSTR     lpszClassName;

         } WNDCLASSW, *PWNDCLASSW, NEAR *NPWNDCLASSW, FAR *LPWNDCLASSW;

*/

 

//------------------------------- 窗口类对象初始化过程 ------------------------------------

         wndclass.style         = CS_HREDRAW | CS_VREDRAW;

         /*

                   设置窗口类对象的样式风格,CS_HREDRAW | CS_VREDRAW这两个值是通过位运算的与运算结合起来的。

                   表示了窗口在改变了水平和垂直大小的时候,窗口要强迫刷新。

                   这些通过define定义的标识,可以在WinUser.h头文件中找到。

                   #define CS_VREDRAW             0x0001

                   #define CS_HREDRAW             0x0002

                   #define CS_DBLCLKS              0x0008

                   #define CS_OWNDC                0x0020

                   #define CS_CLASSDC             0x0040

                   #define CS_PARENTDC           0x0080

                   #define CS_NOCLOSE            0x0200

                   #define CS_SAVEBITS             0x0800

                   #define CS_BYTEALIGNCLIENT    0x1000

                   #define CS_BYTEALIGNWINDOW   0x2000

                   #define CS_GLOBALCLASS       0x4000

                   #define CS_IME                 0x00010000

         */

 

         wndclass.lpfnWndProc   = WndProc ;//指定窗口的处理函数为WndProc,WndProc将处理windows消息。

    wndclass.cbClsExtra    = 0;//窗口类无扩展

    wndclass.cbWndExtra   = 0;//窗口实例无扩展

    wndclass.hInstance     = hInstance;//指定当前应用程序实例句柄,也就是程序当前的标识号。

    wndclass.hIcon         = LoadIcon (NULL,IDI_APPLICATION);

         /*

                   通过LoadIcon函数设置应用程序窗口标题的icon图标。

                   HICON LoadIcon(HINSTANCE hInstance,LPCTSTR lpIconName);

                   函数返回HICON类型的图标句柄。

                   第一个参数表示当前应用程序的窗口句柄,第二个参数表示图标。

                   默认状态下,第一个参数为NULL,第二个为IDI_APPLICATION,表示使用系统默认提供的图标,可以在WinUser.h头文件中找到。

                   #define IDI_APPLICATION     32512

         */

         wndclass.hCursor  = LoadCursor (NULL, IDC_ARROW) ;

         /*

                   通过LoadCursor函数设置应用程序窗口光标样式。

                   HCURSOR LoadCursor(HINSTANCE hInstance,LPCTSTR lpCursorName);

                   函数返回HCURSOR类型的光标句柄。

                   第一个参数表示当前应用程序的窗口句柄,第二个参数表示光标。

                   默认状态下,第一个参数为NULL,第二个为IDC_ARROW,表示使用系统默认提供的光标,可以在WinUser.h头文件中找到。

                   #define IDC_ARROW           MAKEINTRESOURCE(32512)

         */

         wndclass.hbrBackground  =  (HBRUSH)GetStockObject (WHITE_BRUSH);

         /*

                  通过GetStockObject函数设置应用程序窗口的背景颜色。

                   HGDIOBJ GetStockObject(int fnObject);

                   函数返回HCURSOR类型的GDI对象句柄,为了程序能够正确执行,必须把HGDIOBJ类型强制转换成HBRUSH画刷句柄。

                   参数表示当前使用的画刷颜色。

                   这些常量的定义可以在WinGDI.h头文件中找到。

                   #define WHITE_BRUSH         0

                   #define LTGRAY_BRUSH        1

                   #define GRAY_BRUSH          2

                   #define DKGRAY_BRUSH        3

                   #define BLACK_BRUSH         4

                   #define NULL_BRUSH          5

                   #define HOLLOW_BRUSH        NULL_BRUSH

         */

         wndclass.lpszMenuName  = NULL;

     wndclass.lpszClassName = szAppName;//窗口类对象的名称

//-----------------------------------------------------------------------------------------

         RegisterClass (&wndclass);

         /*

                   注册窗口类,参数为窗口类对象的指针。

                   函数原形为:

                   ATOM RegisterClass(CONST WNDCLASS *lpWndClass);

         */

 

//--------------------------  实例化过程  -------------------------------------------------

    HWND   hwnd ; //创建用于保存窗口句柄的对象,窗口句柄是系统识别不同窗口的依据,它只是个代号。

    hwnd = CreateWindow(

                                                                 szAppName,            // 窗口类名称

                                                                 "你好世界",           // 窗口标题

                                                                 WS_OVERLAPPEDWINDOW,  // 窗口样式

                                                                 CW_USEDEFAULT,        // 初始的窗口x轴位置

                                                                 CW_USEDEFAULT,        // 初始的窗口y轴位置

                                                                 CW_USEDEFAULT,        // 初始的窗口x轴大小

                                                                 CW_USEDEFAULT,        // 初始的窗口y轴大小

                                                                 NULL,                 // 父窗口句柄

                                                                 NULL,                 // 窗口功能表句柄

                                                                 hInstance,            // 应用程序实例句柄

                                                                  NULL                  // 建立参数,这个参数可以存取后面程序中可能引用到的资料。

                                                        );

         /*

                   在窗口类对象的初始化过程中,我们定义了窗口的一些简单一般特征,比如背景颜色呀,光标呀,等等。。。

                   但是在利用CreateWindow创建窗口的时候可以设置更多的细节,比如窗口标题这些。

                   函数原形如下:

                   HWND CreateWindow(  LPCTSTR lpClassName,

                                                                 LPCTSTR lpWindowName,

                                                                 DWORD dwStyle,

                                                                 int x,

                                                                 int y,

                                                                 int nWidth,

                                                                 int nHeight,

                                                                 HWND hWndParent,

                                                                 HMENU hMenu,

                                                                 HINSTANCE hInstance,

                                                                 LPVOID lpParam

                                                        );

     

相关文章
  • Visual C#中用WMI获取远程计算机信息
  • Visual C#中用WMI控制远程计算机
  • Visual C#中用WMI编写黑客程序之简介
  • Visual C++ 2005中的突破性变化
  • Visual Studio 2005集成开发环境图解
【评论】【收藏本文】【打印】【关闭】
上一篇文章:C++箴言:绝不在构造或析构期调用虚函数
下一篇文章:Visual C++ 入门精解-WINDOWS应用程序设计用到的基本术语
讨论区
查看
已有 0 位对此新闻感兴趣的网友发表了看法
匿名发表
注册通行证 登陆
图文阅读推荐
推荐阅讯
  • Visual C++ 入门精解-第一部分
  • c/c++中结构体(struct)知识点强化,链表的学
  • C++启蒙之用C++制作程序
  • VC++编程实现对波形数据的频谱分析
  • 解析Cookie欺骗实现过程及具体应用
  • 用VC++模拟实现QQ密码盗窃软件
  • C++类的继承与多重继承的访问控制
  • VC++实现对远程计算机屏幕的监视
  • 透过代理看世界 用VC++实现http代理
  • 在MFC下如何定义全局变量和全局函数
阅读排行
  • 1.Borland 发布C++ Builder 2006 RAD 环境
  • 2.C/C++程序员应聘常见面试题深入剖析
  • 3.Visual C++常用数据类型转换详解
  • 4.C++中的 static 关键字
  • 5.利用VC++实现局域网实时视频传输
  • 6.浅谈C/C++内存泄漏及其检测工具
  • 7.英国投票否决C++/CLI 微软强攻ISO标准受挫
  • 8.VC++下用MSComm控件实现串口通讯
  • 9.伪随机数生成及在VC++中的实现
  • 10.VC++编程实现对波形数据的频谱分析
专题教程
  • 大话G游 专题:手机病毒揭密
  • ARP攻击防范与解决方案 路由故障处理手册
  • Picasa中文版_Picasa教程 专题:清除流氓软件
  • Firefox专题 seo搜索引擎优化专区
  • 重装Windows必知的事情 装机之必备软件大行动
病毒专杀栏
  • 杀毒软件反被病毒杀 连"救命"都不能喊
  • 金山ARP防火墙
  • 还原卡神话破灭“机器狗”病毒来势汹汹
  • cctv经济半小时:你的手机现在安全吗?
  • 新挂马方式开始流行 ARP挂马称雄局域网
  • 木马和病毒清除的通用解法
  • IP地址不再冲突 查找ARP攻击者元凶
  • 教你几招识别和防御Web网页木马
  • 分析:封杀BT只是暂时的止痛药
  • QQ爆危险漏洞,“QQ游戏邀请大盗”邀请你玩病
关于我们 | 诚聘英才 | 联系我们 | 版权声明 | 网站大事 | 网站地图 | 意见建议
CopyRight 2005-2007 Jztop.Com 版权所有 未经许可 请勿转载