当前位置: 首页 > news >正文

去除Win32 Tab Control控件每个选项卡上的深色对话框背景

一般情况下,我们是用不带边框的对话框来充当Tab Control的每个选项卡的内容的。
例如,主对话框IDD_TABBOX上有一个Tab Control,上面有两个选项卡,第一个选项卡用的是IDD_DIALOG1充当内容,第二个用的则是IDD_DIALOG2。IDD_DIALOG1和IDD_DIALOG2的Border属性设为None,Style属性设为Child,如下三张图所示。

但是用对话框充当选项卡内容会有烦人的深色对话框背景,和选项卡的样式并不搭,看起来也不好看,如下图所示。

其实,要去掉这个深色对话框背景很简单,只需要在每个选项卡的对话框的消息处理函数的WM_INITDIALOG里面加一句EnableThemeDialogTexture(hdlg, ETDT_ENABLETAB);就行了。有多少个选项卡,就加多少句这句话。
使用EnableThemeDialogTexture函数前,需要包含头文件Uxtheme.h和库文件Uxtheme.lib。该函数支持Windows XP系统。
#include <Uxtheme.h>
#pragma comment(lib, "Uxtheme.lib")

注意:使用这个函数后,如果程序处理了Static控件的WM_CTLCOLORSTATIC消息,直接return 0就可以用渐变背景了。不需要返回HBRUSH背景刷,SetTextColor设置的文字颜色就能生效。

 运行之后是这样的:

深色的对话框背景就成功去除掉了。话说XP系统的选项卡界面真的挺好看的,是一个渐变色。

【完整C语言代码】

main.c:

