• Windows编程模型


      1 #include <windows.h>
      2 
      3 //事件驱动编程模型
      4 //一切都是窗口:窗口和句柄
      5 //消息与消息队列
      6 
      7 //最简单的应用程序必须包含两个函数
      8 //WinMain
      9 //WndProc
     10 
     11 //窗口过程回调函数
     12 //宏修饰符
     13 LRESULT WINAPI WndProc(HWND, UINT, WPARAM, LPARAM);
     14 
     15 //相当于int main(void)
     16 //H是handler句柄
     17 //Instamce实例
     18 int WINAPI WinMain( HINSTANCE hInstance,
     19                     //实例句柄
     20                     HINSTANCE HprevInstance,
     21                     LPSTR lpszCmdLine,
     22                     int nCmdShow)
     23 {
     24     //窗口句柄
     25     HWND hwnd;
     26     //MSG是消息类型
     27     MSG msg;
     28     //窗口类
     29     //typedef struct tagWNDCLASSW {
     30     //    UINT        style;
     31     //    WNDPROC     lpfnWndProc;
     32     //    int         cbClsExtra;
     33     //    int         cbWndExtra;
     34     //    HINSTANCE   hInstance;
     35     //    HICON       hIcon;
     36     //    HCURSOR     hCursor;
     37     //    HBRUSH      hbrBackground;
     38     //    LPCWSTR     lpszMenuName;
     39     //    LPCWSTR     lpszClassName;
     40     //} WNDCLASSW, *PWNDCLASSW, NEAR *NPWNDCLASSW, FAR *LPWNDCLASSW;
     41     //1.设计一个窗口类
     42     WNDCLASS wc;
     43     wc.style = 0;
     44     //告诉窗口类用哪个窗口过程回调
     45     wc.lpfnWndProc = WndProc;
     46     //窗口类额外信息
     47     wc.cbClsExtra = 0;
     48     //窗口句柄额外信息
     49     wc.cbWndExtra = 0;
     50     //窗口实例
     51     wc.hInstance = hInstance;
     52     //窗口图标
     53     wc.hIcon = LoadIcon(NULL, IDI_WINLOGO);
     54     //窗口鼠标类型
     55     wc.hCursor = LoadCursor(NULL, IDC_ARROW);
     56     //画刷背景颜色
     57     wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
     58     //窗口菜单
     59     wc.lpszMenuName = NULL;
     60     //窗口类名字
     61     wc.lpszClassName = TEXT("myWndClass");
     62 
     63     //2.注册窗口类
     64     RegisterClass(&wc);
     65 
     66     //3.创建窗口
     67     hwnd = CreateWindow(
     68         TEXT("myWndClass"),
     69         TEXT("窗口标题"),
     70         WS_OVERLAPPEDWINDOW,
     71         CW_USEDEFAULT,
     72         CW_USEDEFAULT,
     73         CW_USEDEFAULT,
     74         CW_USEDEFAULT,
     75         NULL,//父窗口句柄
     76         NULL,//窗口菜单句柄
     77         hInstance,
     78         NULL);
     79 
     80     //4.显示和更新窗口
     81     ShowWindow(hwnd, nCmdShow);
     82     UpdateWindow(hwnd);
     83 
     84     //5.消息循环
     85     while (GetMessage(&msg, NULL, 0, 0))
     86     {
     87         //主要是键盘的消息是扫描码要变换成ASCII码需要翻译
     88         TranslateMessage(&msg);
     89         DispatchMessage(&msg);
     90     }
     91 
     92     return msg.wParam;
     93 }
     94 
     95 
     96 LRESULT WINAPI WndProc(HWND hwnd,
     97                             UINT message, 
     98                             WPARAM wParam, 
     99                             LPARAM lParam)
    100 {
    101     //窗口过程回调对各种消息进行处理
    102     switch (message)
    103     {
    104     case WM_PAINT:
    105         return 0;
    106     case WM_DESTROY:
    107         //销毁窗口
    108         PostQuitMessage(0);
    109         return 0;
    110     }
    111     return DefWindowProc(hwnd, message, wParam, lParam);
    112 }
  • 相关阅读:
    android studio中timber的配置
    bufferknife框架的正确使用方式 -终于他么知道了
    开源的图像滤镜库----for Android
    HSV做通道分离是出现的Vector内存越界错误
    HSV与RGB的相互转换的公式
    Windows下python的第三方库的安装
    Python出现"Non-ASCII character 'xe6' in file"错误解决方法
    Verilog的IDE Quartus II
    Java-ZipUtil工具类
    Java-JDBCUtil工具类
  • 原文地址:https://www.cnblogs.com/mubu/p/5813091.html
Copyright © 2020-2023  润新知