zoukankan      html  css  js  c++  java
  • Win32 Application基本框架

    //程序入口

    [cpp] view plain copy
     
    1. intAPIENTRY WinMain(HINSTANCE hInstance,  
    2.                      HINSTANCE hPrevInstance,  
    3.                      LPSTR lpCmdLine,  
    4.                      int nCmdShow)  
    5. {  
    6.     MSG msg;  //消息结构体  
    7.   
    8.     //向系统注册窗口类别,输入的参数“hInstance”是目前程序运个体的对象代码  
    9.   
    10.     MyRegisterClass(hInstance);    
    11.   
    12.     //运行初始化函数  
    13.   
    14.     if( ! InitInstance(hInstance,nCmdShow)   //InitInstance函数进行初始实例化操作  
    15.   
    16.     {  
    17.         return FALSE;  
    18.     }  
    19.   
    20.     while( GetMessage( &msg,NULL, 0, 0 ) )   //GetMessage函数从消息队列中抓取消息  
    21.     {  
    22.   
    23.          TranslateMessage(&msg);   //对键盘消息进行转换成系统消息  
    24.   
    25.          DispatchMessage(&msg);  //分派消息到WndProc函数给对应的消息处理函数处理  
    26.   
    27.     }  
    28.    return msg.wParam;   //退出时返回给操作系统的消息  
    29.   
    30. }  



    //MyRegisterClass函数

    [cpp] view plain copy
     
    1. ATMO MyRegisterClass( HINSTANCE hInstance )  
    2. {  
    3.      WNDCLASSEX wcex;  
    4.   
    5.      wcex.cbsize = sizeof(WNDCLASSEX);    //WNDCLASS所占用的内存字节  
    6.   
    7.      wcex.style = CS_HREARAW | CS_VREDRAW;   //窗体的样式  
    8.   
    9.      wcex.lpfnWndProc = (WNDPROC) WndProc;   //消息处理函数名,自己命名  
    10.   
    11.      wcex.cbClsExtra = 0;   //指定分配给窗口类结构(此处指lpszClassName)之后的额外字节数  
    12.   
    13.      wcex.cbWndExtra = 0;   //指定分配给窗口实例(此处指hInstance)之后的额外字节数  
    14.   
    15.      wcex.hInstance = hInstance;   //指定窗口过程所对应的实例句柄  
    16.   
    17.      wcex.hIcon =NULL;   //任务栏上的图标,NULL表示采用默认图标  
    18.   
    19.      wcex.hCursor = LoadCursor(NULL, IDC_ARROW);   //指定光标的样式  
    20.   
    21.      wcex.hbrBackground = (HBRUSH) (COLOR_WINDOW+1);   //指定窗口的背景画刷  
    22.   
    23.      wcex.lpszMenuName = NULL;      //通过菜单资源名称加载菜单  
    24.   
    25.      wcex.lpszClassName = "seekCName";   //窗口类的类名(一个结构体而已,并不是C++的类)  
    26.   
    27.      wcex.hIconSm = NULL;   //窗口标题栏左侧的小图标,NULL表示采用默认图标  
    28.   
    29.    return RegisterClassEx(&wcex);  
    30.   
    31. }  

    //WNDCLASSEX只是比WNDCLASS多了cbsize和hIconSm这两个成员,其它的都是一样。

    //以上参数具体参看:http://baike.baidu.com/view/1750396.html

    Nwcex.lpszName = "lpszClassName"详解:

          当程序员将wcex结构按自己要求填写完成后就可以调用RegisterClass(或RegisterClassEx)函数将该类注册,这样以后凡是要创建该窗口,只需要以该类名(lpszClassName中指定)为参数调用CreateWindow,你看多方便呀,真是一举多得啊!如下Instance函数中的CreateWindow中的第一个参数“seekName”。

     

    //InitInstance函数

    [cpp] view plain copy
     
    1. BOOL Instance( HINSTANCE hInstance, int nCmdShow )  
    2.   
    3. {  
    4.      HWND hWnd;  
    5.      hInst = hInstance;  
    6.   
    7.     //建立一个窗口对象  
    8.   
    9.      hWnd = CreateWindow( "seekCName",   //窗口类名  
    10.   
    11.                            "绘图窗口",    //窗口标题栏的标题  
    12.   
    13.                            WS_OVERLAPPEDWINDOW,   //窗口的风格,定义为普通型  
    14.   
    15.                            CW_USEDEFAULT,  //窗口左上角X轴坐标  
    16.   
    17.                            0,      //窗口左上角Y轴坐标  
    18.   
    19.                            CW_USEDEFAULT,   //窗体的宽度  
    20.   
    21.                            10,    //窗体的高度  
    22.   
    23.                            NULL,   //父窗体句柄  
    24.   
    25.                            NULL,   //菜单句柄  
    26.   
    27.                            hInstance,   //此应用程序的实例句柄  
    28.   
    29.                            NULL);  //一般不用,设为空  
    30.      if( !hWnd )  
    31.      {  
    32.           return FALSE;  
    33.      }    
    34.   
    35.     MoveWindow( hWnd, 10, 10, 600, 450, true );   //设定窗口显示位置及窗口大小  
    36.   
    37.     ShowWindow( hWnd, nCmdShow );   //显示窗体  
    38.   
    39.     UpdateWindow( hWnd );   //更新窗体  
    40.   
    41.     return TRUE;  
    42.   
    43. }  

    详解ShowWindow和UpdateWindow的作用:

             UpdateWindow只是更新客户区的多个无效区域(待更新区域),如果客户区的某个区域需要重画了,那么windows只是将这个区域设为无效区,此时它不是立即重画,而是等待用户或者系统自动调用UpdateWindow,这样如果有多个区域需要重画的话,就可以串联成一个无效区链表,这样只需调用一次UpdateWindow就将这些无效区重画了,而不用多次调用,提高了效率。

            UpdateWindow()只向窗体发送WM_PAINT消息,在发送之前判断GetUpdateRect(hWnd,NULL,TRUE)看有无可绘制的客户区域,如果没有,则不发送WM_PAINT。

            UpdateWindow是在HDC上画图的(无论窗口隐藏与否),不是用来显示窗口的;

            ShowWindow 是用来显示/隐藏窗口,而不是用来在HDC上作图的。

     

    //WndProc函数

    [cpp] view plain copy
     
      1. LRESULT CALLBACK WndProc( HWND hWnd, UINT message,  
      2.                           WPARAM wParam, LPARAM lParam )  
      3. {  
      4.      PAINTSTRUCT ps;  
      5.       HDC hdc;  
      6.   
      7.       switch( message )  
      8.       {  
      9.              case WM_PAINT:   //窗口重绘消息  
      10.                   hdc = BeginPaint( hWnd, &ps );  
      11.                    //用hdc进行具体的绘图动作  
      12.                   EndPaint( hWnd, &ps );  
      13.                   break;  
      14.   
      15.              case WM_DESTROY:   //窗口结束消息  
      16.                   PostQuitMessage(0);  
      17.                   break;  
      18.   
      19.               default:  
      20.                   return DefWindowProc( hWnd, message, wParam, lParam );  //默认处理函数  
      21.      }  
      22.     retrun 0;  
      23.   
      24. }  

    http://blog.csdn.net/qq2399431200/article/details/9320317

  • 相关阅读:
    编程术语英汉对照
    asp.net常用函数
    好的博客地址
    读取项目中的txt文件内容
    Web Service的定义
    ADO.NET在开发中的部分使用方法和技巧
    如何实现文本框焦点自动跳转及通过回车键提交表单
    15位和18位身份证JS校验实例
    PL/SQL 操作数据库常见脚本
    android 隐藏标题栏
  • 原文地址:https://www.cnblogs.com/findumars/p/6569315.html
Copyright © 2011-2022 走看看