可视化编程笔记

来源:互联网 发布:mysql 默认值约束 编辑:程序博客网 时间:2024/06/08 07:19
第一课    windows应用程序基础
1-1    windows应用程序的特点
    windo应用本身
        编写windows程序相当一部分工作就是在创建对象和为对象赋属性
    对象特征
        具有规范形态和操作模式
    
    两种机制
        消息循环
        事件响应
    
    多任务和多线程
    多种形式的输入手段
        硬件方式
        软件方式
        
    设备无关的图形输出
        GDI(Graphics Device Interface, 图形设备接口)
        
1-2    可视化编程         
    即可视化程序设计
    所见即所得的编程思想
    随时可以看到编程的效果,程序与结果的调整同步
    仅仅是界面的设计工作无需操作

    API函数
        API是一些预先定义的函数
        提供应用程序与开发人员基于某些软件或硬件得以访问一组例程的能力,
        而无需访问源码,或理解内部工作机制的细节
    
    MFC架构的编程
        微软基础类库,是一个微软公司提供的类库
        以C++类的形式封装了windows API
        包含一个应用程序矿建,以减少应用程序开发人员的工作量
        
    
    对象
        选择对象确定属性->搭建程序"大框架"->编写细节代码构成完整程序
        
1-3    关于API
    定义
        Application Programming Interface

    功能
        -为应用程序提供windows系统特殊函数及数据结构
        -Win应用程序可以利用变准大量APi函数调用系统功能
        -是Win系统与Win应用程序间的标准程序接口
        -窗口管理函数:实现窗口的创建,移动和修改功能
        -系统服务函数:实现与操作系统有关的多种功能
        -图形设备函数:实现与设备无关的图形操作功能
        
    必须首先了解的内容:
        (1)窗口的概念
            系统管理应用程序的基本单位
            用用程序与用户之间交互的接口环境
            
            编写一个windows应用程序首先应创建一个或多个窗口
            随后应用程序的运行过程即是窗口内部,窗口与窗口之间,窗口与系统之间
            进行数据处理与数据交换的过程
            
        (2)事件驱动的概念
            所谓事件驱动,简单地说就是点击什么对象(即产生什么事件),
            系统就执行什么操作(即调用什么函数)
            
            Windows程序设计是针对事件驱动进行的,事件驱动是针对事件消息的描述
            
            Windows程序的执行顺序取决于事件的发生顺序,程序的执行顺序是由顺序产生的消息驱动的,但是消息的产生旺旺并不要求有次序之分
            
        (3)句柄的概念
            句柄是一个8字节长(相对64位操作系统)的数值,于标识应用程序中不同的对象和同类对象中不同的实例
        
            应用程序通过句柄访问相应的对象信息
        
        (4)消息的概念
            Windows应用程序利用Windows消息(Message)与应用程序及系统进行信息交换
    
            消息号
                由事先定义好的消息名标识
            字参数(wParam)
                用于提供消息的附加信息
            长字参数(lParam)
                用于提供消息的附加信息
                
            附加信息
                与具体消息号有关,在Windows中消息用结构体 MSG 表示
                
                MSG结构体
                typedef struct tagMSG
                {
                    HWND hwnd;            //窗口句柄,为null,则可检索所有驻留在消息队列中的消息
                    UINT message;        //消息值,由Windows.h头文件中的宏定义来标识
                    WPARAM wParam;        //包含有关消息的附加信息,不同消息其值有所不同
                    LPARAM lParam;        //
                    DWORD time;            //指定消息送至队列的时间
                    POINT pt;            //制定消息发送时屏幕光标的位置,其数据类型POINT也是一个结构体
                }MSG;
                
                typedef struct tagPOINT
                {
                    LONG x;
                    LONG y;
                }POINT;
                
            消息分类
                不同的前缀符号经常用于消息宏识别消息附属的分类
                
                系统消息的消息宏前缀
                    BM        表示按钮控制消息
                    CB        表示组合框控制消息
                    DM        表示默认下压式按钮控制消息
                    EM        表示编辑控制消息
                    LB        表示列表框控制消息
                    SBM        表示滚动条控制消息
                    WM        表示窗口消息
                    
            常用的消息
                WM_LBUTTONBOWN    产生单机鼠标左键的消息
                    lParam    
                        低字节    包含当前光标的X坐标值
                            X = LOWORD(lParam);    
                            
                        高字节    包含当前光标的Y坐标值
                            Y = HIWORD(lParam);
                    
                    wParam
                        包含一整数值,用来标识鼠标键的按下状态
                        通过switch-case来识别
                        
                        一般的
                        MK_LBUTTON    按下鼠标左键
                        MK_MBUTTON    按下鼠标中键
                        MK_RBUTTON    按下鼠标右键
                        MK_SHIFT    按下SHIFT键
                        MK_CONTROL    按下CONTROL键
            
                        相似的消息
                        WM_LBUTTONUP        放开鼠标左键时产生
                        WM_RBUTTONUP        放开鼠标右键时产生
                        WM_RBUTTONDOWN        单击鼠标右键时产生
                        WM_LBUTTONDOWN        单击鼠标左键时产生
                        WM_LBUTTONDBCLK        双击鼠标左键时产生
                        WM_RBUTTONDBCLK        双击鼠标右键时产生
                        WM_MOUSEMOVE        鼠标经过窗口的显示区域时产生
                        WM_MBUTTONUP        放开鼠标中键时产生
                            
                WM_KEYDOWN按下一个非系统键时产生的消息
                    系统键
                        是指实现系统操作的组合键,
                            如Alt与某个功能键的组合以实现系统菜单操作等,
                            非系统键就是不与alt联用的键
                            
    
                    字参数    包含了键的虚拟码
                        虚拟码
                            用以标识按下或释放的键
                    lParam    记录了按键的重复次数,扫描码,转移代码,先前键的状态等信息    
    
                WM_CHAR    按下一个非系统键时产生的消息
                    wParam    为按键的ASCLL码
                    lParam    与WM_KEYDOWN的相同
                    
                WM_CREATE    由CreateWindow函数发出的消息
                    wParam    未用
                    lParam    包含一个指向CREATESTRUCT数据结构的指针
                    
                WM_CLOSE    关闭窗口时产生的消息
                    wParam    未用
                    lParam    未用
                
                WM_DESTROY    由DestroyWindow函数发出的消息
                    wParam    未用
                    lParam    未用
                
                WM_QUIT        由PostQuitMessage函数发出的消息
                    wParam    含推出代码,标识程序推出运行时的有关信息
                    lParam    未用
            
                WM_PAINT    屏幕刷新时产生的消息
                    用户区移动或显示
                    程序通过滚动条滚动窗口
                    用户窗口改变大小
                    下拉式菜单关闭并需要恢复被覆盖的部分
                    Windows清除对话框等对象,并需要恢复被覆盖的部分
                
