win32基础框架2

今天继续介绍win32的框架,使用的框架仍然是上次的vs2013的开发环境下自动创创建的win32项目:

1.windows窗口创建的流程

1.入口函数

2.注册窗口

3.创建窗口

4.显示窗口

5.更新窗口

6.消息循环

2.Windows窗口的注册流程

1先定义一个Windows窗口类  

  typedef struct {    UINT style;  // 窗口类风格

             WNDPROC   lpfnWndProc;  // 窗口过程函数指针   

           int   cbClsExtra;           // 窗口类附加数据缓冲区字节数  

             int    cbWndExtra;         // 窗口附加数据缓冲区字节数      

             HINSTANCE hInstance;       // 当前应用程序实例句柄

             HICON     hIcon;          // 图标句柄  

             HCURSOR   hCursor;       // 光标句柄  

             HBRUSH    hbrBackground;  // 刷子句柄 

             LPCTSTR   lpszMenuName;   // 菜单资源名       

             LPCTSTR   lpszClassName;   // 窗口类名 } WNDCLASS, *PWNDCLASS;

      注意: WNDCLASSEX中多了一个 UINT cbSize;  // 结构体字节数*

以上是Windows帮我们定义好的Windows窗口类型,WNDCLASS  ,我们只需要使用这个类型去定义具体的窗口对象即可。

下面是一Windows窗口注册的一个示例代码(有些内容给出注释)

ATOM MyRegisterClass(HINSTANCE hInstance)
{
    WNDCLASSEX wcex;   //带后缀ex表示扩展类,说明一定有一个不带ex的类与之相对应

    wcex.cbSize = sizeof(WNDCLASSEX);        //窗口类的内存大小()结构体大小,必须要这样给出

    wcex.style            = CS_HREDRAW | CS_VREDRAW;   

                                          //CS_HREDRAW 水平刷新  CS_VREDRAW 垂直刷新  CS_DBLCLKS 窗口捕获鼠标双击    

                                                                                                 //窗口类的风格 垂直刷新和水平刷新, 还有一个常用的风                                                                                                         //格为允许双击


    wcex.lpfnWndProc    = WndProc;                                           //窗口消息处理函数,//函数指针,指定这个窗口上如果有                                                                                                         //事  件产生,由这个指定的函数来处理事件
    wcex.cbClsExtra        = 0;
    wcex.cbWndExtra        = 0;
    wcex.hInstance        = hInstance;
    wcex.hIcon            = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_TEST));
    wcex.hCursor        = LoadCursor(NULL, IDC_ARROW);
    wcex.hbrBackground    = (HBRUSH)(COLOR_WINDOW+1);
    wcex.lpszMenuName    = MAKEINTRESOURCE(IDC_TEST);
    wcex.lpszClassName    = szWindowClass;
    wcex.hIconSm        = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));

    return RegisterClassEx(&wcex);                   //调用系统窗口注册类函数,真正注册窗口,
}

//Windows窗口的注册其实就相当于你先画了一张图纸,你要先把这张图纸交给Windows系统,然后你才能让Windows按照这张图纸来创建窗口。

3.生成窗口,显示窗口,更新窗口

 HWND hWnd;

   hInst = hInstance; // 将实例句柄存储在全局变量中

   //创建窗口
   hWnd = CreateWindow(_T("abc"),//窗口类名 ,根据已有的窗口类名才能创建,所以这个参数必须和注册窗口类名一                                                                //致,否则创建窗口不成功


       _T("第一个windows窗口"), //窗口标题栏字符串
       //WS_OVERLAPPEDWINDOW,//窗口风格
       WS_OVERLAPPED | WS_SYSMENU | WS_MINIMIZEBOX,
      100/*CW_USEDEFAULT*/, //窗口x坐标  CW_USEDEFAULT 使用默认的x,当x为使用默认的时候,y不用给值,给0,可以自适应,如果x给出具体值,y如果还是0,那么不管有多少个窗口,y的坐标就是0位置
      0, //窗口y坐标
      800/*CW_USEDEFAULT*/, //窗口的宽,具体的特性参照x,y
      600, //窗口的高
      NULL, //窗口的父窗口是谁,一般给null
      /*hmenu*/NULL,//菜单句柄,如果给null的话,默认使用注册时的菜单 ,如果不为空,就以当前的菜单句柄来当做窗口的菜单
      hInstance, //窗口的实例句柄
      NULL);//一般给null

   if (!hWnd)
   {
      return FALSE;
   }

   //ShowCursor(false);

   ShowWindow(hWnd, nCmdShow);
   UpdateWindow(hWnd);

4.一些窗口相关的函数

HWND FindWindow(      

    LPCTSTR lpClassName,
    LPCTSTR lpWindowName
);   // 寻找是否已经存在此类型的窗口

ATOM RegisterClass (CONST WNDCLASS* lpWndClass);

        ATOM即unsigned short,成功返回所注册窗口类的唯一标识码(非0), 失败返回0。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值