zoukankan      html  css  js  c++  java
  • 窗口与标题

    前言:

      学习逆向工程经典书籍《加密与解密》需要先学习《windows程序设计》这本书籍,在来来回回折腾之后,遂决定好好品读这本书,以为看《加密与解密》打基础,

    写博客是为了加强对知识的理解及巩固以及对知识的复习。好了不多说,下面上代码:

    #include<windows.h>
    
    LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);
    
    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
    {
        static TCHAR szAppName[] = TEXT("HelloWin");
        HWND hwnd;
        MSG msg;
        WNDCLASS wndclass;
    
        wndclass.style = CS_HREDRAW | CS_VREDRAW;
        wndclass.lpfnWndProc = WndProc;
        wndclass.cbClsExtra = 0;
        wndclass.cbWndExtra = 0;
        wndclass.hInstance = hInstance;
        wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
        wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
        wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
        wndclass.lpszMenuName = NULL;
        wndclass.lpszClassName = szAppName;
    
        if (!RegisterClass(&wndclass))
        {
            MessageBox(NULL, TEXT("This Program requires Windows NT!"), szAppName, MB_ICONERROR);
            return 0;
        }
    
        hwnd = CreateWindow(                
            szAppName,                            //窗口类名称
            TEXT("The Hello Program"),            //窗口标题
            WS_OVERLAPPEDWINDOW,                  //窗口风格    
            CW_USEDEFAULT,                        //初始x坐标
            CW_USEDEFAULT,                        //初始y坐标
            CW_USEDEFAULT,                        //初始x方向长度
            CW_USEDEFAULT,                        //初始y方向长度
            NULL,                                //父窗口句柄
            NULL,                                //窗口菜单句柄
            hInstance,                            //程序实例句柄
            NULL                                //创建参数
        );
        ShowWindow(hwnd, iCmdShow);
        UpdateWindow(hwnd);
        while (GetMessage(&msg, NULL, 0, 0))
        {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
        return msg.wParam;
    }
    
    LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
        HDC hdc;
        PAINTSTRUCT ps;
        RECT rect;
    
        switch (message)
        {
        case WM_CREATE:
            return 0;
        case WM_PAINT:
            hdc = BeginPaint(hwnd, &ps);
            GetClientRect(hwnd, &rect);
            DrawText(hdc, TEXT("Hello World!"), -1, &rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER);
            EndPaint(hwnd, &ps);
            return 0;
        case WM_DESTROY:
            PostQuitMessage(0);
            return 0;
        }
            
        return DefWindowProc(hwnd, message, wParam, lParam);
    }

    WinMain的四个参数分别代表的含义是:hInstance代表当前实例句柄,hPrevInstance代表上一个程序的实例句柄,szCmdLine代表命令行,iCmdShow代表程序窗口是以最大化、最小化展示。

    代码中的ShowWindow在屏幕中显示窗口,而UpdateWindow则会向窗口过程函数发送WM_PAINT消息使窗口进行重绘,CreateWindow则会在内部创建窗口并保存数据,直到ShowWindow调用显示窗口。在调用CreateWindow时,会产生WM_CREATE对窗口进行一些初始化工作。

    基于一个窗口类可以创建多个窗口,创建多个窗口使只需要在CreateWindow函数中初始化第一个参数为窗口类的名称(也就是wndclass.lpszClassName)。

    GetClientRect函数第二个参数会获取客户区的尺寸,以便DrawText在客户区尺寸内显示文本,DrawText中的-1是指字符串以0结尾。

    任何没有对应case的消息会由DefWindowProc进行处理,以及每条消息处理完后都要返回0。

  • 相关阅读:
    python如何使用Matplotlib的作图
    python如何使用Matplotlib的作图
    Python下载M3U8小鹅通回放视频代码
    Python下载M3U8小鹅通回放视频代码
    python自动化之JS处理滚动条
    python自动化之JS处理滚动条
    数据分析项目-数据分析岗位近况分析
    数据分析项目-数据分析岗位近况分析
    Python安装模块常用镜像源
    使用ABSL(ABAP Script Language)完成SAP Cloud for Customer里Customer Quote以及行项目的增删改查
  • 原文地址:https://www.cnblogs.com/Lu3ky-Athena/p/13618898.html
Copyright © 2011-2022 走看看