1)创建一个简单的窗口过程

1)点开我的  Vistual Statio2012----->文件---->新建--->项目--->Win32项目--->确定(选上空项目)  --->完成

2)当前结果截图

     

      1)创建一个简单的窗口过程

3)然后新建  我的WinMain.cpp文件,文件开始内容:    

 1 #include<Windows.h>
 2 
 3 //第一个参数是当前这个应用程序的句柄,就是在你的window任务管理器中看到那个进程
 4 //第二个参数是前一个应用程序的句柄,就是有的应用程序含有继承关系,就是一个应用程序A运行完,再运行下一个B,这个A就是hPreInstance,B就是hIstance,
 5 
 6 //第三个参数是命令行参数,命令行就是那个system32   
 7 //第四个是一个默认的显式方式,就是窗口时可见的  还时不可见的,这个nCmdShow是不可见的
 8 int CALLBACK WinMain(HINSTANCE hIstance,
 9                      HINSTANCE hPreInstance,
10                      LPSTR pCmdLine,
11                      int nCmdShow)
12 {
13     
14     
15     //1.设计---->就是给WNDCLASSEX结构体初始化(结构体有12个)
16     
17     //2.注册
18 
19     //3.创建
20 
21     //4.显式
22 
23     //5.消息循环
24 
25 
26 }

4)在第一个过程中添加代码:

    

1 //1.设计---->就是给WNDCLASSEX结构体初始化(结构体有12个)
2     WNDCLASSEX wndclass;
3     wndclass.cbClsExtra=0;
4     wndclass.cbWndExtra=0;//这两个是确定是否要分配额外的空间
5     wndclass.cbSize=sizeof(WNDCLASSEX);
6     wndclass.hbrBackground=//hbrBackground的转定义就是HBRUSH,一个画刷,所以 我要在 最上面创建一个画刷

5)hbrBackground的转定义就是HBRUSH,一个画刷,所以 我要在 最上面创建一个画刷

      1)创建一个简单的窗口过程

 1 int CALLBACK WinMain(HINSTANCE hIstance,
 2                      HINSTANCE hPreInstance,
 3                      LPSTR pCmdLine,
 4                      int nCmdShow)
 5 {
 6     //下面的因为要为那个wndclass.hbrBackground创建一个画刷,所以 加了下面的代码
 7     HBRUSH hBrush=::CreateSolidBrush(RGB(0,0,255));
 8     //为啥要把这个刷子写在外面,因为要是不用的话,得把它删除
 9     //其实这个刷子就是一个句柄,大多数句柄 要是不用的话,必须得把它删除。
10     //然后  我去查帮助文档
11     
12     //1.设计---->就是给WNDCLASSEX结构体初始化(结构体有12个)
13     WNDCLASSEX wndclass;
14     wndclass.cbClsExtra=0;
15     wndclass.cbWndExtra=0;//这两个是确定是否要分配额外的空间
16     wndclass.cbSize=sizeof(WNDCLASSEX);
17     wndclass.hbrBackground=//hbrBackground的转定义就是HBRUSH,一个画刷,所以 我要在 最上面创建一个画刷

6)正如前面我说的  要是i你建立一个句柄,要想着给他删除掉,至于怎么删除,你不会 可以查帮助文档:

      1)创建一个简单的窗口过程

   然后 你既然创建了画刷 CreateSolidBrush,那个就搜这个函数

      1)创建一个简单的窗口过程

