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.....

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Docker基础篇——Ubuntu下Docker安装

大家好我是木木&#xff0c;在当今快速发展的云计算与云原生时代&#xff0c;容器化技术蓬勃兴起&#xff0c;Docker 作为实现容器化的主流工具之一&#xff0c;为开发者和运维人员带来了极大的便捷 。下面我们一起进行Docker安装。 Docker的官方Ubuntu安装文档&#xff0c;如…

Python图形编程之EasyGUI: indexbox的用法

目录<<上一章&#xff1a;ynbox用法详解 下一章&#xff1a;boolbox用法详解 >> # 1 Python图形编程之EasyGUI: indexbox的用法 1.1 基本用法 indexbox提供用户一个选择不同选项的功能&#xff0c;不同的选项由按钮来表示&#xff0c;提供类似功能的还有choicebox…

大语言模型从理论到实践(第二版)-学习笔记(绪论)

大语言模型的基本概念 1.理解语言是人工智能算法获取知识的前提 2.语言模型的目标就是对自然语言的概率分布建模 3.词汇表 V 上的语言模型&#xff0c;由函数 P(w1w2 wm) 表示&#xff0c;可以形式化地构建为词序列 w1w2 wm 的概率分布&#xff0c;表示词序列 w1w2 wm…

突破极限!蓝耘通义万相2.1引爆AI多模态新纪元——性能与应用全方位革新

云边有个稻草人-CSDN博客 目录 一、 引言 二、 蓝耘通义万相2.1版本概述 三、 蓝耘通义万相2.1的核心技术改进 【多模态数据处理】 【语音识别与文本转化】 【自然语言处理&#xff08;NLP&#xff09;改进】 【跨平台兼容性】 四、 蓝耘注册 部署流程—新手也能轻松…

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

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

p5.js:sound(音乐)可视化,动画显示音频高低变化

本文通过4个案例介绍了使用 p5.js 进行音乐可视化的实践&#xff0c;包括将音频振幅转化为图形、生成波形图。 承上一篇&#xff1a;vite&#xff1a;初学 p5.js demo 画圆圈 cd p5-demo copy .\node_modules\p5\lib\p5.min.js . copy .\node_modules\p5\lib\addons\p5.soun…

PDF处理控件Aspose.PDF,如何实现企业级PDF处理

PDF处理为何成为开发者的“隐形雷区”&#xff1f; “手动调整200页PDF目录耗时3天&#xff0c;扫描件文字识别错误导致数据混乱&#xff0c;跨平台渲染格式崩坏引发客户投诉……” 作为开发者&#xff0c;你是否也在为PDF处理的复杂细节消耗大量精力&#xff1f;Aspose.PDF凭…

ruo-yi项目启动备忘

ruo-yi项目启动遇到问题备忘 参考文档: 若依 手把手启动 https://blog.csdn.net/qq_43804008/article/details/132950644?utm_mediumdistribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-1-132950644-blog-137337537.235^v43^pc_blog_bottom_…

⭐LeetCode周赛 Q1. 找出最大的几近缺失整数——模拟⭐

⭐LeetCode周赛 Q1. 找出最大的几近缺失整数——模拟⭐ 示例 1&#xff1a; 输入&#xff1a;nums [3,9,2,1,7], k 3 输出&#xff1a;7 解释&#xff1a; 1 出现在两个大小为 3 的子数组中&#xff1a;[9, 2, 1]、[2, 1, 7] 2 出现在三个大小为 3 的子数组中&#xff1a;[3,…

Java 集合框架大师课:性能调优火葬场(四)

&#x1f680; Java 集合框架大师课&#xff1a;性能调优火葬场&#xff08;四&#xff09; &#x1f525; 战力值突破 95% 警告&#xff01;调优就像吃重庆火锅——要选对食材&#xff08;数据结构&#xff09;还要控制火候&#xff08;算法&#xff09;&#x1f336;️ 第一章…

