首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

WinAPI:创建不带标题栏的可调整大小的窗口,但使用最小化/最大化/关闭按钮(如Firefox/Chrome/Opera)

关于WinAPI创建不带标题栏的可调整大小的窗口,但使用最小化/最大化/关闭按钮,可以使用以下方法:

  1. 首先,在创建窗口时,需要设置WS_POPUP样式,以创建一个不带标题栏的窗口。
  2. 然后,在窗口类中设置CS_HREDRAW和CS_VREDRAW样式,以允许窗口在调整大小时重绘。
  3. 接下来,在窗口过程中捕获WM_NCHITTEST消息,并返回HTCAPTION,以便在窗口的任何地方单击时捕获鼠标。
  4. 最后,在窗口中添加最小化、最大化和关闭按钮,并处理它们的消息。

以下是一个简单的示例代码:

代码语言:c++
复制
#include<Windows.h>

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
    WNDCLASSEX wcex;

    wcex.cbSize = sizeof(WNDCLASSEX);
    wcex.style = CS_HREDRAW | CS_VREDRAW;
    wcex.lpfnWndProc = WndProc;
    wcex.cbClsExtra = 0;
    wcex.cbWndExtra = 0;
    wcex.hInstance = hInstance;
    wcex.hIcon = LoadIcon(hInstance, IDI_APPLICATION);
    wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
    wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
    wcex.lpszMenuName = NULL;
    wcex.lpszClassName = "MyWindowClass";
    wcex.hIconSm = LoadIcon(wcex.hInstance, IDI_APPLICATION);

    if (!RegisterClassEx(&wcex))
    {
        MessageBox(NULL, "Call to RegisterClassEx failed!", "Error", NULL);
        return 1;
    }

    HWND hWnd = CreateWindowEx(WS_EX_CLIENTEDGE, "MyWindowClass", "My Window", WS_POPUP, CW_USEDEFAULT, CW_USEDEFAULT, 500, 300, NULL, NULL, hInstance, NULL);

    if (!hWnd)
    {
        MessageBox(NULL, "Call to CreateWindow failed!", "Error", NULL);
        return 1;
    }

    ShowWindow(hWnd, nCmdShow);
    UpdateWindow(hWnd);

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

    return (int)msg.wParam;
}

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    int wmId, wmEvent;
    PAINTSTRUCT ps;
    HDC hdc;

    switch (message)
    {
    case WM_NCHITTEST:
        {
            LRESULT hit = DefWindowProc(hWnd, message, wParam, lParam);
            if (hit == HTCLIENT)
                hit = HTCAPTION;
            return hit;
        }
    case WM_COMMAND:
        wmId = LOWORD(wParam);
        wmEvent = HIWORD(wParam);
        switch (wmId)
        {
        case IDM_ABOUT:
            DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
            break;
        case IDM_EXIT:
            DestroyWindow(hWnd);
            break;
        default:
            return DefWindowProc(hWnd, message, wParam, lParam);
        }
        break;
    case WM_PAINT:
        hdc = BeginPaint(hWnd, &ps);
        EndPaint(hWnd, &ps);
        break;
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
    default:
        return DefWindowProc(hWnd, message, wParam, lParam);
    }
    return 0;
}

这个示例代码创建了一个不带标题栏的窗口,并使用最小化/最大化/关闭按钮。你可以根据需要修改代码以满足你的需求。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Winforms 可能遇到 1000 个问题 去掉最大化最小化按钮使用系统图标禁止用户修改窗口大小隐藏标题栏图标

去掉最大化最小化按钮 如果需要去掉最大化最小化按钮,只需要设置 MinimizeBox 或 MaximizeBox 为 false 请看下面代码 MinimizeBox =...false; // 不显示最小化按钮 MaximizeBox = false; // 不显示最大化按钮 下面的代码需要写在 Form 内 public Form1...具体请看 https://stackoverflow.com/a/3025944/6116637 使用系统图标 通过 SystemIcons 可以使用系统图标,首先需要在界面放一个 PictureBox...参见 https://stackoverflow.com/a/4868459/6116637 禁止用户修改窗口大小 只需要设置 FormBorderStyle 为 FixedSingle 就可以让用户无法拖动窗口大小...欢迎转载、使用、重新发布,务必保留文章署名林德熙(包含链接: https://lindexi.gitee.io ),不得用于商业目的,基于本文修改后作品务必以相同许可发布。

