zoukankan      html  css  js  c++  java
  • 创建窗口

    消息循环”,实际是程序循环即Windows 中有一个系统消息队列,对于每一个正在执行的Windows应用程序,系统为其建立一个消息队列,即应用程序队列,用来存放该程序可能创建的各种窗口的消息。应用程序中含有一段称作消息循环的代码,用来从消息队列中检索这些消息并把它们分发到相应的窗口函数.

    消息循环代码是应用程序中主函数WinMain ( )中类似如下的程序段

    while(GetMessage(&msg,NULL,0,0))

    { //消息队列中取得消息

    TranslateMessage(&msg);

    //检索并生成字符消息WM_CHAR

    DispatchMessage(&msg);

    //将消息发送给相应的窗口函数

    }

    创建窗口实例

    注册表初始化

    typedef struct _WNDCLASS {

        UINT       style; //默认风格,窗口尺寸被修改后重画窗口

        WNDPROC    lpfnWndProc; //窗口回调

        int        cbClsExtra; //窗口类的额外空间

        int        cbWndExtra; //窗口实例的额外空间

        HINSTANCE  hInstance; //句柄实例

        HICON      hIcon; //图标

        HCURSOR    hCursor; //光标

        HBRUSH     hbrBackground; //背景

        LPCTSTR    lpszMenuName; //菜单

        LPCTSTR    lpszClassName; //类名

    } WNDCLASS, *PWNDCLASS;

    注册窗口类  返回值为0表示失败 成功返回

    ATOM nRet = RegisterClass(&wc);

    获取错误信息在工具错误列表查看错误报告或者@err.hr *(int*)(tib+0x34).hr

    DWORD dwErrCode = GetLastError();

    错误信息显示FormatMessage

     LPVOID lpMsgBuf;

      FormatMessage(

        FORMAT_MESSAGE_ALLOCATE_BUFFER |

        FORMAT_MESSAGE_FROM_SYSTEM |

        FORMAT_MESSAGE_IGNORE_INSERTS,

        NULL,

        GetLastError(),

        MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language

        (LPTSTR)&lpMsgBuf,

        0,

        NULL

        );

      // Process any inserts in lpMsgBuf.

      // ...

      // Display the string.

      MessageBox(NULL, (LPCTSTR)lpMsgBuf, TEXT("Error"), MB_OK | MB_ICONINFORMATION);

      // Free the buffer.

      LocalFree(lpMsgBuf);

    创建窗口实例

    HWND CreateWindow(

     LPCTSTR lpClassName, //窗口类名

    LPCTSTR lpWindowName,  //窗口标题

    DWORD dwStyle,//窗口属性  一般有ws_overlapped   ws_child    ws_popup

     int x, int y,//窗口坐标

     int nWidth,//窗口宽

     int nHeight,//窗口高

     HWND hWndParent, 父窗口

    HMENU hMenu, 菜单

    HANDLE hInstance,  //句柄实例

     PVOID lpParam );//保留值 用来传值 一般添NULL

      

    显示窗口

      BOOL ShowWindow(

    HWND hWnd, // handle to window  窗口句柄

    int nCmdShow // show state 显示风格

     );

    一般显示窗口完了后就是更新窗口,两个在一块

    更新窗口

      UpdateWindow(HWND hWnd);

    一般系统将消息投入消息队列,消息队列取出消息分辨窗口句柄,将消息传给回调函数,回调函数分辨消息作用来实现对应的功能

    获得消息

    BOOL GetMessage(

    LPMSG lpMsg,获取的消息指针存入, 比如MSG msg;    &msg

     HWND hWnd,       窗口句柄

    UINT wMsgFilterMin,   获取消息最小值

    UINT wMsgFilterMax );  获取消息最小值

    列子

    BOOL bRet;

     

    while( (bRet = GetMessage( &msg, NULL, 0, 0 )) != 0)

    {

        if (bRet == -1)

        {

            // handle the error and possibly exit

        }

        else

        {

            TranslateMessage(&msg);

            DispatchMessage(&msg);

        }

    }

     

    回调函数(msdn,没找到相关信息 还有待了解)

    LRESULT CALLBACK WindowProc(HWND hwnd,      // handle to window

      UINT uMsg,      // message identifier

      WPARAM wParam,  // first message parameter

      LPARAM lParam   // second message parameter

      ){};

    一般回调函数其他情况会返回以下内容   为将其他情况交给系统默认处理

     return DefWindowProc(hwnd, uMsg, wParam, lParam);

    switch (uMsg)

      {

    //如果消息为退出 向消息队列投递退出消息队列信息

      case WM_DESTROY:

        //向消息队列投递WM_QUIT消息

        PostQuitMessage(0);

        return 0;

       // 鼠标消息,左键按下  返回窗口的坐标属性

       case WM_LBUTTONDOWN:

       {

         int xPos = LOWORD(lParam);

         int yPos = HIWORD(lParam);

         return 0;

       }

      default:

        break;

    }

    学如逆水行舟,不进则退。 博客园技术交流群 群 号:1073255314 (本群没人,刚刚建立 -_-!!! )
  • 相关阅读:
    e.target和e.event和event.srcElement
    js代码优化
    史上最全的CSS hack方式一览
    学习NodeJS第一天:node.js引言
    响应式布局
    HTML+CSS编写规范
    英文SEO外部链接资源收集之常用的footprints
    判别木马
    php简单命令代码集锦
    zencart 新页面调用好功能代码集:
  • 原文地址:https://www.cnblogs.com/Mj-NaijAm/p/13613530.html
Copyright © 2011-2022 走看看