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

CViewState::InitializeColumns函数分析之_hdsaColumnStates的结构

CViewState::InitializeColumns函数分析之_hdsaColumnStates的结构


    // Set up saved column state only if the saved state
    // contains information other than "nothing".

    if (_hdsaColumnStates)
    {
        UINT cStates = DSA_GetItemCount(_hdsaColumnStates);
        if (cStates > 0)
        {
            // 99/02/05 vtan: If there is a saved column state then
            // clear all the column "on" states to "off" and only
            // display what columns are specified. Start at 1 so
            // that name is always on.        把35项的选中标志置OFF

            for (iReal = 1; iReal < GetColumnCount(); iReal++)
            {
                COL_INFO* pci = (COL_INFO*)DSA_GetItemPtr(_hdsaColumns, iReal);
                pci->csFlags &= ~SHCOLSTATE_ONBYDEFAULT;
            }
            //把_hdsaColumnStates的结构对应数组置ON,这里是0,1,2,3,6项的选中标志置ON
            for (UINT i = 0; i < cStates; i++)
            {
                DWORD dw;
                DSA_GetItem(_hdsaColumnStates, i, &dw);
                SetColumnState(dw, SHCOLSTATE_ONBYDEFAULT, SHCOLSTATE_ONBYDEFAULT);
            }
        }
    }

    return S_OK;
}


结果:


1: kd> dt comctl32!_DSA 000d6ba0
   +0x000 cItem            : 0n5
   +0x004 aItem            : 0x000f0210 Void
   +0x008 cItemAlloc       : 0n5
   +0x00c cbItem           : 0n4
   +0x010 cItemGrow        : 0n5
   +0x014 magic            : 0x4153
1: kd> dt 0x000f0210+0x4*0
Symbol not found at address 000f0210.
1: kd> dd 0x000f0210+0x4*0
000f0210  00000000 00000001 00000002 00000003
000f0220  00000006 00000000 00110a50 00094400
000f0230  00050004 000a01bd 801f0014 2559a1f0
000f0240  11d421d7 c000afbd f0b9604f 00000000
000f0250  00040029 000901b1 501f0014 20d04fe0
000f0260  10693aea 0008d8a2 9d30302b 432f0019
000f0270  00005c3a 00000000 00000000 00000000
000f0280  00000000 31006a00 00000000 00000000

1: kd>  dt shell32!COL_INFO 0x1209c0 +0xb0*7
   +0x000 szName           : [80] 0x53
   +0x0a0 cChars           : 0xa
   +0x0a4 fmt              : 0
   +0x0a8 csFlags          : 0x81
   +0x0ac tsFlags          : 0
1: kd>  dt shell32!COL_INFO 0x1209c0 +0xb0*6
   +0x000 szName           : [80] 0x41
   +0x0a0 cChars           : 0xa
   +0x0a4 fmt              : 0
   +0x0a8 csFlags          : 0x11
   +0x0ac tsFlags          : 0
1: kd>  dt shell32!COL_INFO 0x1209c0 +0xb0*5
   +0x000 szName           : [80] 0x44
   +0x0a0 cChars           : 0x14
   +0x0a4 fmt              : 0
   +0x0a8 csFlags          : 0x83
   +0x0ac tsFlags          : 0
1: kd>  dt shell32!COL_INFO 0x1209c0 +0xb0*4
   +0x000 szName           : [80] 0x44
   +0x0a0 cChars           : 0x14
   +0x0a4 fmt              : 0
   +0x0a8 csFlags          : 3
   +0x0ac tsFlags          : 0
1: kd>  dt shell32!COL_INFO 0x1209c0 +0xb0*3
   +0x000 szName           : [80] 0x44
   +0x0a0 cChars           : 0x14
   +0x0a4 fmt              : 0
   +0x0a8 csFlags          : 0x13
   +0x0ac tsFlags          : 0
1: kd>  dt shell32!COL_INFO 0x1209c0 +0xb0*2
   +0x000 szName           : [80] 0x54
   +0x0a0 cChars           : 0x14
   +0x0a4 fmt              : 0
   +0x0a8 csFlags          : 0x11
   +0x0ac tsFlags          : 0