1.7K10

FireFox 火狐浏览器57以上版本linux下隐藏标题栏方法插件

FireFox 火狐浏览器57以上版本linux下隐藏标题栏方法插件 不知道火狐开发团队咋想,在 linux 下面始终有一个非常难看并且毫无用处标题栏。...当然,这个标题栏是系统加上去,本来和火狐没啥关系。但是,你瞅瞅隔壁 chrome 是咋整啊!你就那么不思进取吗? 哎,啥啥不说了。要不是我是个前端,我也不用 firefox 火狐浏览器。...平时 chrome 伺候得我还是蛮舒服。但是,工作需要呀,还是得用它。 问题是,对于这个标题栏,强迫症重症晚期表示,不能忍。 还好,目前已经又了比较妥善方便用不着修改啥啥啥方法。...我们需要最大化以及关闭按钮等消失不见了,~就是这么顽皮~ 所以呢,我们可以安装这三个插件~~ 最小化窗口按钮插件: https://addons.mozilla.org/zh-CN/firefox/addon.../minimize-the-window/ 最大化窗口按钮插件: https://addons.mozilla.org/zh-CN/firefox/addon/maximize-the-window

2.5K90

WPF 使用 WindowChrome,在自定义窗口标题栏同时最大程度保留原生窗口样式(类似 UWPChrome)

(例如在标题栏上放按钮,虽然实际做得很丑),不过整体来说还没 Chrome 做得精致呢 ▲ Chrome 普通窗口Chrome 最大化窗口 为什么不做无边框窗口?...,有这么多事情都不好模拟: 最小化最大化关闭按钮 按钮要多大?...32 高度,按钮只有 30 而已: 而且在最大化窗口之后,按钮高度继续压缩。...30 高度,最大化时还是 30 高度这一点与原生 UWP 窗口Chrome 行为是类似的。...(UWP 窗口按钮 32 高度,最大化 32 高度;Google Chrome 窗口按钮 30 高度,最大化 27 高度。) 所以,截至这里,我们算是模拟得比较像了。 其他属性需要尝试吗?

1.3K60

WPF 使用 WindowChrome,在自定义窗口标题栏同时最大程度保留原生窗口样式(类似 UWPChrome)

WPF 使用 WindowChrome,在自定义窗口标题栏同时最大程度保留原生窗口样式(类似 UWP/Chrome) 发布于 2018-07-12 07:57...,有这么多事情都不好模拟: 最小化最大化关闭按钮 按钮要多大?...30 高度,最大化时还是 30 高度这一点与原生 UWP 窗口Chrome 行为是类似的。...(UWP 窗口按钮 32 高度,最大化 32 高度;Google Chrome 窗口按钮 30 高度,最大化 27 高度。) ? 所以,截至这里,我们算是模拟得比较像了。 其他属性需要尝试吗?...然而我们还发现,Google Chrome 是定制了这三个按钮背景色,正在研究它做法。 不过 Win32 原生方法顶多只支持修改标题栏按钮背景色,而不支持让标题栏按钮全透明。

6.1K20

【虚幻引擎】DTProjectSettings 蓝图获取基本项目配置插件使用说明 获取项目命名,项目版本,公司名,公司识别名,主页,联系方式

使用无边框窗口、以VR启动、允许窗口重设大小、允许关闭、允许最大化、允许最小化、虚假立体渲染设备眼部偏移、视野用于虚假立体渲染设备。...Get Use Borderless Window - 使用无边框窗口游戏是否应该使用无边框 Slate 窗口而不是带有系统标题栏和边框窗口。...Get Allow Window Resize - 允许窗口重设大小在不使用全屏时,是否允许用户调整游戏使用窗口大小。...Get Allow Close - 允许关闭使用全屏时,游戏窗口是否应该显示关闭按钮。Get Allow Maximize - 允许最大化使用全屏时,是否应该为游戏窗口显示最大化按钮。...Get Allow Minimize - 允许最小化使用全屏时,游戏窗口是否应该显示最小化按钮

