• VC++学习笔记之创建窗口


    1、设计窗口类。
              一看到“设计”两个字,大家肯定就会想入非非。窗口的创建过程类似于汽车的制造过程。我们在生产一个型号的汽车之前,首先要对该型号的汽车进行设计,画出结构,设计零部件,起一个名字“奥迪A8”。完成设计后就可以按照这个型号生产汽车了。
    当然,在我们设计窗口时,不像设计汽车那么复杂,因为Windows 已经为我们定义好了一个窗口的基本属性,我们只要进行属性设置就可以了。要达到做填空题的效果,只能通过结构体来完成,窗口的特征就是由WNDCLASS结构体来定义的。WNDCLASS结构
    体的定义如下:
            typedef struct _WNDCLASS{
                     UINT style;   //设置窗口的样式
                     WNDPROC   lpfnWndProc;  //“lpfnWndProc”是一个函数指针,指向窗口过程函数(一个回调函数)。
                                                                        /*在这里写一个小插曲,解释一下回调函数和窗口过程函数。回调函数的实现机制:它不是由该函数的实现方直接调用(只是提供),而是在特定的事件或条件发生时由“另外一方”调用的,用于对该事件或条件进行响应。(1)定义函数    (2)提供函数的一方在初始化的时候,将回调函数的函数指针注册给调用者(通常是操作系统)。   (3)当特定的事件或是条件发生时,调用者调用函数。       窗口过程函数被调用的过程:(1)将本函数地址赋值给“lpfnWndProc”成员变量。(2)调用“RegsiterClass(&wndclass)”注册窗口类,让系统获得我们编写的窗口过程函数的地址。(3)当应用程序接收到某一窗口的消息时,调用DispatchMessage(&msg)将消息回传给系统。然后系统调用窗口过程函数对消息进行处理。*/
                     int cbClsExtra;  //设置类附加内存空间,被窗口类的所有窗口所共享。
                     int cbWndExtra; //设置窗口附加内存,用于存储窗口特有的数据。
                     HANDLE hInstance;   //指定包含窗口过程的“主程序”的实例句柄
                     HICON hIcon;  //指定窗口类的图标句柄。可以使用LoadIcon函数来加载一个图标资源,返回系统分配给该图标的句柄。
                     HCURSOR hCursor;   //指定窗口类的光标句柄。可以调用LoadCursor函数来加载一个光标资源,返回系统分配该光标的句柄。
                     HBBUSH hbrBackground;   //指定窗口类的背景画刷句柄。可以调用GetStockObject函数来得到系统的标准画刷。
                     LPCTSTR  lpszMenuName;  //指定菜单资源。
                     LPCTSSTR  lpsz ClassName;  //指定窗口类的名字,就像新设计了一型号的汽车,给该型号的汽车起个名字。
            }   WNDCLASS;
           
           2、注册窗口类
           就像设计完汽车后,国家有关部门审批通过之后,该种类型的汽车才可以生产。同样地,设计完窗口类(WNDCLASS)后,调用RegisterClass函数对其进行注册,然后才可以创建该类型的窗口。注册函数原型如下:
           ATOM RegisterClass(CONST  WNDCLASS  *lpWndClass);

           3、创建窗口
           用CreateWindow函数产生这种类型的窗口。

           4、显示及更新窗口
           (1)调用ShowWindow函数来显示窗口。
                 BOOL ShowWindow(
                       HWND hWnd ,  //窗口句柄
                       int nCmdShow   //窗口显示状态
                 );
            (2)调用ShowWindow函数来刷新窗口
                 BOOL  UpdateWindow(
                       HWND hWnd  //创建好的窗体
                  );

    朋友,如果您有什么真知灼见,可以加“新浪微博”/MSN哦,starrycheng@live.com,我们大家一起讨论,一起研究。

    最后,帮忙加一分吧,想整个空间系统。

  • 相关阅读:
    mysql show profiles 使用分析sql 性能
    面向对象三大特征---封装、继承、多态
    http_build_query用法,挺方便的
    请求数据
    多模匹配算法之Aho-Corasick
    php命名空间如何引入一个变量类名?
    MySQL错误:Can't connect to MySQL server (10060)
    Vim完全教程
    路由
    wireshark
  • 原文地址:https://www.cnblogs.com/ssol/p/2249757.html
Copyright © 2020-2023  润新知