7)然后我在我的代码末尾 ,把这个画刷删了

           1)创建一个简单的窗口过程

 1 #include<Windows.h>
 2 
 3 //第一个参数是当前这个应用程序的句柄,就是在你的window任务管理器中看到那个进程
 4 //第二个参数是前一个应用程序的句柄,就是有的应用程序含有继承关系,就是一个应用程序A运行完,再运行下一个B,这个A就是hPreInstance,B就是hIstance,
 5 
 6 //第三个参数是命令行参数,命令行就是那个system32   
 7 //第四个是一个默认的显式方式,就是窗口时可见的  还时不可见的,这个nCmdShow是不可见的
 8 int CALLBACK WinMain(HINSTANCE hIstance,
 9                      HINSTANCE hPreInstance,
10                      LPSTR pCmdLine,
11                      int nCmdShow)
12 {
13     
14     HBRUSH hBrush=::CreateSolidBrush(RGB(0,0,255));
15     
16     //1.设计---->就是给WNDCLASSEX结构体初始化(结构体有12个)
17     WNDCLASSEX wndclass;
18     wndclass.cbClsExtra=0;
19     wndclass.cbWndExtra=0;//这两个是确定是否要分配额外的空间
20     wndclass.cbSize=sizeof(WNDCLASSEX);
21     wndclass.hbrBackground=hBrush;
22     //2.注册
23     //3.创建
24     //4.显式
25     //5.消息循环
26     ::DeleteObject(hBrush);
27 }

8)窗口函数(转定义)

                   1)创建一个简单的窗口过程

 1 #include<Windows.h>
 2 
 3 //第一个参数是当前这个应用程序的句柄,就是在你的window任务管理器中看到那个进程
 4 //第二个参数是前一个应用程序的句柄,就是有的应用程序含有继承关系,就是一个应用程序A运行完,再运行下一个B,这个A就是hPreInstance,B就是hIstance,
 5 
 6 //第三个参数是命令行参数,命令行就是那个system32   
 7 //第四个是一个默认的显式方式,就是窗口时可见的  还时不可见的,这个nCmdShow是不可见的
 8 int CALLBACK WinMain(HINSTANCE hIstance,
 9                      HINSTANCE hPreInstance,
10                      LPSTR pCmdLine,
11                      int nCmdShow)
12 {
13     //下面的因为要为那个wndclass.hbrBackground创建一个画刷,所以 加了下面的代码
14     HBRUSH hBrush=::CreateSolidBrush(RGB(0,0,255));
15     //为啥要把这个刷子写在外面,因为要是不用的话,得把它删除
16     //其实这个刷子就是一个句柄,大多数句柄 要是不用的话,必须得把它删除。
17     //然后  我去查帮助文档
18     
19     //1.设计---->就是给WNDCLASSEX结构体初始化(结构体有12个)
20     WNDCLASSEX wndclass;
21     wndclass.cbClsExtra=0;
22     wndclass.cbWndExtra=0;//这两个是确定是否要分配额外的空间
23     wndclass.cbSize=sizeof(WNDCLASSEX);
24     wndclass.hbrBackground=hBrush;//hbrBackground的转定义就是HBRUSH,一个画刷,所以 我要在 最上面创建一个画刷
25     wndclass.hCursor=NULL;//光标
26     wndclass.hIcon=NULL;//窗口图标
27     wndclass.hIconSm=NULL;//窗口左上的图标
28     wndclass.hInstance=hIstance;//当前应用程序的句柄,就是那个Winmain函数里面的。
29     wndclass.lpfnWndProc=;//一个函数指针,处理消息的那个函数指针,就是回调函数
30     //2.注册
31 
32     //3.创建
33 
34     //4.显式
35 
36     //5.消息循环
37 
38     ::DeleteObject(hBrush);
39 }

      两次转定义结果截图:
  

      

      1)创建一个简单的窗口过程

    第二次转定义:
      

      1)创建一个简单的窗口过程

 9)然后添加处理消息的回调函数 WndProc

      1)创建一个简单的窗口过程

      1)创建一个简单的窗口过程

 1 #include<Windows.h>
 2 
 3 //这个叫  窗口消息处理函数
 4 LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
 5 {
 6     return ::DefWindowProc( hWnd, uMsg, wParam, lParam);
 7 }
 8 
 9 //第一个参数是当前这个应用程序的句柄,就是在你的window任务管理器中看到那个进程
