zoukankan      html  css  js  c++  java
  • 119.WIN32窗口原理

     1 #include <Windows.h>
     2 
     3 //处理消息的回调函数
     4 LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
     5 
     6 int WINAPI WinMain(HINSTANCE hinstance, HINSTANCE hpreinstance, PSTR szcmdline, int icmdshow)
     7 {
     8     //设置窗口的名字
     9     static TCHAR szappname[100] = TEXT("mywindow");
    10     
    11     //窗口类
    12     WNDCLASS wndclass;
    13     //风格
    14     wndclass.style = CS_HREDRAW | CS_VREDRAW;
    15     wndclass.lpszClassName = szappname;//设置名字
    16     wndclass.lpszMenuName = NULL;
    17     wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);//设置背景
    18     wndclass.lpfnWndProc = WndProc;//设置回调函数处理窗口
    19     wndclass.cbClsExtra = wndclass.cbWndExtra = 0;//拓展
    20     wndclass.hInstance = hinstance;//窗口句柄
    21     wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);//载入图标
    22     wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);//载入鼠标风格
    23 
    24     //通过名字,注册窗口
    25     if (!RegisterClass(&wndclass))
    26     {
    27         MessageBoxA(0, "窗口注册失败", "提示", 0);
    28         return 0;
    29     }
    30     
    31     //通过名字,创建窗口
    32     HWND hwnd = CreateWindow(szappname,//窗口名字
    33         TEXT("窗口"),//窗口标题
    34         WS_OVERLAPPEDWINDOW,//窗口风格
    35         CW_USEDEFAULT,//默认显示位置x
    36         CW_USEDEFAULT,//默认显示位置y
    37         CW_USEDEFAULT,//默认宽度
    38         CW_USEDEFAULT,//默认高度
    39         NULL,//子窗口
    40         NULL,//子菜单
    41         hinstance,//窗口句柄
    42         NULL);
    43 
    44     ShowWindow(hwnd, SW_SHOW);
    45     UpdateWindow(hwnd);//显示并更新
    46     MSG msg;//消息
    47     //消息循环(GetMessage 创建事件 TranslateMessage DispatchMessage响应事件)
    48     while (GetMessage(&msg,NULL,0,0))
    49     {
    50         TranslateMessage(&msg);
    51         //调用回调函数
    52         DispatchMessage(&msg);
    53     }
    54 
    55     return msg.wParam;
    56 }
    57 
    58 LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam)
    59 {
    60     //设备环境
    61     HDC hdc;
    62     PAINTSTRUCT ps;
    63     RECT rect;
    64     switch (message)
    65     {
    66     case WM_LBUTTONDOWN:
    67         MessageBoxA(0, "按下鼠标左键", "提示", 0);
    68         break;
    69     case WM_RBUTTONDOWN:
    70         MessageBoxA(0, "按下鼠标左键", "提示", 0);
    71         break;
    72     case WM_CLOSE:
    73         if (MessageBoxA(0, "是否关闭窗口", "提示", 1) == 1)
    74         {
    75             //关闭窗口,发送WM_DESTROY消息
    76             DestroyWindow(hwnd);
    77         }
    78         else
    79         {
    80             return 0;
    81         }
    82         break;
    83     case WM_DESTROY:
    84         MessageBoxA(0, "已成功关闭", "提示", 0);
    85         exit(0);
    86         break;
    87     default:
    88         break;
    89     }
    90     return DefWindowProc(hwnd, message, wparam, lparam);
    91 }
  • 相关阅读:
    OpenCV学习(7)--
    OpenCV学习(6)--更多形态转化、Hit-or-Miss变换、Hit-or-Miss变换、图像金字塔
    Linux基本操作
    设计模式
    利用Python进行数据分析:【Matplotlib】
    利用Python进行数据分析:【Pandas】(Series+DataFrame)
    利用Python进行数据分析:【NumPy】
    利用Python进行数据分析:【IPython】
    数据结构与算法(C/C++版)【排序】
    《操作系统》学习笔记
  • 原文地址:https://www.cnblogs.com/xiaochi/p/8538613.html
Copyright © 2011-2022 走看看