11310

ubuntu快捷键设置大全

/ ← 移动当前窗口到不同工作台 窗口操作快捷键 Alt + F4 关闭窗口 Alt + F5 取消最大化窗口 (恢复窗口原来大小) Alt + F7 移动窗口 (注: 在窗口最大化状态下无效...) Alt + F8 改变窗口大小 (注: 在窗口最大化状态下无效) Alt + F9 最小化窗口 Alt + F10 最大化窗口 Alt + Space 打开窗口控制菜单 (点击窗口左上角图标出现菜单...+Shift+Z 重做刚撤销一步操作 Ctrl+S 保存 窗口最大化时,直接拖标题栏,可立刻缩小窗口,如果不松手,再拖回桌面边缘,又可马上恢复最大化。...代表 "Delete" 一样) 按住Ctrle+滚动鼠标中键,可以改变当前窗口中字体大小 ctrl+shift +拖动,可以快速建立链接 1、窗口最大化时,直接拖标题栏,可立刻缩小窗口,如果不松手..., 将切换到另一打开窗口(不包括最小化) -----对于我这样关闭任务栏适用 Laughing ………………………………………………………………………………………………………… 也可以在“系统

1.8K30

客户端开发(Electron)认识窗口

背景说明: 窗口就是我们在电脑端经常使用软件时候显示Logo,标题和操作最小化最大化关闭按钮标题栏标题栏下面显示内容整个窗口,这往往在Web前端中接触不是那么多,但要开发一款体验不错...resizable 窗口是否支持缩放,默认支持 minimizable 窗口是否支持最小化,默认支持 maximizable 窗口是否支持最大化,默认支持 渲染进程是否集成Node.js环境...绘制后结果如下图所示: 为标题栏按钮增加事件: 按钮事件和调用函数定义均与Vue一致,我们需要考虑是如何与Electron联通来调用对应API: 调整窗口对象中的如下所示属性,切记启用...: 监听窗口变化来动态切换isMaxSize值来动态渲染最大化按钮,主要通过窗口对象来监听maximize,unmaximize来实现: 我们知道通过快捷键ctrl+R可以实现刷新,此时当我们刷新页面后会造成窗口注册监听对象泄露...,我们需要在主进程关闭展示窗口,并由我们在渲染进程中控制: 总结: 本篇主要介绍了对于Electron开发GUI应用是对于窗口标题栏自定义,简单做了一些演示,后续还有一块就完成了整个窗口部分内容

5.1K60

【愚公系列】2023年11月 Winform控件专题 Form控件详解

1.7 windowstateWinform中WindowState属性用于控制窗口状态,可以是最小化最大化或普通状态。...WindowState属性有三个可用值:Normal:窗口处于普通状态,即既不是最小化也不是最大化状态。Minimized:窗口处于最小化状态,即窗口最小化到任务栏中。...可以通过设置窗口WindowState属性来改变窗口状态,例如:// 最小化窗口this.WindowState = FormWindowState.Minimized;// 最大化窗口this.WindowState...如果设置为True,则窗体将显示默认最小化最大化关闭按钮。如果设置为False,则这些按钮将不显示。...Sizable:该选项将使表单有一个可调整大小边框。使用这个属性非常简单,只需在属性窗格中选择所需选项即可。

1.4K21

electron 模块BrowserWindow

