首页 > 系统相关 >windows编程自己常用的代码记录

windows编程自己常用的代码记录

时间:2023-04-04 23:44:36浏览次数:45  
标签:case wc windows hWnd 代码 编程 break NULL WM

首先新建makefile

ALL:main

files += -mwindows -lcomctl32 -ldwmapi

main:$(cpp)
	g++ $(cpp) $(files) -o $(exe) -static -Wall -std=c++11 $(INCLUDE) $(LIB)

.PHONY: clean all
clean:
	del *.exe -rf

形成的编译命令是:g++ demo.cpp -mwindows -lcomctl32 -ldwmapi -o demo -static -Wall -std=c++11

异形窗口

#include <windows.h>

LRESULT CALLBACK WinProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    static HDC hDC = GetWindowDC(hWnd);
    static HRGN hRgn = CreateRectRgn(120, 70, 280, 230);

    switch (uMsg)
    {
    case WM_ERASEBKGND:
    {
        DefWindowProc(hWnd, uMsg, wParam, lParam);
        FillRgn(hDC, hRgn, CreateSolidBrush(RGB(255, 165, 0))); // Orange
        SelectObject(hDC, hRgn);
        return 0;
    }

    case WM_CREATE:
    {
        HRGN hRgn1 = CreateEllipticRgn(0, 0, 400, 300);
        HRGN hRgn2 = CreateEllipticRgn(150, 100, 250, 200);
        CombineRgn(hRgn1, hRgn1, hRgn2, RGN_XOR);
        SetWindowRgn(hWnd, hRgn1, TRUE);
        DeleteObject(hRgn1);
        DeleteObject(hRgn2);
        break;
    }

    case WM_LBUTTONDOWN:
    {
        SendMessage(hWnd, WM_NCLBUTTONDOWN, HTCAPTION, 0);
        break;
    }

    case WM_DESTROY:
    {
        DeleteObject(hRgn);
        ReleaseDC(hWnd, hDC);
        PostQuitMessage(0);
        break;
    }
    }
    return DefWindowProc(hWnd, uMsg, wParam, lParam);
    ;
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR, BOOL)
{
    WNDCLASS wc = {0};
    wc.lpszClassName = TEXT("wndclass");
    wc.hbrBackground = CreateSolidBrush(RGB(255, 99, 71));
    wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
    wc.hCursor = LoadCursor(NULL, IDC_ARROW);
    wc.lpfnWndProc = WinProc;
    RegisterClass(&wc);

    HWND hWnd = CreateWindowEx(WS_EX_LAYERED | WS_EX_TOPMOST, wc.lpszClassName, TEXT("Window"), WS_POPUP | WS_VISIBLE, CW_USEDEFAULT, CW_USEDEFAULT, 400, 300, 0, 0, hInstance, 0);
    if (hWnd == NULL)
        return 1;

    SetLayeredWindowAttributes(hWnd, NULL, 178, LWA_ALPHA); // Tomato

    MSG msg = {0};
    while (GetMessage(&msg, 0, 0, 0))
    {
        DispatchMessage(&msg);
    }

    return 0;
}

单击更改分辨率

#include <Windows.h>
#include <strsafe.h>

/*****
 * CALLBACK代表__stdcall 参数的传递顺序 从右到左 依次入栈 并且在函数返回前 依次出栈
 * HWND UINT WPARAM LPARAM
 * 消息所属的窗口句柄
 * 消息名称 WM_XXX消息名
 * 键盘附加消息
 * 鼠标附加消息
 */

