快速业务通道

WinAPI入门

作者 佚名技术 来源 程序设计 浏览 发布时间 2012-06-30

不要觉得奇怪,虽然我们拥有众多“所见即所得”的编程方式来开发众多界面精美的应用程序,这些可视化的编程环境提供了大量的类库和控件,但是在开发者享受方便的同时, 他们的手脚已经不知不觉的受到了限制,有很多深入到Windows内部的操作它们无法完成, 为什么?因为所用的类库不支持。

事实上这些类库与控件都是架构在Window API的基础上面的,API即 ApplicationProgramming Interface -- 应用编程接口 的缩写,它不仅为应用程序所调用,同时也是 Windows的一部分,Windows自身的运行也调用这些API函数。要了解如何使用API就必须了 解一些Windows的运行机制。

简单地说,Windows是由事件驱动的抢占式多任务操作系统。事件驱动是相对于过程驱动而言的,它改变了原来文件的顺序执行方式;Windows既然是多任务系统,就必须能同时 处理多个事件,系统为应用程序生成一个消息队列,消息在上面被张贴和发送,应用程序只 要从其消息队列中取出消息,然后一一执行就可以了。

现在,我将使用最最基本的范例程序 HelloWin 来说明WIN32 API的运行机制 首先,一个程序一定要有进入点,Win32 App的进入点函数的名称是WinMain,它的原型如下 int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine,int nCmdShow) hInstance是所谓的“实例句柄”,它是一个数值,当程序在Windows下运行的时候,它被用 来唯一的标示这个程序,虽然用户可能同时运行多个同一个程序,即运行多个“实例”,我 们可以看到,每一个实例都有不同的hInstance值。

hPrevInstance,简单地说就是没用…它是存在于16位Windows程序中的,在编写Windows 9x/NT/2000 程序的时候,总应该是NULL。

szCmdLine是一个指针,指向一个以0为终结的字串,里面包含传给该程序的命令行参数,如果想要让程序处理命令行,那么这个参数就有用了。

iCmdShow参数是一个数值,指示窗口将如何被显示,这个数值由在Windows下运行该程序的程序所决定,通常是SW_SHOWNORMAL。

接下来是注册一个窗口类,窗口总是从窗口类的基础上创建的,窗口类用以标示处理窗口消息的窗口过程,注册窗口类时使用 RegisterClassEx() 函数,它只需要一个参数,一个指向 类型为 WNDCLASSEX 的结构指针。

具体注册初始是这样的:

WNDCLASSEX wcex;
wcex.cbSize = sizeof(WNDCLASSEX);     //结构的大小
wcex.style = CS_HREDRAW | CS_VREDRAW; //类风格
wcex.lpfnWndProc = (WNDPROC)WndProc;  //窗口类的窗口过程
wcex.cbClsExtra = 0;            //在类结构中预留的空间
wcex.cbWndExtra = 0;           //在Windows内部保存的窗口结构中预留的空间
wcex.hInstance = hInstance;        //程序的实例句柄
wcex.hIcon = LoadIcon(hInstance, (LPCTSTR)IDI_EXAMPLE);  //程序图标
wcex.hCursor = LoadCursor(NULL, IDC_ARROW);         //结构的大小
wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);    //指定窗口的背景颜色
wcex.lpszMenuName = (LPCSTR)IDC_EXAMPLE;         //菜单
wcex.lpszClassName = szWindowClass;             //类名,和程序名相同
wcex.hIconSm = LoadIcon(wcex.hInstance, (LPCTSTR)IDI_SMALL);    //也是程序图标
return RegisterClassEx(&wcex);

接下来,定义一个HWND,然后使用 CreateWindow() 函数,原型如下:

HWND CreateWindow(
   LPCTSTR lpClassName,    // 窗口类名
   LPCTSTR lpWindowName,  // 窗口标题
   DWORD dwStyle,       // 窗口风格
   int x,             // 初始x
   int y,      

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号