10 //第二个参数是前一个应用程序的句柄,就是有的应用程序含有继承关系,就是一个应用程序A运行完,再运行下一个B,这个A就是hPreInstance,B就是hIstance,
11 
12 //第三个参数是命令行参数,命令行就是那个system32   
13 //第四个是一个默认的显式方式,就是窗口时可见的  还时不可见的,这个nCmdShow是不可见的
14 int CALLBACK WinMain(HINSTANCE hIstance,
15                      HINSTANCE hPreInstance,
16                      LPSTR pCmdLine,
17                      int nCmdShow)
18 {
19     //下面的因为要为那个wndclass.hbrBackground创建一个画刷,所以 加了下面的代码
20     HBRUSH hBrush=::CreateSolidBrush(RGB(0,0,255));
21     //为啥要把这个刷子写在外面,因为要是不用的话,得把它删除
22     //其实这个刷子就是一个句柄,大多数句柄 要是不用的话,必须得把它删除。
23     //然后  我去查帮助文档
24     
25     //1.设计---->就是给WNDCLASSEX结构体初始化(结构体有12个)
26     WNDCLASSEX wndclass;
27     wndclass.cbClsExtra=0;
28     wndclass.cbWndExtra=0;//这两个是确定是否要分配额外的空间
29     wndclass.cbSize=sizeof(WNDCLASSEX);
30     wndclass.hbrBackground=hBrush;//hbrBackground的转定义就是HBRUSH,一个画刷,所以 我要在 最上面创建一个画刷
31     wndclass.hCursor=NULL;//光标
32     wndclass.hIcon=NULL;//窗口图标
33     wndclass.hIconSm=NULL;//窗口左上的图标
34     wndclass.hInstance=hIstance;//当前应用程序的句柄,就是那个Winmain函数里面的。
35     wndclass.lpfnWndProc=WndProc;//一个函数指针,处理消息的那个函数指针,就是回调函数
36     //2.注册
37 
38     //3.创建
39 
40     //4.显式
41 
42     //5.消息循环
43 
44     ::DeleteObject(hBrush);
45 }

10)改字符集

      1)创建一个简单的窗口过程

            1)创建一个简单的窗口过程

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

      1)创建一个简单的窗口过程

第一阶段所有代码完成:    

 1 #include<Windows.h>
 2 
 3 //这个叫  窗口消息处理函数
 4 LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
 5 {
 6     return ::DefWindowProc( hWnd, uMsg, wParam, lParam);
 7 }
 8 
 9 //第一个参数是当前这个应用程序的句柄,就是在你的window任务管理器中看到那个进程
10 //第二个参数是前一个应用程序的句柄,就是有的应用程序含有继承关系,就是一个应用程序A运行完,再运行下一个B,这个A就是hPreInstance,B就是hIstance,
11 
12 //第三个参数是命令行参数,命令行就是那个system32   
13 //第四个是一个默认的显式方式,就是窗口时可见的  还时不可见的,这个nCmdShow是不可见的
14 int CALLBACK WinMain(HINSTANCE hIstance,
15                      HINSTANCE hPreInstance,
16                      LPSTR pCmdLine,
17                      int nCmdShow)
18 {
19     //下面的因为要为那个wndclass.hbrBackground创建一个画刷,所以 加了下面的代码
20     HBRUSH hBrush=::CreateSolidBrush(RGB(0,0,255));
21     //为啥要把这个刷子写在外面,因为要是不用的话,得把它删除
22     //其实这个刷子就是一个句柄,大多数句柄 要是不用的话,必须得把它删除。
23     //然后  我去查帮助文档
24     
25     //1.设计---->就是给WNDCLASSEX结构体初始化(结构体有12个)
26     WNDCLASSEX wndclass;
27     wndclass.cbClsExtra=0;
28     wndclass.cbWndExtra=0;//这两个是确定是否要分配额外的空间
29     wndclass.cbSize=sizeof(WNDCLASSEX);
30     wndclass.hbrBackground=hBrush;//hbrBackground的转定义就是HBRUSH,一个画刷,所以 我要在 最上面创建一个画刷
31     wndclass.hCursor=NULL;//光标
32     wndclass.hIcon=NULL;//窗口图标
33     wndclass.hIconSm=NULL;//窗口左上的图标
34     wndclass.hInstance=hIstance;//当前应用程序的句柄,就是那个Winmain函数里面的。
35     wndclass.lpfnWndProc=WndProc;//一个函数指针,处理消息的那个函数指针,就是回调函数
36     wndclass.lpszClassName="wangchao";
37     wndclass.lpszMenuName=NULL;//菜单的名字
38     wndclass.style=CS_HREDRAW|CS_VREDRAW;//窗口类的样式,就是 垂直刷新和水平刷新
39 
40     //2.注册
41 
42     //3.创建
43 
44     //4.显式
45 
46     //5.消息循环
47 
48     ::DeleteObject(hBrush);
49 }