【愚公系列】《Python网络爬虫从入门到精通》045-Charles的SSL证书的安装

标题详情作者简介愚公搬代码头衔华为云特约编辑&#xff0c;华为云云享专家&#xff0c;华为开发者专家&#xff0c;华为产品云测专家&#xff0c;CSDN博客专家&#xff0c;CSDN商业化专家&#xff0c;阿里云专家博主&#xff0c;阿里云签约作者&#xff0c;腾讯云优秀博主&…

蓝桥杯嵌入式组第七届省赛题目解析+STM32G431RBT6实现源码

文章目录 1.题目解析1.1 分而治之&#xff0c;藕断丝连1.2 模块化思维导图1.3 模块解析1.3.1 KEY模块1.3.2 ADC模块1.3.3 IIC模块1.3.4 UART模块1.3.5 LCD模块1.3.6 LED模块1.3.7 TIM模块 2.源码3.第七届题目 前言&#xff1a;STM32G431RBT6实现嵌入式组第七届题目解析源码&…

KUKA机器人:智能制造的先锋力量

在科技日新月异的今天&#xff0c;自动化和智能化已成为推动制造业转型升级的重要引擎。作为全球领先的智能、资源节约型自动化解决方案供应商&#xff0c;KUKA机器人在这一浪潮中扮演着举足轻重的角色。本文将带您深入了解KUKA机器人的发展现状&#xff0c;探索其在智能制造领…

Ateme在云端构建可扩展视频流播平台

Akamai Connected Cloud帮助Ateme客户向全球观众分发最高质量视频内容。 “付费电视运营商和内容提供商现在可以在Akamai Connected Cloud上通过高质量视频吸引观众&#xff0c;并轻松扩展。”── Ateme首席战略官Rmi Beaudouin ​ Ateme是全球领先的视频压缩和传输解决方案提…

OceanBase社区年度之星专访:张稚京与OB社区的双向奔赴

2024年年底&#xff0c;OceanBase社区颁发了“年度之星”奖项&#xff0c;旨在表彰过去一年中为 OceanBase 社区发展作出卓越贡献的个人。今天&#xff0c;我们有幸邀请到这一荣誉的获得者——来自融科智联的张稚京老师&#xff0c;并对他进行了专访。 在过去的一年中&#xf…

如何选择国产串口屏?

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

涨薪技术|Kubernetes(k8s)之Service服务

01Service简介 Kubernetes Pod 是有生命周期的&#xff0c;它们可以被创建&#xff0c;也可以被销毁&#xff0c;然而一旦被销毁生命就永远结束。通过 ReplicationController 能够动态地创建和销毁 Pod&#xff08;例如&#xff0c;需要进行扩缩容&#xff0c;或者执行 滚动升…

Quickwit+Jaeger+Prometheus+Grafana搭建Java日志管理平台

介绍 生产服务应用可观测性在当下比较流行的方案&#xff0c;其中出现了大量高性能、开箱即用、易上手的的开源产品&#xff0c;大大丰富了在可观测性领域产品的多样性&#xff0c;本文讲述基于OTLP协议推送Java项目遥测数据&#xff08;日志、指标、链路&#xff09;到后端存储…

「mysql」Mac mysql一路畅通式安装

折腾了一上午&#xff0c;遇到的各种错误&#xff1a; 错误一&#xff1a;安装后&#xff0c;终端执行 mysql 或者执行 mysql -u root -p 时报错&#xff1a; ERROR 1045 (28000): Access denied for user rootlocalhost (using password: YES)错误二&#xff1a;为解决错误一&…

Linux原生异步IO原理与实现(Native AIO)

异步 IO&#xff1a;当应用程序发起一个 IO 操作后&#xff0c;调用者不能立刻得到结果&#xff0c;而是在内核完成 IO 操作后&#xff0c;通过信号或回调来通知调用者。 异步 IO 与同步 IO 的区别如图所示&#xff1a; 从上图可知&#xff0c;同步 IO 必须等待内核把 IO 操作处…