/* 参考资料:https://stackoverflow.com/questions/43768291/how-to-get-correct-background-and-control-colors-in-property-pages */
#include <stdio.h>
#include <tchar.h>
#include <Windows.h>
#include <WindowsX.h>
#include <CommCtrl.h>
#include <Uxtheme.h>
#include "resource.h"#pragma comment(lib, "comctl32.lib")
#pragma comment(linker, "\"/manifestdependency:type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' language='*' publicKeyToken='6595b64144ccf1df'\"")
#pragma comment(lib, "Uxtheme.lib")#define COLOR_BLUE   RGB(0, 0, 255)
#define COLOR_RED    RGB(255, 0, 0)
#define COLOR_ORANGE RGB(255, 201, 14)
#define COLOR_GREEN  RGB(0, 255, 0)COLORREF msg_color = COLOR_RED;
HFONT big_font;
HINSTANCE main_instance;
HWND main_dlg;/* 获取指定选项卡的对话框窗口 */
HWND get_tab_page(int index)
{HWND tabctrl;TCITEM item;tabctrl = GetDlgItem(main_dlg, IDC_TAB1);item.mask = TCIF_PARAM;TabCtrl_GetItem(tabctrl, index, &item);return (HWND)item.lParam;
}/* 修改文本内容和颜色 */
void change_static2_text(const char *str, COLORREF color)
{HWND page;page = get_tab_page(0);msg_color = color;SetDlgItemTextA(page, IDC_STATIC2, str);
}/* 在下拉菜单框中显示串口列表 */
int display_comm_ports(HWND combobox)
{char name[50];char value[50];DWORD index, type, namelen, valuelen;HKEY key;LSTATUS status;ComboBox_ResetContent(combobox);status = RegOpenKeyExA(HKEY_LOCAL_MACHINE, "HARDWARE\\DEVICEMAP\\SERIALCOMM", 0, KEY_READ, &key);if (status != ERROR_SUCCESS)return -1;index = 0;while (1){namelen = sizeof(name);valuelen = sizeof(value);status = RegEnumValueA(key, index, name, &namelen, NULL, &type, (LPBYTE)value, &valuelen);if (status != ERROR_SUCCESS)break;SendMessageA(combobox, CB_ADDSTRING, 0, (LPARAM)value);index++;}if (index != 0)ComboBox_SetCurSel(combobox, 0);RegCloseKey(key);return 0;
}/* 选项卡1消息响应函数 */
INT_PTR CALLBACK page1_proc(HWND hdlg, UINT umsg, WPARAM wparam, LPARAM lparam)
{int id;switch (umsg){case WM_COMMAND:id = LOWORD(wparam);switch (id){case IDOK:// 点击“连接”按钮后执行的代码EnableWindow((HWND)lparam, FALSE);SetWindowTextA((HWND)lparam, "已连接");EnableWindow(GetDlgItem(hdlg, IDC_COMBO1), FALSE);EnableWindow(GetDlgItem(hdlg, IDC_RADIO1), FALSE);EnableWindow(GetDlgItem(hdlg, IDC_RADIO2), FALSE);change_static2_text("连接成功", COLOR_GREEN);break;case IDC_CHECK1:if (Button_GetCheck((HWND)lparam))EnableWindow(GetDlgItem(hdlg, IDC_EDIT1), TRUE);elseEnableWindow(GetDlgItem(hdlg, IDC_EDIT1), FALSE);break;case IDC_CHECK2:if (Button_GetCheck((HWND)lparam)){EnableWindow(GetDlgItem(hdlg, IDC_EDIT2), TRUE);EnableWindow(GetDlgItem(hdlg, IDC_SPIN1), TRUE);}else{EnableWindow(GetDlgItem(hdlg, IDC_EDIT2), FALSE);EnableWindow(GetDlgItem(hdlg, IDC_SPIN1), FALSE);}break;}break;case WM_CTLCOLORSTATIC:// 设置文本颜色id = GetDlgCtrlID((HWND)lparam);if (id == IDC_STATIC2)SetTextColor((HDC)wparam, msg_color);break;case WM_INITDIALOG:EnableThemeDialogTexture(hdlg, ETDT_ENABLETAB); // 删除选项卡灰色背景display_comm_ports(GetDlgItem(hdlg, IDC_COMBO1)); // 在下拉菜单框中显示串口列表Button_SetCheck(GetDlgItem(hdlg, IDC_RADIO1), BST_CHECKED); // 选中第一个单选框SendDlgItemMessage(hdlg, IDC_STATIC2, WM_SETFONT, (WPARAM)big_font, TRUE); // 设置文本字体SendDlgItemMessage(hdlg, IDC_SPIN1, UDM_SETRANGE, 0, MAKELPARAM(100, 0)); // 设置数值上下调整框的调整范围SendDlgItemMessage(hdlg, IDC_SPIN1, UDM_SETPOS, 0, 25); // 设置数值上下调整框的当前值为25 (倒数第二个参数没有作用, 一般设置为0)break;}return 0;
}/* 选项卡2消息响应函数 */
INT_PTR CALLBACK page2_proc(HWND hdlg, UINT umsg, WPARAM wparam, LPARAM lparam)
{char name[50];int i;HICON icon;HIMAGELIST imglist;HWND list_wnd;LVITEMA lvi;switch (umsg){case WM_INITDIALOG:EnableThemeDialogTexture(hdlg, ETDT_ENABLETAB); // 删除选项卡灰色背景list_wnd = GetDlgItem(hdlg, IDC_LIST1);ListView_SetExtendedListViewStyle(list_wnd, LVS_EX_DOUBLEBUFFER); // 使用蓝色半透明选择框// 创建图像列表imglist = ImageList_Create(32, 32, ILC_COLOR24, 1, 1);ListView_SetImageList(list_wnd, imglist, LVSIL_NORMAL); // 绑定图像列表(绑定后,关闭窗口时会自动删除图像列表)icon = LoadImage(main_instance, MAKEINTRESOURCE(IDI_ICON1), IMAGE_ICON, GetSystemMetrics(SM_CXICON), GetSystemMetrics(SM_CYICON), LR_DEFAULTCOLOR); // 加载图标ImageList_AddIcon(imglist, icon); // 将图标复制到图像列表中(注意是复制,不是绑定)DestroyIcon(icon); // 复制完后要删除刚才加载的图标// 添加显示项目for (i = 0; i < 50; i++){lvi.mask = LVIF_IMAGE | LVIF_TEXT;lvi.iItem = i; // 行号lvi.iSubItem = 0; // 列号_snprintf_s(name, sizeof(name), sizeof(name) - 1, "测试项目%02d", i + 1); // 第三个参数MaxCount是字符数,不包括'\0',所以必须减1lvi.pszText = name; // 名称lvi.iImage = 0; // 使用的图标序号lvi.iItem = (int)SendMessage(list_wnd, LVM_INSERTITEMA, 0, (LPARAM)&lvi); // 返回值为排序后的行号 (若启用了自动排序功能的话)}break;}return 0;
}/* 加载字体 */
void create_font()
{LOGFONTA font = {0};font.lfCharSet = DEFAULT_CHARSET;strcpy_s(font.lfFaceName, sizeof(font.lfFaceName), "Times New Roman");font.lfHeight = 24;font.lfWeight = FW_BOLD;big_font = CreateFontIndirectA(&font);
}/* 删除字体 */
void delete_font()
{DeleteObject(big_font);
}/* 初始化选项卡控件 */
void init_tabs()
{char *titles[2] = {"第一个选项卡", "第二个选项卡"};int pages[2] = {IDD_DIALOG1, IDD_DIALOG2};DLGPROC procs[2] = {page1_proc, page2_proc};int i;HWND tabctrl, page;RECT rect;TCITEMA item;UINT flags;tabctrl = GetDlgItem(main_dlg, IDC_TAB1);for (i = 0; i < _countof(pages); i++){item.mask = TCIF_TEXT;item.pszText = titles[i];SendMessage(tabctrl, TCM_INSERTITEMA, i, (LPARAM)&item);}GetClientRect(tabctrl, &rect);TabCtrl_AdjustRect(tabctrl, FALSE, &rect);for (i = 0; i < _countof(pages); i++){page = CreateDialog(main_instance, MAKEINTRESOURCE(pages[i]), tabctrl, procs[i]);flags = (i == 0) ? SWP_SHOWWINDOW : 0;SetWindowPos(page, NULL, rect.left, rect.top, rect.right - rect.left, rect.bottom - rect.top, flags);item.mask = TCIF_PARAM;item.lParam = (LPARAM)page;TabCtrl_SetItem(tabctrl, i, &item);}
}/* 切换选项卡 */
void switch_tab()
{int i, n, curr;HWND tabctrl;TCITEM item;tabctrl = GetDlgItem(main_dlg, IDC_TAB1);n = TabCtrl_GetItemCount(tabctrl);curr = TabCtrl_GetCurSel(tabctrl);for (i = 0; i < n; i++){item.mask = TCIF_PARAM;TabCtrl_GetItem(tabctrl, i, &item);if (i == curr)ShowWindow((HWND)item.lParam, SW_SHOW);elseShowWindow((HWND)item.lParam, SW_HIDE);}
}/* 主对话框(仅包含选项卡控件)消息响应函数 */
INT_PTR CALLBACK tabbox_proc(HWND hdlg, UINT umsg, WPARAM wparam, LPARAM lparam)
{int id;LPNMHDR lpnmhdr;switch (umsg){case WM_COMMAND:id = LOWORD(wparam);switch (id){case IDCANCEL:EndDialog(hdlg, 0);main_dlg = NULL;delete_font();break;}break;case WM_INITDIALOG:main_dlg = hdlg;lparam = (LPARAM)LoadImage(main_instance, MAKEINTRESOURCE(IDI_ICON1), IMAGE_ICON, GetSystemMetrics(SM_CXICON), GetSystemMetrics(SM_CYICON), LR_DEFAULTCOLOR);SendMessage(hdlg, WM_SETICON, ICON_BIG, lparam);lparam = (LPARAM)LoadImage(main_instance, MAKEINTRESOURCE(IDI_ICON1), IMAGE_ICON, GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON), LR_DEFAULTCOLOR);SendMessage(hdlg, WM_SETICON, ICON_SMALL, lparam);create_font();init_tabs();break;case WM_NOTIFY:lpnmhdr = (LPNMHDR)lparam;switch (lpnmhdr->code){case TCN_SELCHANGE:switch_tab();break;}break;}return 0;
}/* 主函数 */
int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow)
{LRESULT ret;main_instance = hInstance;InitCommonControls();ret = DialogBox(hInstance, MAKEINTRESOURCE(IDD_TABBOX), NULL, tabbox_proc);return (int)ret;
}

resource.h:

//{{NO_DEPENDENCIES}}
// Microsoft Visual C++ generated include file.
// Used by remove_tab_page_background.rc
//
#define IDI_ICON1                       101
#define IDD_DIALOG1                     102
#define IDD_DIALOG2                     103
#define IDD_TABBOX                      104
#define IDC_COMBO1                      1001
#define IDC_RADIO1                      1002
#define IDC_RADIO2                      1003
#define IDC_STATIC2                     1004
#define IDC_CHECK1                      1005
#define IDC_EDIT1                       1006
#define IDC_CHECK2                      1007
#define IDC_EDIT2                       1008
#define IDC_SPIN1                       1009
#define IDC_LIST1                       1010
#define IDC_TAB1                        1011// Next default values for new objects
// 
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE        105
#define _APS_NEXT_COMMAND_VALUE         40001
#define _APS_NEXT_CONTROL_VALUE         1012
#define _APS_NEXT_SYMED_VALUE           101
#endif
#endif

remove_tab_page_background.rc:

// Microsoft Visual C++ generated resource script.
//
#include "resource.h"#define APSTUDIO_READONLY_SYMBOLS
/
//
// Generated from the TEXTINCLUDE 2 resource.
//
#include "afxres.h"/
#undef APSTUDIO_READONLY_SYMBOLS/
// 中文(简体,中国) resources#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS)
LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED#ifdef APSTUDIO_INVOKED
/
//
// TEXTINCLUDE
//1 TEXTINCLUDE 
BEGIN"resource.h\0"
END2 TEXTINCLUDE 
BEGIN"#include ""afxres.h""\r\n""\0"
END3 TEXTINCLUDE 
BEGIN"\r\n""\0"
END#endif    // APSTUDIO_INVOKED/
//
// Icon
//// Icon with lowest ID value placed first to ensure application icon
// remains consistent on all systems.
IDI_ICON1               ICON                    "icon1.ico"/
//
// Dialog
//IDD_DIALOG1 DIALOGEX 0, 0, 354, 138
STYLE DS_SETFONT | WS_CHILD | WS_SYSMENU
FONT 9, "新宋体", 400, 0, 0x0
BEGINLTEXT           "串口号: ",IDC_STATIC,14,18,33,8COMBOBOX        IDC_COMBO1,52,15,81,30,CBS_DROPDOWN | CBS_SORT | WS_VSCROLL | WS_TABSTOPDEFPUSHBUTTON   "连接",IDOK,137,15,50,14CTEXT           "未连接串口",IDC_STATIC2,197,14,139,37,SS_CENTERIMAGE | SS_SUNKENCONTROL         "模式1",IDC_RADIO1,"Button",BS_AUTORADIOBUTTON,52,39,36,10CONTROL         "模式2",IDC_RADIO2,"Button",BS_AUTORADIOBUTTON,105,39,36,10CONTROL         "",IDC_STATIC,"Static",SS_ETCHEDHORZ,7,63,340,1CONTROL         "电池电压",IDC_CHECK1,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,115,81,48,10EDITTEXT        IDC_EDIT1,170,79,67,14,ES_AUTOHSCROLL | WS_DISABLEDLTEXT           "V",IDC_STATIC,242,82,8,8CONTROL         "温度",IDC_CHECK2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,115,105,32,10EDITTEXT        IDC_EDIT2,170,103,40,14,ES_AUTOHSCROLL | WS_DISABLEDCONTROL         "",IDC_SPIN1,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS | WS_DISABLED,263,103,11,14LTEXT           "℃",IDC_STATIC,214,106,15,8
ENDIDD_DIALOG2 DIALOGEX 0, 0, 354, 138
STYLE DS_SETFONT | WS_CHILD | WS_SYSMENU
FONT 9, "新宋体", 400, 0, 0x0
BEGINCONTROL         "",IDC_LIST1,"SysListView32",WS_BORDER | WS_TABSTOP,7,7,338,121
ENDIDD_TABBOX DIALOGEX 0, 0, 374, 166
STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "移除选项卡灰色背景"
FONT 9, "新宋体", 400, 0, 0x0
BEGINCONTROL         "",IDC_TAB1,"SysTabControl32",0x0,7,7,360,152
END/
//
// DESIGNINFO
//#ifdef APSTUDIO_INVOKED
GUIDELINES DESIGNINFO
BEGINIDD_DIALOG1, DIALOGBEGINLEFTMARGIN, 7RIGHTMARGIN, 347TOPMARGIN, 7ENDIDD_DIALOG2, DIALOGBEGINLEFTMARGIN, 7RIGHTMARGIN, 345TOPMARGIN, 7ENDIDD_TABBOX, DIALOGBEGINLEFTMARGIN, 7RIGHTMARGIN, 309TOPMARGIN, 7END
END
#endif    // APSTUDIO_INVOKED#endif    // 中文(简体,中国) resources
/#ifndef APSTUDIO_INVOKED
/
//
// Generated from the TEXTINCLUDE 3 resource.
///
#endif    // not APSTUDIO_INVOKED

相关文章:

去除Win32 Tab Control控件每个选项卡上的深色对话框背景

一般情况下&#xff0c;我们是用不带边框的对话框来充当Tab Control的每个选项卡的内容的。 例如&#xff0c;主对话框IDD_TABBOX上有一个Tab Control&#xff0c;上面有两个选项卡&#xff0c;第一个选项卡用的是IDD_DIALOG1充当内容&#xff0c;第二个用的则是IDD_DIALOG2。I…...

iis部署前后端分离项目(React前端,Node.js后端)

iis虽然已经有点过时&#xff0c;但不少用户还在用&#xff0c;故总结一下。 1. 安装iis 如果电脑没有自带iis管理器&#xff0c;打开控制面板->程序->启用或关闭Windows功能&#xff0c;勾选iis安装即可 2. 部署前端项目 打开iis&#xff0c;添加网站&#xff0c;物理…...

【前端项目笔记】9 数据报表

数据报表 效果展示&#xff1a; 在开发代码之前新建分支 git checkout -b report 新建分支report git branch 查看分支 git push -u origin report 将本地report分支推送到云端origin并命名为report 通过路由的形式将数据报表加载到页面中 渲染数据报表基本布局 面包屑导航…...

等保测评推动哈尔滨数字化转型中的安全保障

在数字经济的浪潮下&#xff0c;哈尔滨作为东北老工业基地的核心城市&#xff0c;正积极推动数字化转型&#xff0c;以创新技术驱动产业升级和经济发展。网络安全等级保护测评&#xff08;简称“等保测评”&#xff09;作为国家网络安全战略的重要组成部分&#xff0c;为哈尔滨…...

#pragma 指令

#pragma 指令作用是设定编译器的状态或者是指示编译器完成一些特定的动作 message 参数能够在编译信息输出窗口中输出相应的信息 #pragma message(“消息文本”) code_seg参数能够设置程序中函数代码存放的代码段&#xff0c;当我们开发驱动程序的时候就会使用到它 #pragma…...

【Excel】 批量跳转图片

目录标题 1. CtrlA全选图片 → 右键 → 大小和属性2. 取消 锁定纵横比 → 跳转高度宽度 → 关闭窗口3. 最后一图拉到最后一单元格 → Alt吸附边框![](https://i-blog.csdnimg.cn/direct/d56ac1f41af54d54bb8c68339b558dd1.png)4. CtrlA全选图片 → 对齐 → 左对齐 → 纵向分布!…...

网站更新改版了

✅作者简介&#xff1a;大家好&#xff0c;我是Leo&#xff0c;热爱Java后端开发者&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;Leo的博客 &#x1f49e;当前专栏&#xff1a;Leo杂谈 ✨特色专栏&#xff1a;MySQL学…...

初识大模型

前提&#xff1a;学习一项技术&#xff0c;要从原理、实践、认知三个方面进行攻克。 不懂原理就不会举一反三&#xff0c;走不了太远。 不懂实践就只能纸上谈兵&#xff0c;做事不落地。 认知不高就无法作对决策&#xff0c;天花板太低。 一、知识体系 二、什么是AI 基于机器…...

Open3D SVD算法实现对应点集配准

目录 一、概述 1.1基本思想 1.2实现步骤 二、代码实现 三、实现效果 3.1原始点云 3.2配准后点云 3.3变换矩阵 一、概述 在点云配准中,SVD(Singular Value Decomposition,奇异值分解)方法是一种常用的精确计算旋转和平移变换的算法。其目标是找到一个刚体变…...

bWAPP靶场安装

bWAPP安装 下载 git地址&#xff1a;https://github.com/raesene/bWAPP 百度网盘地址&#xff1a;链接&#xff1a;https://pan.baidu.com/s/1Y-LvHxyW7SozGFtHoc9PKA 提取码&#xff1a;4tt8 –来自百度网盘超级会员V5的分享 phpstudy中打开根目录&#xff0c;并将下载的文…...

SpringBoot + MyBatisPlus 实现多租户分库

一、引言 在如今的软件开发中&#xff0c;多租户(Multi-Tenancy)应用已经变得越来越常见。多租户是一种软件架构技术&#xff0c;它允许一个应用程序实例为多个租户提供服务。每个租户都有自己的数据和配置&#xff0c;但应用程序实例是共享的。而在我们的Spring Boot MyBati…...

【数据挖掘】银行信用卡风险大数据分析与挖掘

银行信用卡风险大数据分析与挖掘 1、实验目的 中国某个商业银行高层发现自家信用卡存在严重的欺诈和拖欠现象,已经影响到自身经营和发展。银行高层希望大数据分析部门采用数据挖掘技术,对影响用户信用等级的主要因素进行分析,结合信用卡用户的人口特征属性对欺诈行为和拖欠…...

使用 Qt 和 ECharts 进行数据可视化

文章目录 示例图表预览折线图散点图柱状图使用 Qt 和 ECharts 进行数据可视化一、准备工作1. 安装 Qt2. 准备 ECharts二、在 Qt 中使用 ECharts1. 创建 Qt 项目2. 配置项目文件3. 在 UI 中添加 WebEngineView4. 加载 ECharts三、创建折线图、散点图和柱状图1. 折线图2. 散点图3…...

【机器学习】在【Pycharm】中的实践教程:使用【逻辑回归模型】进行【乳腺癌检测】

目录 案例背景 具体问题 1. 环境准备 小李的理解 知识点 2. 数据准备 2.1 导入必要的库和数据集 小李的理解 知识点 2.2 数据集基本信息 小李的理解 知识点 注意事项 3. 数据预处理 3.1 划分训练集和测试集 小李的理解 知识点 注意事项 3.2 数据标准化 小李…...

【搭建Nacos服务】centos7 docker从0搭建Nacos服务

前言 本次搭建基于阿里云服务器系统为&#xff08;CentOS7 Linux&#xff09;、Nacos&#xff08;2.0.3&#xff09;、Docker version 26.1.4 本次搭建基于一个新的云服务器 安装java yum install -y java-1.8.0-openjdk.x86_64安装驱动以及gcc等前置需要的命令 yum install …...

将 build.gradle 配置从 Groovy 迁移到 Kotlin

目录 时间轴 常用术语 脚本文件命名 转换语法 为方法调用添加圆括号 为分配调用添加 转换字符串 重命名文件扩展名 将 def 替换为 val 或 var 为布尔值属性添加 is 前缀 转换列表和映射 配置 build 类型 从 buildscript 迁移到插件块 查找插件 ID 执行重构 转…...

5G(NR) NTN 卫星组网架构

5G(NR) NTN 卫星组网架构 参考 3GPP TR 38.821 5G NTN 技术适用于高轨、低轨等多种星座部署场景&#xff0c;是实现星地网络融合发展的可行技术路线。5G NTN 网络分为用户段、空间段和地面段三部分。其中用户段由各种用户终端组成&#xff0c;包括手持、便携站、嵌入式终端、车…...

WEB安全-文件上传漏洞

1 需求 2 接口 3 MIME类型 在Web开发中&#xff0c;MIME&#xff08;Multipurpose Internet Mail Extensions&#xff09;类型用于标识和表示文档的格式。这些类型在HTTP请求和响应头中扮演着重要的角色&#xff0c;告诉浏览器如何解释和处理接收到的资源12。 以下是一些Web开发…...

Python函数 之 函数基础

print() 在控制台输出 input() 获取控制台输⼊的内容 type() 获取变量的数据类型 len() 获取容器的⻓度 (元素的个数) range() ⽣成⼀个序列[0, n) 以上都是我们学过的函数&#xff0c;函数可以实现⼀个特定的功能。我们将学习⾃⼰如何定义函数, 实现特定的功能。 1.函数是什么…...

昇思25天学习打卡营第11天|SSD目标检测

SSD网络 目标检测问题可以分为以下两个问题&#xff1a;1&#xff09;分类:所有类别的概率&#xff1b;2&#xff09;定位: 4个值(中心位置x,y,宽w,高h) Single Shot MultiBox Detector&#xff0c;SSD&#xff1a;单阶段的目标检测算法&#xff0c;通过卷积神经网络进行特征…...

【C++笔记】-- 七种排序流食般讲解

1.排序的概念&#xff1a;所谓的排序就是对于一组记录&#xff0c;按照某个或者某些关键字&#xff0c;递增或递减的排序这些记录。2.排序的分类&#xff1a;此文章将会介绍四类排序。一、插入排序&#xff1a;直接插入排序、希尔排序。二、选择排序&#xff1a;选择排序、堆排…...

【SITS大会技术社区交流活动深度复盘】:20年一线专家亲述3大未公开的破圈协作模型与落地工具包

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;【SITS大会技术社区交流活动深度复盘】&#xff1a;20年一线专家亲述3大未公开的破圈协作模型与落地工具包 模型一&#xff1a;异构角色动态配对机制 传统技术沙龙常陷入“讲师单向输出、听众被动接收…...

终极指南:如何用NPYViewer快速可视化NumPy数组数据

终极指南&#xff1a;如何用NPYViewer快速可视化NumPy数组数据 【免费下载链接】NPYViewer Load and view .npy files containing 2D and 1D NumPy arrays. 项目地址: https://gitcode.com/gh_mirrors/np/NPYViewer 还在为NumPy数组数据可视化而烦恼吗&#xff1f;面对二…...

英伟达巨额投资,四大云巨头财报亮眼,半导体产业扩张背后隐忧浮现

物理世界产能成为瓶颈云收入快速增长支撑巨头大规模投资。2026年第一季度&#xff0c;谷歌云、微软Azure、亚马逊AWS云业务表现出色&#xff0c;四家公司云业务合计季度营收超700亿美元&#xff0c;同比增长超40%。但物理世界产能受限&#xff0c;谷歌、微软、亚马逊订单积压严…...

从安装到实战:用Python+Neo4j Driver构建你的第一个社交网络图谱(含完整代码)

从零构建社交网络图谱&#xff1a;Python与Neo4j全流程实战指南 社交网络分析正在重塑我们对复杂关系的理解。想象一下&#xff0c;当我们需要分析Twitter上的信息传播路径、LinkedIn的职业关系网或是电商平台的用户推荐系统时&#xff0c;传统的关系型数据库往往显得力不从心。…...

网盘直链下载助手终极指南:八大网盘不限速下载完整教程

网盘直链下载助手终极指南&#xff1a;八大网盘不限速下载完整教程 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 &#xff0c;支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼…...

在Node.js后端服务中集成Taotoken调用多模型API

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 在Node.js后端服务中集成Taotoken调用多模型API 将大模型能力集成到后端服务是现代应用开发的常见需求。通过Taotoken平台&#xf…...

企业级浏览器自动化架构设计:Playwright MCP深度解析与实战指南

企业级浏览器自动化架构设计&#xff1a;Playwright MCP深度解析与实战指南 【免费下载链接】playwright-mcp Playwright MCP server 项目地址: https://gitcode.com/gh_mirrors/pl/playwright-mcp Playwright MCP是一个基于模型上下文协议&#xff08;Model Context Pr…...

保姆级教程:用PCL的ProgressiveMorphologicalFilter搞定机载LiDAR点云地面提取(附避坑指南)

从零掌握PCL渐进形态学滤波&#xff1a;机载LiDAR地面点提取实战指南 第一次处理机载LiDAR点云时&#xff0c;我盯着屏幕上密密麻麻的几百万个点发呆——如何从这团"星空"中准确分离出地面&#xff1f;传统高程阈值法在山丘区域误判严重&#xff0c;而手动分类又如同…...

KMS_VL_ALL_AIO终极指南:一站式Windows与Office智能激活解决方案

KMS_VL_ALL_AIO终极指南&#xff1a;一站式Windows与Office智能激活解决方案 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO KMS_VL_ALL_AIO是一款功能强大的智能激活脚本工具&#xff0c;专为W…...