zoukankan      html  css  js  c++  java
  • 1)创建一个简单的窗口过程

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

    2)当前结果截图

         

          

    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 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你建立一个句柄,要想着给他删除掉,至于怎么删除,你不会 可以查帮助文档:

          

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

          

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

               

     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 #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 }

          两次转定义结果截图:
      

          

          

        第二次转定义:
          

          

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

          

          

     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 #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)最终结果截图:    

          

  • 相关阅读:
    Unix/Linux环境C编程入门教程(32) 环境变量那些事儿
    Unix/Linux环境C编程入门教程(34) 编程管理系统中的用户
    Unix/Linux环境C编程入门教程(30) 字符串操作那些事儿
    Unix/Linux环境C编程入门教程(29) 内存操作那些事儿
    Unix/Linux环境C编程入门教程(28) 日期时间那些事儿
    Unix/Linux环境C编程入门教程(27) 内存那些事儿
    模板函数冲突
    C语言的本质(30)——C语言与汇编之ELF文件格式
    C语言的本质(29)——C语言与汇编之寄存器和寻址方式
    DG观察日志传输
  • 原文地址:https://www.cnblogs.com/xiaoyoucai/p/8298800.html
Copyright © 2011-2022 走看看