movable:布尔值,指定是否允许用户移动窗口。 closable:布尔值,指定是否显示关闭按钮。 alwaysOnTop:布尔值,指定窗口是否始终显示在其他窗口之上。...frame:布尔值,指定是否显示窗口边框和标题栏。 show:布尔值,指定创建窗口后是否立即显示。...hide: 当窗口被隐藏时触发此事件。 minimize: 当窗口最小化时触发此事件。 maximize: 当窗口最大化时触发此事件。...restore: 当窗口最大化最小化状态恢复时触发此事件。 resize: 当窗口大小发生改变时触发此事件。 move: 当窗口位置发生改变时触发此事件。...restore() 还原窗口大小,如果窗口当前是最大化最小化状态。 isMaximized() 返回一个布尔值,表示窗口是否处于最大化状态。

27210

WPF 制作高性能透明背景异形窗口使用 WindowChrome 而不要使用 AllowsTransparency=True)

如果你有留意到我其他博客,你会发现我定制窗口样式时候都在极力避开设置此性能极差属性: WPF 使用 WindowChrome,在自定义窗口标题栏同时最大程度保留原生窗口样式(类似 UWP/Chrome...值得注意是,由于在使用 WindowChrome 制作透明窗口时候设置了 ResizeMode="None",所以你拖动窗口在屏幕顶部和左右两边时候,Windows 不会再帮助你最大化窗口或者靠边停靠窗口...不过窗口标题栏拖动功能依然保留了下来,标题栏右键菜单也是可以继续使用。...方案 WindowChrome AllowsTransparency 拖拽标题栏移动窗口 保留 自行实现 最小化最大化关闭按钮 丢失 丢失 拖拽边缘调整窗口大小 丢失 丢失 移动窗口到顶部可最大化 丢失...自行实现 拖拽最大化窗口标题栏还原窗口 保留 自行实现 移动窗口到屏幕两边可侧边停靠 丢失 自行实现 拖拽摇动窗口最小化其他窗口 保留 自行实现 窗口打开/关闭/最小化/最大化/还原动画 丢失 丢失

1.2K20

Qt 常用类 (9)—— QWidget

3)Qt::CustomizeWindowHint:自定义窗口标题栏,以下标志必须与这个标志一起使用才有效,否则窗口将有默认标题栏。        ...6)Qt::WindowMinimizeButtonHint:显示最小化按钮。        7)Qt::WindowMaximizeButtonHint:显示最大化按钮。        ...8)Qt::WindowMinMaxbuttonHint:显示最小化按钮最大化按钮。        9)Qt::WindowCloseButtonHint:显示关闭按钮。        ...顶级窗口一定是独立窗口独立窗口不一定是顶级,它可以有父窗口,当父窗口被析构时它也会随之被析构。独立窗口一般有自己外边框和标题栏,可以有移动、改变大小等操作。        ...全屏方式与最大化区别在于:全屏方式下窗口边框和标题栏消失,客户区占据整个屏幕。窗口各种状态仅对独立窗口有效,对窗口部件来说没有意义。

3.5K10

c++创建对话框_窗体边框改为对话框样式

本例中将涉及到对话框标题栏自绘,双缓冲位图显示以及位图按钮使用。 1....; (2)当我们点击最大化最小化关闭按钮时候,只有当左键弹起时才能起效; (3)当窗口失去焦点时,标题栏应有对应反映,即改变标题文字和最大化按钮颜色; (4)使用了CToolTipCtrl...控件,实现了当我们将鼠标放到最大化按钮上时,显示文字提示; (5)可以设置对话框标题栏左上角和右上角是以圆角显示还是以直角显示,调用SetTitleRectStyle方法即可实现; (6)使用FrameRect...MemDC.CreateCompatibleDC(NULL); //这时还不能绘图,因为没有地方画 //下面建立一个与屏幕显示兼容位图,至于位图大小嘛,可以用窗口大小 MemBitmap.CreateCompatibleBitmap...存在不足 当对话框比较大时,我们将鼠标移到标题栏按下左键拖动对话框,向下拖动标题栏不会闪烁,向上拖动时标题栏会闪烁,这点尚需讨论和改进。 5.

1.4K30

Windows 7 操作系统

