• [WinAPI] API 4 [注册][创建][消息][第一个框架类窗口]


    首先注册了窗口类,然后创建了一个窗口,创建窗口时指定的窗口的属性和窗口消息的处理函数。函数消息的处理函数大多调用系统默认函数来处理。

     1 #include<windows.h>
     2 
     3 /*全局变量*/
     4 HINSTANCE hinst;
     5 
     6 /*函数声明*/
     7 int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int);
     8 LRESULT CALLBACK MainWndProc(HWND,UINT,WPARAM,LPARAM);
     9 
    10 /*显示一个窗口*/
    11 int WinMain(HINSTANCE hInstance,
    12             HINSTANCE hPrevInstance,
    13             LPSTR lpCmdLine,
    14             int nCmdShow
    15             )
    16 {
    17     WNDCLASSEX wcx;//窗口类
    18     HWND hwnd;//窗口句柄
    19     MSG msg;//消息
    20     BOOL fGotMessage;//是否获取消息
    21     hinst=hInstance;//应用程序实例句柄,保存为全局变量
    22     //填充窗口的数据结构
    23     wcx.cbSize=sizeof(wcx);//结构体的大小
    24     wcx.style=CS_HREDRAW | CS_VREDRAW;//样式:大小改变时重绘界面
    25     wcx.lpfnWndProc=MainWndProc;//消息处理函数
    26     wcx.cbClsExtra=0;//不使用类内存
    27     wcx.cbWndExtra=0;//不使用窗口内存
    28     wcx.hInstance=hInstance;//所属应用程序的实例句柄
    29     wcx.hIcon=LoadIcon(NULL,IDI_APPLICATION);//图标:默认
    30     wcx.hCursor=LoadCursor(NULL,IDC_ARROW);//光标:默认
    31     wcx.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);//背景:白色
    32     wcx.lpszMenuName=NULL;//菜单:不使用
    33     wcx.lpszClassName="MainWClass";//窗口类名
    34     wcx.hIconSm=(HICON)LoadImage(hInstance,
    35         MAKEINTRESOURCE(5),
    36         IMAGE_ICON,
    37         GetSystemMetrics(SM_CXSMICON),
    38         GetSystemMetrics(SM_CYSMICON),
    39         LR_DEFAULTCOLOR);
    40 
    41     //注册窗口类
    42     if(!RegisterClassEx(&wcx))
    43     {
    44         MessageBox(NULL,TEXT("注册窗口失败"),NULL,MB_OK);
    45         return 1;
    46     }
    47 
    48     //创建窗口
    49     hwnd=CreateWindow(
    50         "MainWClass",//window name
    51         "CH 2-3",//window title
    52         WS_OVERLAPPEDWINDOW,//窗口样式
    53         CW_USEDEFAULT,//水平位置X:默认
    54         CW_USEDEFAULT,//水平位置Y:默认
    55         CW_USEDEFAULT,//默认
    56         CW_USEDEFAULT,//high:默认
    57         (HWND)NULL,//父窗口:无
    58         (HMENU)NULL,//菜单:使用窗口类的菜单
    59         hInstance,//应用程序实例句柄
    60         (LPVOID)NULL);//窗口创建时数据:无
    61     
    62     if(!hwnd)
    63     {
    64         MessageBox(NULL,TEXT("创建窗口失败"),NULL,MB_OK);
    65         return 1;
    66     }
    67     //显示窗口
    68     ShowWindow(hwnd,nCmdShow);
    69     UpdateWindow(hwnd);
    70     //消息循环
    71     while((fGotMessage=GetMessage(&msg,(HWND)NULL,0,0))!=0 && fGotMessage!=-1)
    72     {
    73         TranslateMessage(&msg);
    74         DispatchMessage(&msg);
    75     }
    76     return msg.wParam;
    77 }
    78 /*MainWndProc****************************
    79 *消息处理函数
    80 *对所有消息采取默认处理函数
    81 *****************************************/
    82 LRESULT CALLBACK MainWndProc(HWND hwnd,
    83                              UINT uMsg,
    84                              WPARAM wParam,
    85                              LPARAM lParam
    86                              )
    87 {
    88     switch(uMsg)
    89     {
    90     case WM_DESTROY:
    91         ExitThread(0);
    92         return 0;
    93     default:
    94         return DefWindowProc(hwnd,uMsg,wParam,lParam);
    95     }
    96 }
  • 相关阅读:
    【项目 · Wonderland】UML设计
    【项目 · Wonderland】预则立 && 他山之石
    【项目 · Wonderland】需求规格说明书 · 终版
    【项目 · 学生部门互选系统】项目展示
    【项目 · Wonderland】立项报告
    React 封装Form表单组件
    前端算法题解析 《四》
    前端算法题解析 《三》
    前端算法题解析 《二》
    前端算法题解析 《一》
  • 原文地址:https://www.cnblogs.com/zjutlitao/p/3583720.html
Copyright © 2020-2023  润新知