11)2.注册代码:    

1 //2.注册(将上面的那个窗口给注册上)
2             if(::RegisterClassEx(&wndclass)==FALSE)
3             {
4                 ::MessageBox(NULL,"dhsakfljadsf","提示",MB_OK);
5                 //像函数里面用的宏,一般是函数名字的第一个字母,看MessageBox--->MB
6                 return 0;
7             }

12)3.创建代码:

   

 1         }
 2     //3.创建
 3                     //你在wndclass.lpszClassName给的啥名字,在CreateWindow()给的就是啥名字
 4                     //这个第二个参数,是你的那个窗口左上角的标题
 5                     //第三个是窗口的样子,你把他转定义,里卖弄有很多
 6                     //第四个和第五个是窗口的起始位置
 7                     //第六个和第七个是窗口的大小
 8                     //第八个是父窗口句柄,没有
 9                     //第九个是应用程序句柄,只要是应用程序句柄,都写WinMain中的那个hInstance
10         HWND hWnd=::CreateWindow("wangchao","王超",WS_OVERLAPPEDWINDOW,100,0,500,500,NULL,hIstance);
11         if(hWnd==NULL)
12         {
13             ::MessageBox(NULL,"创建失败","提示",MB_OK);
14             return 0;
15         }

13)4.显式代码

1 //4.显式
2             //这个SW_SHOW就是一个宏,它就是ShowWindow-->SW,SW_SHOW显式,SW_HIDE隐藏
3             //第一个变量是显式哪一个窗口,就是上面的我们创建的那个hWnd
4         ::ShowWindow(hWnd,SW_SHOW);

14)5.消息循环函数:

    

 1 //5.消息循环
 2         //定义一个消息句柄
 3             MSG msg;
 4             //函数的第一个变量是 取到的什么消息,第二个是这个消息是来自哪一个窗口(如果给0,说的是所有窗口的消息)
 5             //最后那个是消息的范围,0,0是所有的范围,要是写10  20  就是取第10个到第20个消息
 6             while(::GetMessage(&msg,0,0,0))
 7         {
 8             //第一步先翻译
 9             ::TranslateMessage(&msg);
10             //第二部分发
11             ::DispatchMessageA(&msg);
12 
13         }

15)整个代码:  

 1 #include<Windows.h>
 2 
 3 //这个叫  窗口消息处理函数
 4 LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
 5 {
 6     return ::DefWindowProc( hWnd, uMsg, wParam, lParam);
 7 }
 8 
 9 //第一个参数是当前这个应用程序的句柄,就是在你的window任务管理器中看到那个进程