虽然每个窗口内容各不相同,大多数窗口都具有相同基本组成部分。 3.窗口——边框  组成窗口四条边线称为窗口边框,拖动边框可以改变窗口大小。...3.窗口——标题栏  窗口中最上边一行是标题栏标题栏显示已打开应用程序图标、名称等,还有“最小化”“最大化”和“关闭按钮。  ...单击左上角应用程序图标,会打开窗口中应用程序控制菜单,使用该菜单也可以实现最小化最大化关闭等功能。  拖动标题栏可以拖动窗口,还可以双击标题栏完成窗口最大化和还原切换。  ...所谓活动窗口是指该窗口可以接收用户键盘和鼠标输入等操作,非活动窗口不会接收键盘和鼠标输入,相应应用程序仍在运行,称为后台运行。 3.窗口——地址栏  地址栏显示当前文件或文件夹所在路径。...在桌面上放置快捷方式方式如下:  打开“Windows资源管理器”,选定要创建快捷方式项目,文件、程序、文件夹、图片等,单击菜单“文件”→“创建快捷方式”命令,可以创建相应开解方式,然后将快捷方式图标从

32230

Qt隐藏系统标题栏使用自定义标题栏

一.前言        今天我们来实现自定义标题栏实现,这里面用到了布局,鼠标事件重写等知识点,首先还是自定义标题栏创作,像下面这样,可放大,可缩小,并且随着窗体大小改变,控件做自适应调整。...拖了一个布局,并且将相关控件加入布局,但是一旦将顶级窗口添加布局,控件大小就会不可控; 解决方法:之所以如此,是因为我们没有指定控件最大值和最小值,这也是为什么大家看到软件,有一些控件最大化后跟随界面变大...,而一些控件是不变化,就比如最小化最大化控件等等。...先将最小化最大化以及关闭按钮功能进行实现,这里可以选择代码实现,也可以在ui界面实现,只不过ui界面实现有一些局限性,由于我们目的是使用自定义标题栏,所以这里直接在ui界面进行实现。...进行信号和槽绑定后,我们现在就可以使用自定义标题栏来实现最小化最大化关闭,接下来就是将系统标签栏进行隐藏,如果在这之前,就将系统标题栏隐藏,那么对于编译后生成软件关闭将是不方便

7.6K21

Extjs-lesson3

配置项」: title :标题栏显示文字 width :窗口宽度 height :窗口高度 modal :是否设置为模态窗体 ❝模态窗体:打开此窗体后,不能对其他窗体进行操作 ❞ closable :是否显示关闭按钮...maximizable :是否显示最大化按钮更多精彩文章请关注公众号『Pythonnote』或者『全栈技术精选』 minimizable :是否显示最小化按钮 html :窗口显示内容 resizable...:用户是否可以调整窗口大小 bodyStyle :窗口内容与边框间距 buttonAlign :窗口中 button 对齐方式(left/center/right)默认是 right 介绍几个「...方法」: show :窗口显示 hide :窗口隐藏 close :窗口关闭 1.4 学习方法 学习方法就是通过官方 API 文档,上篇文章介绍了使用方法,下面再提供一副图片详细介绍每个类说明如何查看...: true, // 是否显示关闭按钮 closable: true, // 是否显示最大化按钮 maximizable: true, //

1.4K20

使用WindowChrome自定义Window Style

需要自定义弹出、关闭最大化最小化动画,而自己做肯定不如Windows自带动画高效。 需要实现Resize功能。 其它BUG。...光是性能问题就足以放弃WindowStyle="None" 实现方式,幸好还有使用WindowChrome实现方式,一时之间也找不到理想实现,连MSDN上文档( WindowChrome Class...Window基本功能如上图所示。注意除了标准最小化”、“最大化/还原”、"关闭"按钮外,Icon上单击还应该能打开窗体系统菜单,双击则直接关闭窗体。...3.2 使用WindowChrome 对于WindowChrome,MSDN是这样描述: 若要自定义窗口,同时保留其标准功能,可以使用WindowChrome类。...ResizeGrip是当ResizeMode = ResizeMode.CanResizeWithGrip;时出现Window右下角大小调整手柄,基本上用于提示窗口可以通过拖动边框改调整小。

2.2K20
领券