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

news2025/3/11 9:34:35

第一部分:
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.....

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2313146.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据结构——多项式问题(顺序存储结构or链式存储结构)

补充&#xff1a;malloc函数&#xff1a; malloc 函数是 C 语言标准库中的一个重要函数&#xff0c;位于 <stdlib.h> 头文件中&#xff0c;主要用于在程序运行时动态分配内存。以下将详细介绍其用法。 前面的返回值指针可以自己定义&#xff0c;如 &#xff08;int*&am…

记录小白使用 Cursor 开发第一个微信小程序(一):注册账号及下载工具(250308)

文章目录 记录小白使用 Cursor 开发第一个微信小程序&#xff08;一&#xff09;&#xff1a;注册账号及下载工具&#xff08;250308&#xff09;一、微信小程序注册摘要1.1 注册流程要点 二、小程序发布流程三、下载工具 记录小白使用 Cursor 开发第一个微信小程序&#xff08…

vue2项目修改浏览器显示的网页图标

1.准备一个新的图标文件&#xff0c;通常是. ico格式&#xff0c;也可以是. Png、. Svg等格式 2.将新的图标文件(例如&#xff1a;faviconAt.png)放入项目的public文件夹中。如下图 public文件夹中的所有文件都会在构建时原样复制到最终的输出目录(通常是dist) 3. 修改vue项目…

【网络安全工程】任务10:三层交换机配置

CSDN 原创主页&#xff1a;不羁https://blog.csdn.net/2303_76492156?typeblog三层交换机是指在OSI&#xff08;开放系统互连&#xff09;模型中的第三层网络层提供路由功能的交换机。它不仅具备二层交换机的交换功能&#xff0c;还能实现路由功能&#xff0c;提供更为灵活的网…

侯捷 C++ 课程学习笔记:C++内存管理机制

内存管理从平地到万丈高楼 内存管理入门&#xff08;Memory Management 101&#xff09; 需要具有动态分配并使用memory&#xff08;存储&#xff08;器&#xff09;&#xff0c;&#xff08;计算机的&#xff09;内存&#xff09;&#xff0c;使用过C标准库的容器&#xff0…

JVM常用概念之本地内存跟踪

问题 Java应用启动或者运行过程中报“内存不足&#xff01;”&#xff0c;我们该怎么办? 基础知识 对于一个在本地机器运行的JVM应用而言&#xff0c;需要足够的内存来存储机器代码、堆元数据、类元数据、内存分析等数据结构&#xff0c;来保证JVM应用的成功启动以及未来平…

【鸿蒙开发】Hi3861学习笔记- 软件定时器示例

00. 目录 文章目录 00. 目录01. 定时器概述02. 定时器API03. 定时器常用API3.1 osTimerNew3.2 osTimerDelete3.3 osTimerStart3.4 osTimerStop 04. 程序示例05. 附录 01. 定时器概述 软件定时器&#xff0c;是基于系统Tick时钟中断且由软件来模拟的定时器&#xff0c;当经过设…

在Html5中仿Matlab自定义色带生成实践

目录 前言 一、RGB的相关知识 1、RGB的基本原理 2、RGB的数值表示 3、应用场景 二、ColorMap生成实战 1、外部库介绍 2、相关API 3、实例生成 三、总结 前言 在现代网页开发与数据可视化领域&#xff0c;色彩的表现力对于信息传达和视觉体验起着至关重要的作用。色带&…

贪心算法--

1.柠檬水找零 link:860. 柠檬水找零 - 力扣&#xff08;LeetCode&#xff09; code class Solution { public:bool lemonadeChange(vector<int>& bills) {// 贪心算法&#xff0c; 优先花出大面额bill&#xff0c; 尽可能保护小面额billint five 0, ten 0;// 不…

如何选择国产串口屏?

目录 1、迪文 2、淘晶驰 3、广州大彩 4、金玺智控 5、欣瑞达 6、富莱新 7、冠显 8、有彩 串口屏&#xff0c;顾名思义&#xff0c;就是通过串口通信接口&#xff08;如RS232、RS485、TTL UART等&#xff09;与主控设备进行通信的显示屏。其核心功能是显示信息和接收输入…