10 //第二个参数是前一个应用程序的句柄,就是有的应用程序含有继承关系,就是一个应用程序A运行完,再运行下一个B,这个A就是hPreInstance,B就是hIstance,
11 
12 //第三个参数是命令行参数,命令行就是那个system32   
13 //第四个是一个默认的显式方式,就是窗口时可见的  还时不可见的,这个nCmdShow是不可见的
14 int CALLBACK WinMain(HINSTANCE hIstance,
15                      HINSTANCE hPreInstance,
16                      LPSTR pCmdLine,
17                      int nCmdShow)
18 {
19             //下面的因为要为那个wndclass.hbrBackground创建一个画刷,所以 加了下面的代码
20     HBRUSH hBrush=::CreateSolidBrush(RGB(0,0,255));
21             //为啥要把这个刷子写在外面,因为要是不用的话,得把它删除
22             //其实这个刷子就是一个句柄,大多数句柄 要是不用的话,必须得把它删除。
23             //然后  我去查帮助文档
24     
25     //1.设计---->就是给WNDCLASSEX结构体初始化(结构体有12个)
26             WNDCLASSEX wndclass;
27             wndclass.cbClsExtra=0;
28             wndclass.cbWndExtra=0;//这两个是确定是否要分配额外的空间
29             wndclass.cbSize=sizeof(WNDCLASSEX);
30             wndclass.hbrBackground=hBrush;//hbrBackground的转定义就是HBRUSH,一个画刷,所以 我要在 最上面创建一个画刷
31             wndclass.hCursor=NULL;//光标
32             wndclass.hIcon=NULL;//窗口图标
33             wndclass.hIconSm=NULL;//窗口左上的图标
34             wndclass.hInstance=hIstance;//当前应用程序的句柄,就是那个Winmain函数里面的。
35             wndclass.lpfnWndProc=WndProc;//一个函数指针,处理消息的那个函数指针,就是回调函数
36             wndclass.lpszClassName="wangchao";
37             wndclass.lpszMenuName=NULL;//菜单的名字
38             wndclass.style=CS_HREDRAW|CS_VREDRAW;//窗口类的样式,就是 垂直刷新和水平刷新
39 
40     //2.注册(将上面的那个窗口给注册上)
41             if(::RegisterClassEx(&wndclass)==FALSE)
42             {
43                 ::MessageBox(NULL,"dhsakfljadsf","提示",MB_OK);
44                 //像函数里面用的宏,一般是函数名字的第一个字母,看MessageBox--->MB
45                 return 0;
46             }
47     //3.创建
48                     //你在wndclass.lpszClassName给的啥名字,在CreateWindow()给的就是啥名字
49                     //这个第二个参数,是你的那个窗口左上角的标题
50                     //第三个是窗口的样子,你把他转定义,里卖弄有很多
51                     //第四个和第五个是窗口的起始位置
52                     //第六个和第七个是窗口的大小
53                     //第八个是父窗口句柄,没有
54                     //第九个是应用程序句柄,只要是应用程序句柄,都写WinMain中的那个hInstance
55         HWND hWnd=::CreateWindow("wangchao","王超",WS_OVERLAPPEDWINDOW,100,0,500,500,NULL,hIstance);
56         if(hWnd==NULL)
57         {
58             ::MessageBox(NULL,"创建失败","提示",MB_OK);
59             return 0;
60         }
61     //4.显式
62             //这个SW_SHOW就是一个宏,它就是ShowWindow-->SW,SW_SHOW显式,SW_HIDE隐藏
63             //第一个变量是显式哪一个窗口,就是上面的我们创建的那个hWnd
64         ::ShowWindow(hWnd,SW_SHOW);
65     //5.消息循环
66         //定义一个消息句柄
67             MSG msg;
68             //函数的第一个变量是 取到的什么消息,第二个是这个消息是来自哪一个窗口(如果给0,说的是所有窗口的消息)
69             //最后那个是消息的范围,0,0是所有的范围,要是写10  20  就是取第10个到第20个消息
70             while(::GetMessage(&msg,0,0,0))
71         {
72             //第一步先翻译
73             ::TranslateMessage(&msg);
74             //第二部分发
75             ::DispatchMessageA(&msg);
76 
77         }
78 
79 
80     ::DeleteObject(hBrush);
81 }

16)最终结果截图:    

      1)创建一个简单的窗口过程