Windows 编程基础

一、程序框架 返回

 

 Windows窗口华丽大方, 框架组成也很复杂,一般来说一个应用程序往往包括以下组成部分:

 

 1、基本窗口 包括标题栏和四个边框构成的工作区,这是程序的基本框架,所有显示的文字、图片、对话框都是在这个窗口框架当中显示,如果这个窗口关闭,那么相应的所有内容也都会关闭,有时也称作“父窗口”;

 

 2、程序菜单、显示的文字、图片、弹出式对话框这些都是作为程序使用到的资源

 

 3、基于对话框上所显示的标签、文本框、列表框、滚动条等等称作是控件,它们可以完成一些特定的功能,它们不能独立存在;

 

 4、键盘、显示器是输入输出设备,归Windows系统管理,应用程序使用之前需要向系统申请

 

 5、程序的启动、运行,各个组件之间,是通过“消息”相互沟通的,程序启动后会自动发出一个“创建”消息,向系统申请内存、调入资源、构建程序窗口;

 

 比较常见的是鼠标消息,鼠标单击、双击或者移动什么的,都会发送出相应的消息,程序就会显示一小段文字提示,要不就是按钮弹起来按下去等等,

 

 有的消息系统帮着处理了,有的消息就得程序自己动手处理 ;

 

  下面我们来创建一个较为完整的应用程序窗口:

 

  1、启动VC,新建一个名为“SmlWin”的Win32 Application工程,工程位置在自己的文件夹中;

 

  2、新建一个名为“SmlWin”的头文件,方法是单击“新建”命令,在左边选择C++源程序上面的C/C++ Header File ,再在右边空白“文件”名称输入SmlWin,单击“确定”,

 

 头文件包含源程序文件用到的函数申明,输入下面的代码(绿色部分是注释,必须以双斜杠“//”开头,先可以不输入),

 

 有的一行太长会自动折到下一行,代码先抄到本子上,或者打印出来, 注意Il两个字母不同,代码使用缩进格式,规范化;

//代码开始

//申明一些源程序(SmlWin.cpp)中用到的函数原型;
//申明和定义分开,互不干扰,定义在源程序中;
//定义好的函数,在WinMain主函数中调用;

LRESULT CALLBACK MainWndProc(HWND,UINT,WPARAM,LPARAM);
//申明一个消息处理函数


BOOL InitApplication(HINSTANCE);
//申明一个初始化窗口的函数


BOOL InitInstance(HINSTANCE,int);
//申明一个创建窗口的函数


char *myStr="拉开窗帘,阳光照射进来。";
//申明并定义一个用到的字符串

 

  3、新建一个名为“SmlWin”的C++源程序文件,单击“确定”进入文本区输入下面的程序:


///////////////////////////////
// 程序名:SmlWin.cpp
// 用途是:显示一个简单窗口
///////////////////////////////
//包含头文件*.h

#include <windows.h> //运行在Windows系统下
#include <string.h> //用到字符串
#include "SmlWin.h" //函数的申明

HINSTANCE hInst;//申明当前实例句柄
HWND hWndMain; //申明主窗口句柄

////////////////////////////////////////////////////
// 函数名: WinMain(HINSTANCE,HINSTNCE,LPSTR,int)
// 用途是: 程序入口,调用初始化函数,处理消息循环,
////////////////////////////////////////////////////

int APIENTRY WinMain(//主函数有四个参数
    HINSTANCE  hInstance,//当前实例句柄
    HINSTANCE  hPrevInstance,//前一实例句柄
    LPSTR  lpCmdLine,//命令行字符串
    int nCmdShow)//窗口显示方式
    //函数头结束,开始定义函数

{
    MSG msg; //申明一个消息,消息是结构变量;

    //调用函数,初始化窗口数据,并注册窗口类;
    if(!InitApplication(hInstance))//调用InitApplication函数

{

    MessageBox(NULL,"InitApplication函数错误","提示",MB_OK);

    //用于调试,找出程序没反应的错误
    return (F
ALSE);

}

    //调用函数,创建和显示窗口;
    if(!InitInstance(hInstance,nCmdShow))//调用InitInstance函数
    return (F
ALSE);

    //进入消息循环,从应用程序消息队列中检取消息; 
    while (GetMessage(&msg,NULL,0,0))
    {
//把虚拟键消息翻译为字符消息;
        TranslateMessage(&msg);

          //把消息分配到相应的窗口过程中去; 
        DispatchMessage(&msg);
    }

    return (msg.wParam);//返回附加的消息
}


//**下面是定义要用到的函数,定义了主函数才能调用**

///////////////////////////////////////////
// 函数名:InitApplication(HINSTANCE)
// 用途是:供主函数用,初始化窗口,并注册窗口
///////////////////////////////////////////


BOOL InitApplication(HINSTANCE hInstance)//当前实例句柄
{//窗口类定义
    WNDCLASS SmlWin;//定义一个WNDCLASS 结构对象SmlWin;
    SmlWin.style=0;//对象的基本窗口风格
    SmlWin.lpfnWndProc=(WNDPROC)MainWndProc;//处理消息的函数
    SmlWin.cbClsExtra=0;//分配给窗口类结构之后的额外字节数
    SmlWin.cbWndExtra=0;//分配给窗口实例后的额外字节数
    SmlWin.hInstance=hInstance;//标识窗口过程所在的实例
    SmlWin.hInstance=hInstance;//标识窗口过程所在的实例
    SmlWin.hIcon =LoadIcon(hInstance,IDI_APPLICATION);//加载图标
    SmlWin.hCursor=LoadCursor(NULL,IDC_ARROW);//标识类的鼠标指针

    SmlWin.hbrBackground=(HBRUSH)(14);//蓝色窗口
    //填充背景色用(HBRUSH)强制转换数据类型;

    SmlWin.lpszMenuName=NULL;//无菜单
    SmlWin.lpszClassName="SmlWinWClass";//标识本类名称的字符串

    return (RegisterClass(&SmlWin)); //注册窗口类
}//函数定义完毕,下面是另一个定义

///////////////////////////////////////
// 函数名:InitIstance(HINSTANCE,int)
// 用 途:供主函数用,初始化窗口的各个属性
///////////////////////////////////////


BOOL InitInstance(//有两个参数;
    HINSTANCE hInstance,//一个是实例句柄,
    int nCmdShow)//另一个是窗口的显示方式;
{
    hInst=hInstance;

    //保存当前实例句柄,供其他函数调用,hInst是一个全局变量在WinMain函数之前定义

    hWndMain=CreateWindow(//调用API函数
        "SmlWinWClass",//上一个函数定义的窗口类名称
        "蓝色荡漾",//窗口标题
        WS_OVERLAPPEDWINDOW,//创建标题栏的风格
        CW_USEDEFAULT,CW_USEDEFAULT,//默认的窗口位置(x,y)
        CW_USEDEFAULT,CW_USEDEFAULT,//默认的窗口大小(宽度,高度)
        NULL,//父窗口句柄
        NULL,//当前菜单句柄
        hInstance,//当前实例句柄
        NULL);//创建窗口的大小

    if(!hWndMain)//判断是否成功创建窗口,判断hWndMain句柄的值
        return (FALSE);

    ShowWindow (hWnd
Main,nCmdShow);
//显示窗口
    //hWndMain是指定要显示窗口的句柄
    //nCmdShow是从WinMain()函数的nCmdShow传递来的显示方式

    UpdateWindow(hWndMain);//更新窗口客户区

    return (TRUE);//返回值TRUE
}

////////////////////////////////////////////////
// 函数名:MainWndProc(HWND,UINT,WPARAM,LPARAM)
// 用途是:处理窗口消息
////////////////////////////////////////////////

LRESULT CALLBACK MainWndProc(//有四个参数
    HWND hWnd,
//窗口句柄
    UINT message,//消息类型
    WPARAM wParam,//消息附带信息
    LPARAM lParam)//消息附带信息
{
    HDC hdc;
//需要显示器设备来显示文本
    PAINTSTRUCT ps; //使用设备的方法

    switch(message) //需要自己处理的消息
    {
    case W
M_PAINT:
//接收WM_PAINT消息,本消息自动产生
        hdc=BeginPaint(hWnd,&ps); //申请设备
        TextOut(hdc,20,30,myStr,lstrlen(myStr));
         //myStr已经在头文件SmlWin.h中定义为字符串

        EndPaint(hWnd,&ps); //结束设备使用
    break;//本条消息处理完毕

    case WM_DESTROY://退出应用程序,

        PostQuitMessage(0);//向系统发送一条WM_QUIT消息,

    break;

    default: //让系统帮着处理的消息
        return (DefWindowProc(hWnd,message,wParam,lParam));
    }
    return(0);
//函数返回值
}//代码结束


 记着经常保存,输入完成后单击“编译条”上的构建按钮,检查一下是否有错误,注意拼写错误、字母大小写,一句结束的分号,和使用英文标点符号,大括号的配对,修改后及时保存,

 

 “构建”通过以后再单击“执行”按钮,看看倾注自己心血的程序窗口;

 

  本节学习了应用程序的框架结构,可以看出有四个部分:主函数WinMain、初始化函数InitApplication、创建函数InitInstance和消息函数MainWndProc

 

 如果你成功地完成了练习,理解了窗口的各个组成代码,请继续学习下一课内容;

返回

 

  蓝色荡漾 (在弹出的对话框中选择“运行”、“运行”)

  

本教程由86团学校TeliuTe制作|著作权所有

基础教程网:http://teliute.org/

美丽的校园……



转载和引用本站内容,请保留作者和本站链接。