1-4    Windows 应用程序组成及编程步骤
    应用程序的组成
        1 源程序文件
        2 头文件
        3 模块定义文件
        4 资源描述文件
        5 项目文件
        
    源程序组成结构
        入口函数
            所有程序的入口,类似Main函数,完成定义和初始化,产生消息循环
            
            功能:
                注册窗口类,简历窗口及执行必要的初始化
                进入消息循环,据接受的消息调用响应的处理过程
                当消息循环检索到WM_QUIT时,终止程序运行
                
            基本组成
                函数说明
                    Win是多任务管理的,同一应用程序的多个窗口可能同时存在
                    
                    Win系统时对每个窗口的执行称为一个实例,并用一个实例句柄来唯一标识
                    
                    int WINAPI WinMain
                    {
                        HINSTANCE    hThisInst,        //    应用程序当前实例句柄
                        HINSTANCE    hPrevInst,        //    应用程序其他实例句柄
                        LPSTR    lpszCmdLine,        //    指向程序命令行参数的指针
                        Int        nCmdShow            //    应用程序开始执行时窗口显示方式的整数值标识
                    }
                    
                初始化
                    窗口类定义
                        通过给窗口类数据结构WNDCLASS 赋值完成,该数据结构中包含窗口类的各种属性
                        
                        LoadIcon
                            作用    在应用程序中加载一个窗口图标
                            原型    HICON    LoadIcon(HINSTANCE hInstance, LPCTSTR    lpIconName)
                                                        为哪个窗口                哪个图标
                                                
                        LoadCursor
                            作用    是在应用程序中加载一个窗口坐标
                            原型    HCURSOR    LoadCursor(HINSTANCE hInstance, LPCTSTR    lpCursorName)
                                                            哪个窗口            什么样的光标
                        
                        调用 GetStockObject    函数获取系统提供的背景刷
                            HBRUSH    GetStockObject(int nBrush);
                        
                        
                    窗口类的注册
                        Win系统本身提供部分预定义的窗口类,程序员也可以自定义窗口类,窗口类必须先注册后使用
                        
                        窗口类的注册由函数RegisterClass()实现与操作系统有关的多种功能
                        
                        RegisterClass(&wndclass);    //    wndclass为注册窗口类结构
                            返回值为布尔值,成功为真
                    
                    
                    创建窗口实例
                        创建一个窗口类的实例由函数CreatWindow()实现
                        函数原型
                        HWND CreateWindow
                        {
                            LPCTSTR  lpszClassName,        //窗口类名
                            LPCTSTR  lpszTitle,            //窗口标题名
                            DWORD  dwStyle,                //创建窗口的样式
                            int x, y,                    //窗口左上角坐标
                            int nWidth, nHeight,        //窗口宽度和高度
                            HWND  hwndParent,            //该窗口父窗口句柄
                            HMENU  hMenu,                //窗口主菜单句柄
                            HINSTANCE  hInstance,        //创建窗口的应用程序当前句柄
                            LPVOID  lpParam                //指向一个传递给窗口的参数值的指针
                        }
                    
                    
                    显示窗口
                        窗口类的显示 由showWindow和UpdateWindow函数实现
                        窗口显示形式标识  ShowWindow(hwnd, nCmdshow);    //nCmdshow
                        应用程序调用ShowWindow函数在屏幕上显示窗口
                        
                        SW_HIDE                隐藏窗口
                        SW_SHOWNORMAL        显示并激活窗口
                        SW_SHOWMINIMIZE        显示并最小化窗口
                        SW_SHOWMAXMIZE        显示并最大化窗口
                        SW_SHOWNOACTIVE        显示但不激活窗口
                        SW_RESTORE            回复窗口的原来位置及尺寸
                        
                        显示窗口后程序调用UpdateWindow更新并绘制用户区,并发出WM_PAINT消息
                                            
                
                消息循环
                    Windows产生消息-> 消息队列(WinMain函数) ->将消息传递给窗口函数的相应过程处理(WndProc函数)
                    
                    MSG Msg;
                    
                    while( GetMessage (&Msg, NULL, 0, 0))
                    {
                        TranslateMessage(&Msg);        // 将消息的虚拟键转换为字符消息
                        DispatchMessage(&Msg);        // 将消息传送到制定窗口函数
                    }
                    
                    GetMessage        从消息队列中读取一条消息,并将消息放在MSG结构中
                    (lpMSG,                //指向MSG结构的指针
                    hwnd,                //从哪个窗口获得
                    nMsgFilterMin,        //用于消息过滤的最小消息号值
                    nMsgFilterMax)        //用于消息过滤的最大消息号值
                
                
        窗口函数
            数据类型
                LRESULT:
                    消息处理结果的返回值的数据类型,实际上时LONG
                
                CALLBAK:
                    表示这个函数是给系统调用的,也称作"回调"
    
                
            RECT结构
            typedef struct_RECT
            {
                LONG left;        //矩形框左上角x坐标
                LONG top;        //矩形框左上角y坐标
                LONG right;        //矩形框右下角x坐标
                LONG bottom;    //矩形框右下角y坐标
            }RECT;
原创粉丝点击