windows程序设计初步(一)

所谓的Windows程序设计,应该就是调用Windows的API进行程序设计.进行Windows程序设计有两种方法:

  • 使用Microsoft Platform SDK(Software Development Kit)软件开发工具包.
  • Microsoft 对API进行封装而成的MFC(Microsoft Foundation Class)Microsoft基础类库.

    我主要学习的使用SDK进行Windows方面的程序设计,使用开发工具是Visual C++ 6.0。

    自从Brain W.Kernighan和Dennis M.Ritchie编著的《The C Progamming Language》出版以后,基本上所有的介绍程序设计语言方面的书都是从“Hello World”开始的。下面就先来开学Windows版的"Hello World".

    # define WIN32_AND_MEAN
    
    # include <windows.h>
    # include <windowsx.h>
    
    int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdline,int nShowCmd)
    {
    	MessageBox(NULL,"Hellow Windows Programming","Welcome",MB_OK | MB_ICONEXCLAMATION) ;
    
    	return 0 ;
    }
    
     
    注意,在创建项目时要选择WIN32 Appcation.
    下面来对程序代码进行分析,以便理解Windows程序设计过程.
    首先,第一行是 
    # define WIN32_AND_MEAN 
    知道C/C++编程的很容易看出,这只是一条预编译指令.上面也提到Windows程序设计有两种方法,MFC和SDK.
    使用这条预编译指令就是确定头文件的包含逻辑,
    不要包含不需要的MFC头文件.
    下面就是对两个头文件<Windows.h>,<windowsx.h>的包含.
    <windows.h>就像一个"批量"的头文件包含,它包含了
    大部分的进行windows程序设计所需要的头文件.包含了改头文件就需要在手工的显示包含其余的头文件了.
    <widnowsx.h>该头文件包含了许多重要的宏和常量,使用该文件能够大大的简化windows编程.
    下面介绍下,windows的其余的主要的头文件:
    WINDEF.H 基本的类型定义.
    WINNT.H  支持Unicode的类型定义
    WINBASE.H 内核函数
    WINUSER.H 用户接口函数
    WINGDI.H  图形设备接口函数. 这些头文件定义了windows所有的数据类型,函数调用,数据结构和常数标识符.
    我们知道每个应用程序程序都会有一个入口函数,C/C++的入口函数为main().而所有的windows应用程序的入口函数都是WinMain().
    该函数在WINBASE.H声明如下:
    int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdline,int nShowCmd) ;
    我们知道每个函数都有一个返回值,无疑的int就是WinMain的返回类型.
    那么WINAPI标识符有什么意义呢?WINAPI标识符在WINDEF.H中定义如下:# define WINAPI _stdcall.从这个定义我们可以看出,
    WINAPI实际是对函数调用的
    约定,规定了函数的参数从右向左压入栈中.
    下面详细的看下该函数的参数:
    • hinstance 这是个HINSTANCE类型的变量,是一个实例句柄.该句柄唯一的标识该程序,其他的windows函数可以使用该句柄作为参数调用该程序.
    • hprevinstance 这个参数已经不再使用.在旧的windows版本中用来跟踪当前应用程序其他实例(解释晕了,幸好不再使用).在32位版本中舍弃了,该参数永远为NULL.
    • lpcmdline 是一个空值终止的字符串指针.是程序运行时的附加参数.很少被程序代码使用.
    • ncmdshow.该参数是个整数,在程序启动时传递给应用程序,标识了怎样打开应用程序的窗口.windows为该参数定义了很多的以SW_开头的常量,表示应用程式启动时
    各种各样的窗口显示情况.如下:

        SW_HIOE:隐藏窗口并且激活另外一个窗口。
        SW_MINIMIZE:最小化指定的窗口,并且激活在系统表中的顶层窗口。
        SW_RESTORE:激活并显示窗口。如果窗口已经最小化或最大化,系统将以恢复到原来的尺寸和位置显示窗口(与SW_SHOWNORMAL相同)。
        SW_SHOW:激活一个窗口并以原来的尺寸和位置显示窗口。
        SW_SHOWMAXIMIZED:激活窗口并且将其最大化。
        SW_SHOWMINIMIZED:激活窗口并将其目标化。
        SW_SHOWMINNOACTIVE:将一个窗口显示为图标。激活窗口维持活动状态。
        SW_SHOWNA:以窗口的当前状态显示窗口。激活窗口保持活动状态。
        SW_SHOWNOACTIVATE:以窗口的最近一次的尺寸和位置显示窗口。激活窗口维持激活状态。
        SW_SHOWNORMAL:激活并显示窗口。如果窗口最大化或最小化,系统将其恢复到原来的尺寸和位置(与SW_RESTORE相同)。

    下面来继续看下MessagBox函数

    该函数功能就是在在屏幕上显示多种样式的窗口,如:带有不同按钮个数的窗口

    函数的声明如下:

    int MessageBox(HWND hWnd,LPCTSTR IpCaption,UINT UType);

    看下函数各个参数:

    • hwnd     该信息框父窗口句柄.(句柄,简单来说就是唯一的标识窗体的一个整数).
    • lptext    是一个字符串指针,指向在窗体显示的字符串.
    • lpcation 也是个字符串指针,指向显示在窗口标题部分的字符串.
    • utype    可以说是该信息框的显示类型.它可以是下面以MB_开头的几组常量的组合.

    第一组常量是如下:(代表了显示空中显示的按钮)

    • MB_OK                                    显示一个按钮:OK,默认值
    • MB_OKCANCEL                     显示两个按钮:OK,CANCEL
    • MB_RETRYCANCEL               显示两个按钮:Retry,CANCEL
    • MB_YESNO                            显示两个按钮:YES,NO
    • MB_YENOCANCEL               显示三个按钮:YES,NO,CANCEL
    • MB_ABORTRETRYIGNORE 显示三个按钮:ABROT,RETRY,IGNORE

    第二组常量如下:(代表了显示图标)

    • MB_ICONEXCLAMATION            显示一个惊叹号的图标
    • MB_ICONINFORMATION            一个椭圆加一个小写字母i的构成的图标
    • MB_ICONQUESTION                   一个问号图标
    • MB_ICONSTOP                            一个终止符图标.

    可以从两组常量中任选常量使用'|'运算符组合,但是每组常量只能选择一个.

    值得一说的是,MessageBox函数是有返回值的.可能的返回值如下:(根据按钮的不同)

    选择的按钮

    IDABORT ABORT
    IDCANCEL CANCEL
    IDIGNORE IGNORE
    IDNO NO
    IDOK OK
    IDRETRY RETRY
    IDYES YES

    第一个windows程序的分析到此结束.

     

     

  • posted on 2010-11-25 20:40  codmer  阅读(627)  评论(0编辑  收藏  举报