comctl32!ListView_OnSetItem函数分析LISTSUBITEM结构中的image表示图标位置

第一部分:
BOOL ListView_SetSubItem(LV* plv, const LV_ITEM* plvi)
{
LISTSUBITEM lsi;
BOOL fChanged = FALSE;
int i;
int idpa;
HDPA hdpa;
if (plvi->mask & ~(LVIF_DI_SETITEM | LVIF_TEXT | LVIF_IMAGE | LVIF_STATE))
{
RIPMSG(0, "ListView: Invalid mask: %04x", plvi->mask);
return FALSE;
}
if (!(plvi->mask & (LVIF_TEXT | LVIF_IMAGE | LVIF_STATE)))
return TRUE;
i = plvi->iItem;
if (!ListView_IsValidItemNumber(plv, i))
{
RIPMSG(0, "LVM_SETITEM: Invalid iItem: %d", plvi->iItem);
return FALSE;
}
// sub item indices are 1-based...
//
idpa = plvi->iSubItem - 1;
if (idpa < 0 || idpa >= plv->cCol - 1)
{
RIPMSG(0, "LVM_SETITEM: Invalid iSubItem: %d", plvi->iSubItem);
return FALSE;
}
hdpa = ListView_GetSubItemDPA(plv, idpa);
if (!hdpa)
{
hdpa = DPA_CreateEx(LV_HDPA_GROW, plv->hheap);
if (!hdpa)
return FALSE;
DPA_SetPtr(plv->hdpaSubItems, idpa, (void*)hdpa);
}
ListView_GetSubItem(plv, i, plvi->iSubItem, &lsi);
if (plvi->mask & LVIF_TEXT) {
if (lsi.pszText != plvi->pszText) {
Str_Set(&lsi.pszText, plvi->pszText);
fChanged = TRUE;
}
}
if (plvi->mask & LVIF_IMAGE) {
if (plvi->iImage != lsi.iImage) {
lsi.iImage = (short) plvi->iImage;
fChanged = TRUE;
}
}
if (plvi->mask & LVIF_STATE) {
DWORD dwChange;
dwChange = (lsi.state ^ plvi->state ) & plvi->stateMask;
if (dwChange) {
lsi.state ^= dwChange;
fChanged = TRUE;
}
}
if (fChanged) {
PLISTSUBITEM plsiReal = DPA_GetPtr(hdpa, i);
if (!plsiReal) {
plsiReal = LocalAlloc(LPTR, sizeof(LISTSUBITEM));
if (!plsiReal) {
// fail! bail out
return FALSE;
}
}
*plsiReal = lsi;
if (!DPA_SetPtr(hdpa, i, (void*)plsiReal)) {
ListView_FreeSubItem(plsiReal);
return FALSE;
}
}
// all's well... let's invalidate this
if (ListView_IsReportView(plv)) {
RECT rc;
ListView_RGetRectsEx(plv, plvi->iItem, plvi->iSubItem, NULL, &rc);
RedrawWindow(plv->ci.hwnd, &rc, NULL, RDW_ERASE | RDW_INVALIDATE);
}
else if (ListView_IsTileView(plv))
{
LISTITEM *pitem = ListView_GetItemPtr(plv, i);
if (pitem)
{
ListView_SetSRecompute(pitem);
// For tile view, we need to recompute the item
plv->rcView.left = RECOMPUTE;
if (plv->iItemDrawing != i)
ListView_InvalidateItemEx(plv, i, FALSE, RDW_ERASE | RDW_INVALIDATE, LVIF_TEXT);
}
}
return TRUE;
}
// ListView Item structure
#define LVIF_TEXT 0x0001 // LV_ITEM.mask flags (indicate valid fields in LV_ITEM)
#define LVIF_IMAGE 0x0002
#define LVIF_PARAM 0x0004
#define LVIF_STATE 0x0008
第二部分:
0: kd> dx -id 0,0,896d1020 -r1 ((comctl32!_LV *)0x108d88)
((comctl32!_LV *)0x108d88) : 0x108d88 [Type: _LV *]
[+0x000] ci [Type: tagControlInfo]
[+0x024 ( 0: 0)] fNoDismissEdit : 0x0 [Type: unsigned long]
[+0x024 ( 1: 1)] fButtonDown : 0x1 [Type: unsigned long]
[+0x024 ( 2: 2)] fOneClickOK : 0x1 [Type: unsigned long]
[+0x024 ( 3: 3)] fOneClickHappened : 0x0 [Type: unsigned long]
[+0x024 ( 4: 4)] fPlaceTooltip : 0x0 [Type: unsigned long]
[+0x024 ( 5: 5)] fImgCtxComplete : 0x0 [Type: unsigned long]
[+0x024 ( 6: 6)] fNoEmptyText : 0x0 [Type: unsigned long]
[+0x024 ( 7: 7)] fGroupView : 0x0 [Type: unsigned long]
[+0x024 ( 8: 8)] fIconsPositioned : 0x1 [Type: unsigned long]
[+0x024 ( 9: 9)] fInsertAfter : 0x0 [Type: unsigned long]
[+0x024 (10:10)] fListviewAlphaSelect : 0x0 [Type: unsigned long]
[+0x024 (11:11)] fListviewShadowText : 0x0 [Type: unsigned long]
[+0x024 (12:12)] fListviewWatermarkBackgroundImages : 0x0 [Type: unsigned long]
[+0x024 (13:13)] fListviewEnableWatermark : 0x0 [Type: unsigned long]
[+0x024 (14:14)] fInFixIScrollPositions : 0x0 [Type: unsigned long]
[+0x028] wView : 0x0 [Type: unsigned short]
[+0x02c] hdpa : 0x1086d8 [Type: _DPA *] [+0x02c] hdpa : 0x1086d8 [Type: _DPA *]
......
[+0x2fc] iLastId : 0x0 [Type: unsigned long]
[+0x300] iIncrement : 0xffffffff [Type: unsigned long]
0: kd> dx -id 0,0,896d1020 -r1 ((comctl32!_DPA *)0x1086d8)
((comctl32!_DPA *)0x1086d8) : 0x1086d8 [Type: _DPA *]
[+0x000] cp : 22 [Type: int]
[+0x004] pp : 0x10b900 [Type: void * *]
[+0x008] hheap : 0x80000 [Type: void *]
[+0x00c] cpAlloc : 32 [Type: int]
[+0x010] cpGrow : 64 [Type: int]
[+0x014] magic : 0x4150 [Type: unsigned int]
0: kd> dd 0x10b900
0010b900 0010b590 0010b7f8 0010b850 0010b2f0
0010b910 0010ba10 0010ba68 0010bac0 000d64b8
0010b920 0010b380 0010b3d8 0010b430 0010b488
0010b930 0010b4e0 0010b538 0010b5e8 0010b640
0010b940 0010b698 0010b6f0 0010b748 0010b7a0
0010b950 0010b8a8 00118718 00000000 00000000
0010b960 00000000 00000000 00000000 00000000
第三部分:
一共两列:iImage表示位置,从左到右的相对位置
第二列:
0: kd> dt LISTSUBITEM 00118718
comctl32!LISTSUBITEM
+0x000 pszText : 0x000d3818 -> 0x4e
+0x004 iImage : 0n621
+0x006 state : 0
+0x008 sizeText : tagSIZE
0: kd> dx -id 0,0,896d1020 -r1 (*((comctl32!tagSIZE *)0x118720))
(*((comctl32!tagSIZE *)0x118720)) [Type: tagSIZE]
[+0x000] cx : 77 [Type: long]
[+0x004] cy : 7864319 [Type: long]
0: kd> db 0x000d3818
000d3818 4e 00 65 00 77 00 20 00-54 00 65 00 78 00 74 00 N.e.w. .T.e.x.t.
000d3828 20 00 44 00 6f 00 63 00-75 00 6d 00 65 00 6e 00 .D.o.c.u.m.e.n.
000d3838 74 00 2e 00 74 00 78 00-74 00 00 00 00 00 00 00 t...t.x.t.......
0: kd> dt LISTSUBITEM 0010b8a8
comctl32!LISTSUBITEM
+0x000 pszText : 0x001098c8 -> 0x53
+0x004 iImage : 0n546
+0x006 state : 0
+0x008 sizeText : tagSIZE
0: kd> db 0x001098c8
001098c8 53 00 49 00 50 00 4f 00-42 00 4a 00 2e 00 44 00 S.I.P.O.B.J...D.
001098d8 42 00 47 00 00 00 52 00-05 00 04 00 49 01 0c 00 B.G...R.....I...
0: kd> dt LISTSUBITEM 0010b7a0
comctl32!LISTSUBITEM
+0x000 pszText : 0x001098a0 -> 0x70
+0x004 iImage : 0n471
+0x006 state : 0
+0x008 sizeText : tagSIZE
0: kd> db 0x001098a0
001098a0 70 00 61 00 67 00 65 00-66 00 69 00 6c 00 65 00 p.a.g.e.f.i.l.e.
001098b0 2e 00 73 00 79 00 73 00-00 00 00 00 00 00 00 00 ..s.y.s.........
0: kd> dt LISTSUBITEM 0010b748
comctl32!LISTSUBITEM
+0x000 pszText : 0x00109888 -> 0x6e
+0x004 iImage : 0n396
+0x006 state : 0
+0x008 sizeText : tagSIZE
0: kd> db 0x00109888
00109888 6e 00 74 00 6c 00 64 00-72 00 00 00 00 00 00 00 n.t.l.d.r.......
00109898 05 00 03 00 46 01 0e 00-70 00 61 00 67 00 65 00 ....F...p.a.g.e.
0: kd> dt LISTSUBITEM 0010b6f0
comctl32!LISTSUBITEM
+0x000 pszText : 0x00109860 -> 0x4e
+0x004 iImage : 0n321
+0x006 state : 0
+0x008 sizeText : tagSIZE
0: kd> db 0x00109860
00109860 4e 00 54 00 44 00 45 00-54 00 45 00 43 00 54 00 N.T.D.E.T.E.C.T.
00109870 2e 00 43 00 4f 00 4d 00-00 00 00 00 00 00 00 00 ..C.O.M.........
0: kd> dt LISTSUBITEM 0010b698
comctl32!LISTSUBITEM
+0x000 pszText : 0x00109840 -> 0x4d
+0x004 iImage : 0n246
+0x006 state : 0
+0x008 sizeText : tagSIZE
0: kd> db 0x00109840
00109840 4d 00 53 00 44 00 4f 00-53 00 2e 00 53 00 59 00 M.S.D.O.S...S.Y.
00109850 53 00 00 00 00 00 00 00-05 00 04 00 5e 01 0e 00 S...........^...
0: kd> dt LISTSUBITEM 0010b640
comctl32!LISTSUBITEM
+0x000 pszText : 0x00109828 -> 0x49
+0x004 iImage : 0n171
+0x006 state : 0
+0x008 sizeText : tagSIZE
0: kd> db 0x00109828
00109828 49 00 4f 00 2e 00 53 00-59 00 53 00 00 00 0d 77 I.O...S.Y.S....w
0: kd> dt LISTSUBITEM 0010b5e8
comctl32!LISTSUBITEM
+0x000 pszText : 0x00109808 -> 0x65
+0x004 iImage : 0n96
+0x006 state : 0
+0x008 sizeText : tagSIZE
0: kd> db 0x00109808
00109808 65 00 76 00 65 00 6e 00-74 00 2e 00 74 00 78 00 e.v.e.n.t...t.x.
00109818 74 00 00 00 00 00 00 00-03 00 04 00 51 01 0a 00 t...........Q...
0: kd> dt LISTSUBITEM 0010b538
comctl32!LISTSUBITEM
+0x000 pszText : 0x001097e8 -> 0x43
+0x004 iImage : 0n21
+0x006 state : 0
+0x008 sizeText : tagSIZE
0: kd> db 0x001097e8
001097e8 43 00 4f 00 4e 00 46 00-49 00 47 00 2e 00 53 00 C.O.N.F.I.G...S.
001097f8 59 00 53 00 00 00 00 00-04 00 04 00 55 01 0c 00 Y.S.........U...
第二列:
0: kd> dt LISTSUBITEM 0010b4e0
comctl32!LISTSUBITEM
+0x000 pszText : 0x001097c8 -> 0x62
+0x004 iImage : 0n921
+0x006 state : 0
+0x008 sizeText : tagSIZE
0: kd> db 0x001097c8
001097c8 62 00 6f 00 6f 00 74 00-2e 00 69 00 6e 00 69 00 b.o.o.t...i.n.i.
0: kd> dt LISTSUBITEM 0010b488
comctl32!LISTSUBITEM
+0x000 pszText : 0x001097a0 -> 0x41
+0x004 iImage : 0n846
+0x006 state : 0
+0x008 sizeText : tagSIZE
0: kd> db 0x001097a0
001097a0 41 00 55 00 54 00 4f 00-45 00 58 00 45 00 43 00 A.U.T.O.E.X.E.C.
001097b0 2e 00 42 00 41 00 54 00-00 00 00 00 00 00 00 00 ..B.A.T.........
0: kd> dt LISTSUBITEM 0010b430
comctl32!LISTSUBITEM
+0x000 pszText : 0x00109788 -> 0x36
+0x004 iImage : 0n771
+0x006 state : 0
+0x008 sizeText : tagSIZE
0: kd> db 0x00109788
00109788 36 00 2e 00 74 00 78 00-74 00 00 00 00 00 00 00 6...t.x.t.......
0: kd> dt LISTSUBITEM 0010b3d8
comctl32!LISTSUBITEM
+0x000 pszText : 0x00109770 -> 0x34
+0x004 iImage : 0n696
+0x006 state : 0
+0x008 sizeText : tagSIZE
0: kd> db 0x00109770
00109770 34 00 2e 00 74 00 78 00-74 00 00 00 00 00 00 00 4...t.x.t.......
0: kd> dt LISTSUBITEM 0010b380
comctl32!LISTSUBITEM
+0x000 pszText : 0x00109758 -> 0x32
+0x004 iImage : 0n621
+0x006 state : 0
+0x008 sizeText : tagSIZE
0: kd> db 0x00109758
00109758 32 00 2e 00 74 00 78 00-74 00 00 00 2a 97 2e 77 2...t.x.t...*..w
00109768 03 00 03 00 b8 01 0c 00-34 00 2e 00 74 00 78 00 ........4...t.x.
0: kd> dt LISTSUBITEM 000d64b8
comctl32!LISTSUBITEM
+0x000 pszText : 0x00109740 -> 0x31
+0x004 iImage : 0n546
+0x006 state : 0
+0x008 sizeText : tagSIZE
0: kd> db 0x00109740
00109740 31 00 2e 00 74 00 78 00-74 00 00 00 00 00 00 00 1...t.x.t.......
00109750 03 00 03 00 bf 01 0c 00-32 00 2e 00 74 00 78 00 ........2...t.x.
0: kd> dt LISTSUBITEM 0010bac0
comctl32!LISTSUBITEM
+0x000 pszText : 0x00109728 -> 0x77
+0x004 iImage : 0n471
+0x006 state : 0
+0x008 sizeText : tagSIZE
0: kd> db 0x00109728
00109728 77 00 6d 00 70 00 75 00-62 00 00 00 ac 87 2a 77 w.m.p.u.b.....*w
00109738 03 00 03 00 b2 01 0c 00-31 00 2e 00 74 00 78 00 ........1...t.x.
0: kd> dt LISTSUBITEM 0010ba68
comctl32!LISTSUBITEM
+0x000 pszText : 0x000f4280 -> 0x57
+0x004 iImage : 0n396
+0x006 state : 0
+0x008 sizeText : tagSIZE
0: kd> db 0x000f4280
000f4280 57 00 49 00 4e 00 44 00-4f 00 57 00 53 00 00 00 W.I.N.D.O.W.S...
0: kd> dt LISTSUBITEM 0010ba10
comctl32!LISTSUBITEM
+0x000 pszText : 0x0010b158 -> 0x74
+0x004 iImage : 0n321
+0x006 state : 0
+0x008 sizeText : tagSIZE
0: kd> db 0x0010b158
0010b158 74 00 66 00 74 00 70 00-64 00 72 00 6f 00 6f 00 t.f.t.p.d.r.o.o.
0010b168 74 00 00 00 00 00 00 00-b8 56 10 00 78 8d 10 00 t........V..x...
0: kd> dt LISTSUBITEM 0010b2f0
comctl32!LISTSUBITEM
+0x000 pszText : 0x001096e8 -> 0x53
+0x004 iImage : 0n246
+0x006 state : 0
+0x008 sizeText : tagSIZE
0: kd> db 0x001096e8
001096e8 53 00 79 00 73 00 74 00-65 00 6d 00 20 00 56 00 S.y.s.t.e.m. .V.
001096f8 6f 00 6c 00 75 00 6d 00-65 00 20 00 49 00 6e 00 o.l.u.m.e. .I.n.
00109708 66 00 6f 00 72 00 6d 00-61 00 74 00 69 00 6f 00 f.o.r.m.a.t.i.o.
00109718 6e 00 00 00 00 02 00 00-03 00 08 00 b1 01 0c 00 n...............
0: kd> dt LISTSUBITEM 0010b850
comctl32!LISTSUBITEM
+0x000 pszText : 0x00109b58 -> 0x52
+0x004 iImage : 0n171
+0x006 state : 0
+0x008 sizeText : tagSIZE
0: kd> db 0x00109b58
00109b58 52 00 45 00 43 00 59 00-43 00 4c 00 45 00 52 00 R.E.C.Y.C.L.E.R.
00109b68 00 00 00 00 00 00 00 00-08 00 04 00 3b 01 08 00 ............;...
0: kd> dt LISTSUBITEM 0010b7f8
comctl32!LISTSUBITEM
+0x000 pszText : 0x001056a0 -> 0x50
+0x004 iImage : 0n96
+0x006 state : 0
+0x008 sizeText : tagSIZE
0: kd> db 0x001056a0
001056a0 50 00 72 00 6f 00 67 00-72 00 61 00 6d 00 20 00 P.r.o.g.r.a.m. .
001056b0 46 00 69 00 6c 00 65 00-73 00 00 00 78 8d 10 00 F.i.l.e.s...x...
0: kd> dt LISTSUBITEM 0010b590
comctl32!LISTSUBITEM
+0x000 pszText : 0x0010b348 -> 0x44
+0x004 iImage : 0n21
+0x006 state : 0
+0x008 sizeText : tagSIZE
0: kd> db 0x0010b348
0010b348 44 00 6f 00 63 00 75 00-6d 00 65 00 6e 00 74 00 D.o.c.u.m.e.n.t.
0010b358 73 00 20 00 61 00 6e 00-64 00 20 00 53 00 65 00 s. .a.n.d. .S.e.
0010b368 74 00 74 00 69 00 6e 00-67 00 73 00 00 00 00 00 t.t.i.n.g.s.....
相关文章:
comctl32!ListView_OnSetItem函数分析LISTSUBITEM结构中的image表示图标位置
第一部分: BOOL ListView_SetSubItem(LV* plv, const LV_ITEM* plvi) { LISTSUBITEM lsi; BOOL fChanged FALSE; int i; int idpa; HDPA hdpa; if (plvi->mask & ~(LVIF_DI_SETITEM | LVIF_TEXT | LVIF_IMAGE | LVIF_STATE)) { …...
数据结构——多项式问题(顺序存储结构or链式存储结构)
补充:malloc函数: malloc 函数是 C 语言标准库中的一个重要函数,位于 <stdlib.h> 头文件中,主要用于在程序运行时动态分配内存。以下将详细介绍其用法。 前面的返回值指针可以自己定义,如 (int*&am…...
【学习方法】技术开发者的提问智慧:如何高效获得解答?
技术开发者的提问智慧:如何高效获得解答? 在技术开发过程中,每个人都会遇到无法解决的问题。此时,我们通常会向团队、社区或论坛求助。然而,为什么有些人的问题能迅速得到解答,而有些人的问题却石沉大海&a…...
记录小白使用 Cursor 开发第一个微信小程序(一):注册账号及下载工具(250308)
文章目录 记录小白使用 Cursor 开发第一个微信小程序(一):注册账号及下载工具(250308)一、微信小程序注册摘要1.1 注册流程要点 二、小程序发布流程三、下载工具 记录小白使用 Cursor 开发第一个微信小程序(…...
vue2项目修改浏览器显示的网页图标
1.准备一个新的图标文件,通常是. ico格式,也可以是. Png、. Svg等格式 2.将新的图标文件(例如:faviconAt.png)放入项目的public文件夹中。如下图 public文件夹中的所有文件都会在构建时原样复制到最终的输出目录(通常是dist) 3. 修改vue项目…...
spring boot3.4.3+MybatisPlus3.5.5+swagger-ui2.7.0
使用 MyBatis-Plus 操作 books 表。我们将实现以下功能: 创建实体类 Book。 创建 Mapper 接口 BookMapper。 创建 Service 层 BookService 和 BookServiceImpl。 创建 Controller 层 BookController。 配置 MyBatis-Plus 和数据库连接。 1. 项目结构 src ├─…...
【网络安全工程】任务10:三层交换机配置
CSDN 原创主页:不羁https://blog.csdn.net/2303_76492156?typeblog三层交换机是指在OSI(开放系统互连)模型中的第三层网络层提供路由功能的交换机。它不仅具备二层交换机的交换功能,还能实现路由功能,提供更为灵活的网…...
侯捷 C++ 课程学习笔记:C++内存管理机制
内存管理从平地到万丈高楼 内存管理入门(Memory Management 101) 需要具有动态分配并使用memory(存储(器),(计算机的)内存),使用过C标准库的容器࿰…...
JVM常用概念之本地内存跟踪
问题 Java应用启动或者运行过程中报“内存不足!”,我们该怎么办? 基础知识 对于一个在本地机器运行的JVM应用而言,需要足够的内存来存储机器代码、堆元数据、类元数据、内存分析等数据结构,来保证JVM应用的成功启动以及未来平…...
【鸿蒙开发】Hi3861学习笔记- 软件定时器示例
00. 目录 文章目录 00. 目录01. 定时器概述02. 定时器API03. 定时器常用API3.1 osTimerNew3.2 osTimerDelete3.3 osTimerStart3.4 osTimerStop 04. 程序示例05. 附录 01. 定时器概述 软件定时器,是基于系统Tick时钟中断且由软件来模拟的定时器,当经过设…...
在Html5中仿Matlab自定义色带生成实践
目录 前言 一、RGB的相关知识 1、RGB的基本原理 2、RGB的数值表示 3、应用场景 二、ColorMap生成实战 1、外部库介绍 2、相关API 3、实例生成 三、总结 前言 在现代网页开发与数据可视化领域,色彩的表现力对于信息传达和视觉体验起着至关重要的作用。色带&…...
贪心算法--
1.柠檬水找零 link:860. 柠檬水找零 - 力扣(LeetCode) code class Solution { public:bool lemonadeChange(vector<int>& bills) {// 贪心算法, 优先花出大面额bill, 尽可能保护小面额billint five 0, ten 0;// 不…...
【学习方法一】
学习方法一 一、通用高效学习法二、学科专项方法三、工具与技术辅助四、习惯与心理策略五、避免常见误区总结六、进阶学习策略七、解决学习痛点八、场景化学习法九、资源与工具推荐十、个性化学习调整十一、长期学习心态十二、常见问题QA十三、应对特殊挑战的学习法十四、健康与…...
k8s启动时calico-kube-controllers与coredns组件一直是pending状态
症状: k8s执行kubectl get po -n kube-system时,以下组件一直>是pending状态: calico-kube-controllerscoredns 当执行 kubectl get po -n kube-system 发现 calico-kube-controllers 和 coredns 一直处于 Pending 状态时,通常…...
ngx_openssl_create_conf
ngx_openssl_create_conf 声明在 src\event\ngx_event_openssl.c static void *ngx_openssl_create_conf(ngx_cycle_t *cycle); 定义在 src\event\ngx_event_openssl.c static void * ngx_openssl_create_conf(ngx_cycle_t *cycle) {ngx_openssl_conf_t *oscf;oscf ngx_…...
如何选择国产串口屏?
目录 1、迪文 2、淘晶驰 3、广州大彩 4、金玺智控 5、欣瑞达 6、富莱新 7、冠显 8、有彩 串口屏,顾名思义,就是通过串口通信接口(如RS232、RS485、TTL UART等)与主控设备进行通信的显示屏。其核心功能是显示信息和接收输入…...
matlab慕课学习3.1
3.1顺序结构程序 于20250306 3.1.1程序和程序设计 程序是用某种计算机能够理解并且能够执行的语言来描述的解决问题的方法和步骤。 3.1.2程序的三种基本结构 1.顺序结构 2.选择结构 3.循环结构 3.1.3脚本文件和函数文件 脚本文件是可在命令行窗口直接执行的文件࿰…...
EB-Cable许可管理系统的功能和特点
在数字化时代,软件许可管理已成为企业日常运营中不可或缺的一部分。EB-Cable许可管理系统作为一款专为电缆管理而设计的软件解决方案,为企业提供了全面、高效且灵活的许可管理功能。本文将详细介绍EB-Cable许可管理系统的功能和特点,帮助您快…...
cesium地图设置3d,2d,2.5d动态切换
通过修改cesium实例vw的scene的显示模式,来切换最终的显示模式。 Cesium.SceneMode总共有四个变量值,分别如下:NameTypeDescriptionMORPHINGnumber在3d与2d之间切换变体 between mode, e.g., 3D to 2D.COLUMBUS_VIEWnumber2.5d模式࿰…...
Mac如何查看 IDEA 的日志文件
在 macOS 上,IntelliJ IDEA 的日志文件通常存储在用户目录下的 .IntelliJIdea<版本号> 文件夹中。以下是查看日志文件的具体步骤: 1. 找到日志文件的位置 日志文件通常位于以下路径: ~/Library/Logs/IntelliJIdea<版本号> 其…...
linux 软件安装(下)
七、ElasticSearch安装 官网地址:Elasticsearch:官方分布式搜索和分析引擎 | Elastic 官网下载地址:Past Releases of Elastic Stack Software | Elastic 7.1、linux安装 1、上传安装包 altp # 打开sftp窗口 # 上传es安装包 put e:/sof…...
MongoDB 自动化部署
部署在容器中,并且自动创建所需用户和权限等 # 启动 mongoDBsudo docker run -dit --name china_fish_mongo \ -p 27017:27017 \ -v /data/project1/db/mongo/config/mongod.conf:/etc/mongod.conf \ -v /data/project1/db/mongo/data:/data/db \ -v /data/project1…...
程序化广告知识入门与Python基础数据处理实践
程序化广告知识入门与Python基础数据处理实践 大家好!我写这一系列博客的初衷是想和大家一起学习进步。在技术飞速发展的今天,数据处理能力愈发重要,Python作为强大的数据处理工具,掌握它能为我们的职业发展和技术提升带来极大帮…...
【数据结构】二叉搜索树、平衡搜索树、红黑树
二叉搜索树(Binary Search Tree) 二叉搜索树是一种特殊的二叉树,它用来快速搜索某个值,对于每个节点都应该满足以下条件: 若该节点有左子树,那么左子树中所有节点的值都应该小于该节点的值。若该节点有右…...
密码学(终极版)
加密 & 解密 备注:密码学领域不存在完全不能破解的密码,但是如果一个密码需要很久很久,例如一万年才能破解,就认为这个密码是安全的了。 对称加密 非对称加密 公钥加密、私钥解密 私钥签名、公钥认证 非对称的底层原理是…...
经销商管理系统选型解析:8款产品详评
本文主要介绍了以下8款经销商管理系统:1.纷享销客; 2.用友T6经销商管理系统; 3.金蝶经销商管理系统; 4.鼎捷经销商管理系统; 5.浪潮经销商管理系统; 6.销售易; 7.SAP Business One Distributor …...
Go 语言封装 HTTP 请求的 Curl 工具包
文章目录 Go 语言封装 HTTP 请求的 Curl 工具包🏗️ 工具包结构简介核心结构体定义初始化函数 🌟 功能实现1. 设置请求头2. 构建请求3. 发送请求4. 发送 GET 请求5. 发送 POST 请求6. 发送 PUT 请求7. 发送 DELETE 请求8. 读取响应体 💡 实现…...
【C++】函数重载与nullptr
1、函数重载 C支持在同一个作用域中出现同名函数,但是要求这些同名函数的形参不同,可以是形参个数不同或者类型不同。这样C函数调用就表现出了多态行为,使用更灵活。C语言是不支持同一作用域中出现同名函数的。 代码: 形参类型不…...
全球首款 5G-A 人形机器人发布
全球首款 5G-A 人形机器人于世界移动通信大会(MWC2025)上由中国移动、华为、乐聚联合发布。以下是关于这款机器人的详细介绍: 名称与背景 名称9:这款人形机器人名为 “夸父”,是中国移动、华为与乐聚机器人在 GTI 平台…...
第5节:交换技术与VLAN技术
交换机工作原理与VLAN技术实战 在现代网络中,交换机是构建局域网(LAN)的核心设备,而VLAN(虚拟局域网)技术则是优化网络管理和性能的关键工具。本文将以华为三层交换机为例,深入探讨交换机的工作原理、VLAN的配置与Trunk技术,以及STP(生成树协议)的应用,帮助读者全面…...