matlab慕课学习3.1

3.1顺序结构程序 于20250306 3.1.1程序和程序设计 程序是用某种计算机能够理解并且能够执行的语言来描述的解决问题的方法和步骤。 3.1.2程序的三种基本结构 1.顺序结构 2.选择结构 3.循环结构 3.1.3脚本文件和函数文件 脚本文件是可在命令行窗口直接执行的文件&#xff0…

cesium地图设置3d,2d,2.5d动态切换

通过修改cesium实例vw的scene的显示模式&#xff0c;来切换最终的显示模式。 Cesium.SceneMode总共有四个变量值&#xff0c;分别如下&#xff1a;NameTypeDescriptionMORPHINGnumber在3d与2d之间切换变体 between mode, e.g., 3D to 2D.COLUMBUS_VIEWnumber2.5d模式&#xff0…

【数据结构】二叉搜索树、平衡搜索树、红黑树

二叉搜索树&#xff08;Binary Search Tree&#xff09; 二叉搜索树是一种特殊的二叉树&#xff0c;它用来快速搜索某个值&#xff0c;对于每个节点都应该满足以下条件&#xff1a; 若该节点有左子树&#xff0c;那么左子树中所有节点的值都应该小于该节点的值。若该节点有右…

密码学(终极版)

加密 & 解密 备注&#xff1a;密码学领域不存在完全不能破解的密码&#xff0c;但是如果一个密码需要很久很久&#xff0c;例如一万年才能破解&#xff0c;就认为这个密码是安全的了。 对称加密 非对称加密 公钥加密、私钥解密 私钥签名、公钥认证 非对称的底层原理是…

经销商管理系统选型解析:8款产品详评

本文主要介绍了以下8款经销商管理系统&#xff1a;1.纷享销客&#xff1b; 2.用友T6经销商管理系统&#xff1b; 3.金蝶经销商管理系统&#xff1b; 4.鼎捷经销商管理系统&#xff1b; 5.浪潮经销商管理系统&#xff1b; 6.销售易&#xff1b; 7.SAP Business One Distributor …

【C++】函数重载与nullptr

1、函数重载 C支持在同一个作用域中出现同名函数&#xff0c;但是要求这些同名函数的形参不同&#xff0c;可以是形参个数不同或者类型不同。这样C函数调用就表现出了多态行为&#xff0c;使用更灵活。C语言是不支持同一作用域中出现同名函数的。 代码&#xff1a; 形参类型不…

处理动态分页:自动翻页与增量数据抓取策略-数据议事厅

一、案例场景 Lily&#xff08;挥舞着数据报表&#xff09;&#xff1a;“用户反馈我们的股票舆情分析总是缺失最新跟帖&#xff01;这些动态分页像狡猾的狐狸&#xff0c;每次抓取都漏掉关键数据&#xff01;” 小王&#xff08;调试着爬虫代码&#xff09;&#xff1a;“传…

用android studio模拟器,模拟安卓手机访问网页,使用Chrome 开发者工具查看控制台信息

web 网页项目在安卓手机打开时出现问题&#xff0c;想要查看控制台调试信息。记录一下使用android studio 模拟器访问的方式。 步骤如下&#xff1a; 1.安装android studio&#xff0c;新增虚拟设备&#xff08;VDM- virtual device manager) 点击Virtual Device Manager后会…

【Linux内核系列】:深入理解缓冲区

&#x1f525; 本文专栏&#xff1a;Linux &#x1f338;作者主页&#xff1a;努力努力再努力wz ★★★ 本文前置知识&#xff1a; 文件系统以及相关系统调用接口 输入以及输出重定向 那么在此前的学习中&#xff0c;我们了解了文件的概念以及相关的系统调用接口&#xff0c;并…

【互联网性能指标】QPS/TPS/PV/UV/IP/GMV/DAU/MAU/RPS

&#x1f4d5;我是廖志伟&#xff0c;一名Java开发工程师、《Java项目实战——深入理解大型互联网企业通用技术》&#xff08;基础篇&#xff09;、&#xff08;进阶篇&#xff09;、&#xff08;架构篇&#xff09;清华大学出版社签约作家、Java领域优质创作者、CSDN博客专家、…