1: kd>  dt shell32!COL_INFO 0x1209c0 +0xb0*1
   +0x000 szName           : [80] 0x53
   +0x0a0 cChars           : 0x10
   +0x0a4 fmt              : 1
   +0x0a8 csFlags          : 0x12
   +0x0ac tsFlags          : 0
1: kd>  dt shell32!COL_INFO 0x1209c0 +0xb0*0
   +0x000 szName           : [80] 0x4e
   +0x0a0 cChars           : 0x1e
   +0x0a4 fmt              : 0
   +0x0a8 csFlags          : 0x11
   +0x0ac tsFlags          : 0

1: kd> db 0x1209c0 +0xb0*0
001209c0  4e 00 61 00 6d 00 65 00-00 00 00 00 00 00 00 00  N.a.m.e.........

1: kd> db 0x1209c0 +0xb0*1
00120a70  53 00 69 00 7a 00 65 00-00 00 00 00 00 00 00 00  S.i.z.e.........

1: kd> db 0x1209c0 +0xb0*2
00120b20  54 00 79 00 70 00 65 00-00 00 00 00 00 00 00 00  T.y.p.e.........

1: kd> db 0x1209c0 +0xb0*3
00120bd0  44 00 61 00 74 00 65 00-20 00 4d 00 6f 00 64 00  D.a.t.e. .M.o.d.
00120be0  69 00 66 00 69 00 65 00-64 00 00 00 00 00 00 00  i.f.i.e.d.......

1: kd> db 0x1209c0 +0xb0*4
00120c80  44 00 61 00 74 00 65 00-20 00 43 00 72 00 65 00  D.a.t.e. .C.r.e.
00120c90  61 00 74 00 65 00 64 00-00 00 00 00 00 00 00 00  a.t.e.d.........

1: kd> db 0x1209c0 +0xb0*5
00120d30  44 00 61 00 74 00 65 00-20 00 41 00 63 00 63 00  D.a.t.e. .A.c.c.
00120d40  65 00 73 00 73 00 65 00-64 00 00 00 00 00 00 00  e.s.s.e.d.......

1: kd> db 0x1209c0 +0xb0*6
00120de0  41 00 74 00 74 00 72 00-69 00 62 00 75 00 74 00  A.t.t.r.i.b.u.t.
00120df0  65 00 73 00 00 00 00 00-00 00 00 00 00 00 00 00  e.s.............

相关文章:

  • PySide6 GUI 学习笔记——常用类及控件使用方法(常用类尺寸QSize)
  • 【前端】Vue组件库之Element: 一个现代化的 UI 组件库
  • 在Kubernetes上部署DeepSeek-R1进行高效AI推理
  • SpringBoot 核心总结图
  • Redis 回收进程工作流程详解
  • 【Python 学习 / 5】函数详解(定义、参数、作用域、lambda、内置函数)
  • Redis 简介
  • 基于ThinkPHP 5~8兼容的推荐算法类实现,
  • TikTok 多账号管理与自动化运营:矩阵系统功能全解析
  • 软件测试面试题精选33道,附答案+文档
  • Redis 启用自动内存碎片清理异常
  • 深化与细化:提示工程(Prompt Engineering)的进阶策略与实践指南2
  • 为AI聊天工具添加一个知识系统 之108 详细设计之49 相提并论的三者、三位一体Triad和圣灵倒三角
  • Android 10.0 移除wifi功能及相关菜单
  • 前端常见面试题-2025
  • 前端开发中关于虚拟列表的实现与应用优化
  • 若依集成WebSocket
  • 如何在 GitHub 中创建一个空目录 ?
  • 如何提高网站在百度中的权重?
  • 使用OBS和nginx实现直播流
  • 媒体:不能让追求升学率,成为高中不双休的借口
  • 特朗普:对所有在国外制作进入美国的电影征收100%关税
  • 新华社:让历史照鉴未来
  • 原油价格战一触即发?沙特不想再忍,领衔多个产油国加速增产
  • 中国金茂向滨江集团提供11.21亿元诚意金借款,拟合作开发3月获取的地块
  • 解放日报:服务国家战略,加快建成科技创新高地