LRESULT CALLBACK WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    switch (uMsg)
    {
    case WM_CREATE:
    {
    }
    break;
    case WM_PAINT:
    {
    }
    break;
    case WM_SIZE:
    {
    }
    break;
    case WM_COMMAND:
    {
    }
    break;
    case WM_LBUTTONDOWN:
    {
        DISPLAY_DEVICE m_Device;
        DEVMODE m_DeviceMode;
        m_Device.cb = sizeof(DISPLAY_DEVICE);
        m_DeviceMode.dmSize = sizeof(DEVMODE);
        m_DeviceMode.dmDriverExtra = 0;
        EnumDisplayDevices(NULL, 0, &m_Device, 0);

        if (EnumDisplaySettingsEx(m_Device.DeviceName, ENUM_CURRENT_SETTINGS, &m_DeviceMode, 0))
        {
            m_DeviceMode.dmPelsWidth = 1024;
            m_DeviceMode.dmPelsHeight = 768;
            if (ChangeDisplaySettingsEx(m_Device.DeviceName, &m_DeviceMode, NULL, 0, NULL) == DISP_CHANGE_SUCCESSFUL)
            {
            }
        }
    }
    break;
    case WM_KEYDOWN:
    {
    }
    break;
    case WM_CLOSE:
    {
        DestroyWindow(hWnd);
    }
    break;
    case WM_DESTROY:
    {
        PostQuitMessage(0);
    }
    break;
    default:
    {
    }
    }
    return DefWindowProc(hWnd, uMsg, wParam, lParam);
}

// WINAPI代表__stdcall 参数的传递顺序 从右到左 依次入栈 并且在函数返回前 依次出栈
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
    WNDCLASS wc;
    wc.cbClsExtra = 0;                                      // 类的额外内存
    wc.cbWndExtra = 0;                                      // 窗口额外内存
    wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); // 背景
    wc.hCursor = LoadCursor(NULL, IDC_ARROW);               // 光标 第一个为NULL代表使用系统提供的光标
    wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);             // 图标 第一个为NULL代表使用系统提供的图标
    wc.hInstance = hInstance;                               // 应用程序实例句柄
    wc.lpfnWndProc = WindowProc;                            // 回调函数
    wc.lpszClassName = TEXT("main");                        // 窗口类名称
    wc.lpszMenuName = NULL;                                 // 菜单名称
    wc.style = CS_HREDRAW | CS_VREDRAW;                     // 显示风格

    RegisterClass(&wc);

    /*****
     * CreateWindow()
     * lpClassName,lpWindowName,dwStyle,x,y,nWidth,nHeight,hWndParent,hMenu,hInstance,lpParam
     * 类名
     * 标题名
     * WS_OVERLAPPEDWINDOW 混合风格
     * x坐标 CW_USEDEFAULT
     * y坐标
     * 宽
     * 高
     * 父窗口 NULL
     * 菜单 NULL
     * 实例句柄 hInstance
     * 附加值
     */
    HWND hWnd = CreateWindow(wc.lpszClassName, TEXT("Windows"), WS_OVERLAPPEDWINDOW,
                             CW_USEDEFAULT,
                             CW_USEDEFAULT,
                             CW_USEDEFAULT,
                             CW_USEDEFAULT,
                             NULL, NULL, hInstance, NULL);
    if (hWnd == NULL)
    {
        return 0;
    }
    ShowWindow(hWnd, SW_SHOWNORMAL);
    UpdateWindow(hWnd);

    /*****
     * HWND hwnd; 主窗口句柄
     * UINT message; 具体消息名称
     * WPARAM wParam; 附加消息 键盘消息
     * LPARAM lParam; 附加消息 鼠标消息
     * DWORD time; 消息产生时间
     * POINT pt; 附加消息 鼠标消息 x y
     */
    MSG msg;

    /*****
     * LPMSG lpMsg,HWND hWnd,UINT wMsgFilterMin,UINT wMsgFilterMax
     * 消息
     * 捕获窗口 NULL代表捕获所有窗口
     * 最小的过滤消息 0代表捕获所有消息
     * 最大的过滤消息 0代表捕获所有消息
     */
    while (GetMessage(&msg, NULL, 0, 0))
    {
        // 如果按的是组合键 需要翻译
        TranslateMessage(&msg);
        // 单按一个键盘就直接分发消息
        DispatchMessage(&msg);
    }
    return 0;
}

标签:case,wc,windows,hWnd,代码,编程,break,NULL,WM
From: https://www.cnblogs.com/codebai/p/17288287.html

