• 孙鑫视频---Windows程序内部运行原理


    窗口的创建

    创建一个完整的窗口需要经过下面四个操作步骤:

    1. 设计一个窗口类;

    2. 注册窗口类;

    3. 创建窗口;

    4. 显示及更新窗口。

    设计窗口类

    typedef struct _WNDCLASS { 
       UINT        style; 
       WNDPROC    lpfnWndProc; 
       int         cbClsExtra; 
       int         cbWndExtra; 
       HANDLE     hInstance; 
       HICON       hIcon; 
       HCURSOR     hCursor; 
       HBRUSH      hbrBackground; 
       LPCTSTR     lpszMenuName; 
       LPCTSTR     lpszClassName;  
    } WNDCLASS; 

    lpfnWndProc:回调函数

    HICON:图标

    HCURSOR:光标

    HBRUSH:画刷(影响背景颜色)

    LPCTSTR:菜单的名字

    LPCTSTR:名字

    #include <windows.h>
    #include <stdio.h>
    
    LRESULT CALLBACK WinSunProc(
      HWND hwnd,      // handle to window
      UINT uMsg,      // message identifier
      WPARAM wParam,  // first message parameter
      LPARAM lParam   // second message parameter
    );
    
    int WINAPI WinMain(
      HINSTANCE hInstance,      // handle to current instance
      HINSTANCE hPrevInstance,  // handle to previous instance
      LPSTR lpCmdLine,          // command line
      int nCmdShow              // show state
    )
    {
        WNDCLASS wndcls;
        wndcls.cbClsExtra=0;
        wndcls.cbWndExtra=0;
        wndcls.hbrBackground=(HBRUSH)GetStockObject(BLACK_BRUSH);
        wndcls.hCursor=LoadCursor(NULL,IDC_CROSS);
        wndcls.hIcon=LoadIcon(NULL,IDI_ERROR);
        wndcls.hInstance=hInstance;
        wndcls.lpfnWndProc=WinSunProc;
        wndcls.lpszClassName="Weixin2003";
        wndcls.lpszMenuName=NULL;
        wndcls.style=CS_HREDRAW | CS_VREDRAW;
        RegisterClass(&wndcls);
    
        HWND hwnd;
        hwnd=CreateWindow("Weixin2003","北京维新科学技术培训中心",WS_OVERLAPPEDWINDOW,
            0,0,600,400,NULL,NULL,hInstance,NULL);
    
        ShowWindow(hwnd,SW_SHOWNORMAL);
        UpdateWindow(hwnd);
    
        MSG msg;
        while(GetMessage(&msg,NULL,0,0))
        {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
        return 0;
    }
    
    LRESULT CALLBACK WinSunProc(
      HWND hwnd,      // handle to window
      UINT uMsg,      // message identifier
      WPARAM wParam,  // first message parameter
      LPARAM lParam   // second message parameter
    )
    {
        switch(uMsg)
        {
        case WM_CHAR:
            char szChar[20];
            sprintf(szChar,"char is %d",wParam);
            MessageBox(hwnd,szChar,"weixin",0);
            break;
        case WM_LBUTTONDOWN:
            MessageBox(hwnd,"mouse clicked","weixin",0);
            HDC hdc;
            hdc=GetDC(hwnd);
            TextOut(hdc,0,50,"计算机编程语言培训",strlen("计算机编程语言培训"));
            ReleaseDC(hwnd,hdc);
            break;
        case WM_PAINT:
            HDC hDC;
            PAINTSTRUCT ps;
            hDC=BeginPaint(hwnd,&ps);
            TextOut(hDC,0,0,"维新培训",strlen("维新培训"));
            EndPaint(hwnd,&ps);
            break;
        case WM_CLOSE:
            if(IDYES==MessageBox(hwnd,"是否真的结束?","weixin",MB_YESNO))
            {
                DestroyWindow(hwnd);
            }
            break;
        case WM_DESTROY:
            PostQuitMessage(0);
            break;
        default:
            return DefWindowProc(hwnd,uMsg,wParam,lParam);
        }
        return 0;
    }

    认识 CreateWindow 函数

    
    
    
    
    
  • 相关阅读:
    StackExchange.Redis 文档翻译
    性能分析
    脚本
    KEYS,SCAN,FLUSHDB 等等,这些命令在哪里?
    事件
    发布/订阅 消息顺序
    Redis中的事务
    键、值以及通道
    管道和多路复用器
    配置
  • 原文地址:https://www.cnblogs.com/yangyuqing/p/10234769.html
Copyright © 2020-2023  润新知