1 #include<windows.h>
 2 
 3 LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);//CALLBACK函数由Windows调用 

 

步骤:

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

1.窗口类结构 WNDCLASS

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,PSTR lpCmdLine,int iCmdShow)
{
    static TCHAR szAppName[]=TEXT("类的名字");
    HWND hwnd;
    MSG msg;
    WNDCLASS wndclass;
                                 //CS 类风格选项 
    wndclass.style=CS_HREDRAW|CS_VREDRAW;// 调整高度(vehicle)、宽度(horizon)后是否重绘窗口 
    wndclass.lpfnWndProc=WndProc;//暂时不知道是什么
    wndclass. cbClsExtra=0;//预留的额外空间 
    wndclass.cbWndExtra=0;//预留的额外空间 
    wndclass.hInstance=hInstance;//应用程序的实力句柄 
    wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION);//为所有基于该窗口的类 ;   IDI图标的ID号,IDIcon 
    wndclass.hCursor=LoadCursor(NULL,IDC_ARROW) ;// 光标;    IDC光标的ID号 ,IDCursor 
    wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);// 
    wndclass.lpszMenuName=NULL;//菜单 
    wndclass.lpszClassName=szAppName;//窗口类的名字,第七行

2.注册窗口类 RegisterClass

1     if(!RegisterClass(&wndclass)) 
2     {                                                                    //MB  消息框选项 
3         MessageBox(NULL,TEXT("这个程序需要在Windows NT才能执行!"),szAppName,MB_ICONERROR);
4         return 0;
5     }

 

3.创建窗口实例 CreateWindow  此时窗口在内存中诞生(句柄),但还未显示出。

 1     hwnd= CreateWindow(szAppName,
 2             TEXT("学习Windows编程"),
 3             WS_OVERLAPPEDWINDOW,// WS  窗口风格   OVERLAPPEDWINDOW很多属性叠加 
 4             CW_USEDEFAULT,//CW 创建窗口选项  create window 
 5             CW_USEDEFAULT,
 6             CW_USEDEFAULT,
 7             CW_USEDEFAULT,
 8             NULL,
 9             NULL,
10             hInstance,
11             NULL);

 

4.显示窗口 ShowWindow

ShowWindow(hwnd,iCmdShow);//显示窗口 

 

5.更新窗口 UpdateWindow

 

 1 UpdateWindow(hwnd);//更新窗口
 2     
 3     
 4     //消息循环   
 5      while(GetMessage(&msg,NULL,0,0))
 6      {
 7          TranslateMessage(&msg);
 8          DispatchMessage(&msg);
 9     } 
10        
11       return msg.wParam;
12             
13 }

LRESULT  CALLBACK Wndproc函数

 

 7 
 8 
 9 
10 LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
11 {
12         HDC hdc;
13         PAINTSTRUCT ps;//存放绘制窗口需要的参数 
14         RECT rect;  //定义了矩形左上角和右下角的坐标 
15 
16         switch (message)
17         {
18         case WM_PAINT:
19                 hdc = BeginPaint(hwnd, &ps);  //device context 设备环境 
20                 GetClientRect(hwnd, &rect);  //获得客户区位置坐标信息 
21                 DrawText(hdc, TEXT("这里是徐徐风的第一个窗口~"), -1, &rect,
22                         DT_SINGLELINE | DT_CENTER | DT_VCENTER);//分别是显示在 一行,居中,垂直居中  
23                 EndPaint(hwnd, &ps);
24                 return 0;
25         case WM_DESTROY:
26                 PostQuitMessage(0);
27                 return 0;
28         }
29 
30         return DefWindowProc(hwnd, message, wParam, lParam);
31 }

 

 

 

 

 

 

 

另外:

消息机制 : 1.FIFO  先进先出

                    2.WM_PAINT,WM_TIMER,WM_QUIT这三个消息时刻在消息队列最后

       3.消息分为队列化和非队列化消息

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