相关文章

  • 【Windows】Advanced_System_Care ( v 11.3.5 ) 内存清理插件 大小15.1 MB
    【Windows】Advanced_System_Care(v11.3.5)内存清理插件大小为15.1MBhttps://xcherry.lanzouj.com/il2iOmsobni密码: 3dw3 软件提取自Advanced_System_Care(  v11.3.5  )软件从2018年来,在自己电脑上用到了今天,觉得还不错,分享出来,类似于腾讯电脑管家的小火......
  • 前端项目代码阅读指南
    0.把项目运行起来,如果npm总是报错,并且项目年代久远,直接放弃,找一个能跑起来的看。1.看package.json,了解项目中用到了哪些依赖,这些依赖一般都是怎么使用的,项目结构大概什么样子2.看目录,猜一下每个目录下的文件都是干什么的3.看入口文件,一般是index.js,或者app.js,了解全局......
  • C#高清打印关键代码
    打印过程中,获取可见的实际宽度作为打印,就没有收缩的了,图片收缩放大是模糊的原因之一,所以所见所得就是最好的方法1privatevoidprintDocNew_PrintPage(objectsender,System.Drawing.Printing.PrintPageEventArgse)2{3Graphicsg=e.Gra......
  • JsonCpp JSON格式处理库的介绍和使用(面向业务编程-文件格式处理)
    JsonCppJSON格式处理库的介绍和使用(面向业务编程-文件格式处理)介绍JSON是一种轻量级的数据交换格式,它是一种键值对的集合。它的值可以是数字、字符串、布尔值、序列。想知道更多有关JSON格式的介绍,可以到JSON的官网json.org学习JsonCpp是一个c++库,允许对JSON值进行操作,包括......
  • splunk配置windows和linux的配置过程和事项
    主服务器安装splunkrpm-ivhsplunk.xxx.rpm--force--nodeps#因为这里可能会有报错说/bin/shisneededbyxx#安装在/opt目录下,解压完成后进入splunk的bin目录cd/opt/splunk/bin1.启动splunk/opt/splunk/bin$./splunkstart###开始一段协议###一直回车然后输入y同意......
  • Windows11搭建Qt 6.4.2 for Android+OpenCV4.7.0开发环境
    1.下载opencv-4.7.0-android-sdk.zip,下载地址:https://opencv.org/releases/,解压后,如下图:  2.编辑opecv_android.pri,内容如下(可使用命令行命令-dir*.a/ON/B>v8a.txt):message('Linux/Andoirdisrunning!')#data.files+=images/*.*#data.files+=dnn/*.prototxt#data.files......
  • Kotlin中函数式编程的详解
     一、函数式编程理解我们一直在学习面向对象编程范式,另个一个较知名的编程范式是诞生于20世纪50年代,基于抽象数学的λ(lambda)演算发展而来的函数式编程,尽管函数式编程更常用在学术而非软件领域,但它的一些原则适用于任何编程语言。函数式编程范式主要依赖于高阶函数(以函数为参数或......
  • Windows 下 Docker 的安装
    1、安装条件(1)64位Windows10及以上操作系统(2)已经开启了BIOS设置中的硬件虚拟化支持,如没有开启,在BIOS中设置。 2、下载DockerDesktopInstaller.exe安装包(1)官网:https://www.docker.com/访问官网页面,并单击其中的DownloadDockerDesktopforWindows按钮......
  • 如何编写高质量的 JS 函数(3) --函数式编程[理论篇]
    作者:杨昆 【编写高质量函数系列】中,《如何编写高质量的JS函数(1)--敲山震虎篇》介绍了函数的执行机制,此篇将会从函数的命名、注释和鲁棒性方面,阐述如何通过JavaScript编写高质量的函数。 《如何编写高质量的JS函数(2)--命名/注释/鲁棒篇》从函数的命名、注释和鲁棒性方面,阐......
  • 异步编程之事件循环机制
    JavaScript是一门单线程语言,我们可以通过异步编程的方式来实现实现类似于多线程语言的并发操作。本文着重讲解通过事件循环机制来实现多个异步操作的有序执行、并发执行;通过事件队列实现同级多个并发操作的先后执行顺序,通过微任务和宏任务的概念来讲解不同阶段任务执行的先后顺序,......