win32- 使用WM_NCPAINT在非客户区域绘制边框
时间:2020-05-20
本文章向大家介绍win32- 使用WM_NCPAINT在非客户区域绘制边框,主要包括win32- 使用WM_NCPAINT在非客户区域绘制边框使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
#pragma comment(lib, "UxTheme") #include <windows.h> #include <uxtheme.h> LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, 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 = NULL; wcex.hCursor = (HICON)LoadCursor(NULL, IDC_ARROW); wcex.hbrBackground = CreateSolidBrush(RGB(0, 128, 0)); wcex.lpszMenuName = NULL; wcex.lpszClassName = L"window"; wcex.hIconSm = NULL; RegisterClassEx(&wcex); HWND hWnd = CreateWindowEx( NULL, L"window", NULL, WS_OVERLAPPEDWINDOW, 100, 100, 600, 400, NULL, NULL, hInstance, NULL); ShowWindow(hWnd, nCmdShow); MSG msg; while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return static_cast<int>(msg.wParam); } LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch (uMsg) { case WM_CREATE: SetWindowTheme(hWnd, L"", L""); return 0; case WM_DESTROY: PostQuitMessage(0); return 0; case WM_NCCALCSIZE: { LPNCCALCSIZE_PARAMS ncParams = (LPNCCALCSIZE_PARAMS)lParam; ncParams->rgrc[0].top += 4; ncParams->rgrc[0].left += 4; ncParams->rgrc[0].bottom -= 4; ncParams->rgrc[0].right -= 4; return 0; } case WM_NCPAINT: { RECT rect; GetWindowRect(hWnd, &rect); HRGN region = NULL; if (wParam == NULLREGION) { region = CreateRectRgn(rect.left, rect.top, rect.right, rect.bottom); } else { HRGN copy = CreateRectRgn(0, 0, 0, 0); if (CombineRgn(copy, (HRGN)wParam, NULL, RGN_COPY)) { region = copy; } else { DeleteObject(copy); } } HDC dc = GetDCEx(hWnd, region, DCX_WINDOW | DCX_CACHE | DCX_INTERSECTRGN | DCX_LOCKWINDOWUPDATE); if (!dc && region) { DeleteObject(region); } HPEN pen = CreatePen(PS_INSIDEFRAME, 4, RGB(255, 0, 0)); HGDIOBJ old = SelectObject(dc, pen); int width = rect.right - rect.left; int height = rect.bottom - rect.top; Rectangle(dc, 0, 0, width, height); SelectObject(dc, old); ReleaseDC(hWnd, dc); DeleteObject(pen); return 0; } case WM_NCACTIVATE: RedrawWindow(hWnd, NULL, NULL, RDW_UPDATENOW); return 0; break; } return DefWindowProc(hWnd, uMsg, wParam, lParam); }
原文地址:https://www.cnblogs.com/strive-sun/p/12923397.html
- 细数Python中的数据类型以及他们的方法
- 洛谷 P3807 【模板】卢卡斯定理
- 数据城堡参赛代码实战篇(六)---使用sklearn进行数据标准化及参数寻优
- 震惊!Vector两行代码求逆序对,六行代码过普通平衡树
- 数据城堡参赛代码实战篇(五)---使用sklearn解决分类问题
- 洛谷P1894 [USACO4.2]完美的牛栏The Perfect Stall
- [编程经验]Python生成器、迭代器与yield语句小结
- TensorFlow从0到1 - 12 - TensorFlow构建3层NN玩转MNIST
- 数据城堡参赛代码实战篇(四)---使用pandas合并数据表
- HDU 2586 How far away ?
- HDU 3078 Network
- 数据城堡参赛代码实战篇(三)---我们来探究一个深奥的问题!
- 数据城堡参赛代码实战篇(二)---使用pandas进行数据去重
- 洛谷P3375 【模板】KMP字符串匹配
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- MySQL ORDER BY,GROUPBY 与各种JOIN
- (三) Mybatis动态SQL语句 - Titan的Mybatis系列学习笔记
- (二) 使用Mybatis完成CRUD操作 - Titan的Mybatis系列学习笔记
- 轻松使用纯css3打造有点意思的故障艺术(附React加强组件版)
- (一)Mybatis的入门 - Titan的Mybatis系列学习笔记
- Hadoop安装与环境配置入门
- Elasticsearch源码解析:环境搭建
- SpringBoot整合JWT认证机制实现接口鉴权
- [Java] Java多线程的探索 -获取新闻标题
- Java中对文件进行MD5加密
- [数据结构] 使用最小堆思想实现哈夫曼编解码
- [数据结构] 括号符的匹配
- [数据结构] 平衡二叉查找树 (AVL树)
- 写给前端的算法进阶指南,我是如何两个月零基础刷200题
- [Java] 在Java中优雅地进行文件IO操作