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

CInternetToolbar::_CommonHandleFileSysChange函数分析之CReBar::_IDToIndex函数的作用


第一部分:

// IMPORTANT: don't change the value of anything between CBIDX_FIRST and CBIDX_LAST.
// CInternetToolbar::_LoadUpgradeSettings assumes these values haven't changed from
// version to version.
#define CBIDX_MENU              1                        菜单栏
#define CBIDX_TOOLS             2                        工具栏
#define CBIDX_LINKS             3
#define CBIDX_ADDRESS           4                        地址栏
#define CBIDX_BRAND             5                                徽标
#define CBIDX_FIRST             CBIDX_MENU
#define CBIDX_LAST              CBIDX_BRAND

void CInternetToolbar::_CommonHandleFileSysChange(LONG lEvent, LPITEMIDLIST* ppidl)
{
    // stuff that needs to be done tree or no tree
    switch (lEvent)
    {
        // README:
        // If you need to add events here, then you must change SHELLBROWSER_FSNOTIFY_FLAGS in
        // shbrowse.cpp in order to get the notifications
    case SHCNE_DRIVEREMOVED:
    case SHCNE_MEDIAREMOVED:
    case SHCNE_MEDIAINSERTED:
    case SHCNE_DRIVEADD:
    case SHCNE_UPDATEIMAGE:
    case SHCNE_UPDATEITEM:
        // Forward this command to CAddressBand::FileSysChange()
        // by using IToolbandHelper::OnWinEvent().
        {
            CBandItemData *pbid = _bs._GetBandItemDataStructByID(CBIDX_ADDRESS);        //#define CBIDX_ADDRESS           4
            if (pbid)
            {
                // REVIEW: why don't we use IShellChangeNotify here?
                //
                IUnknown_FileSysChange(pbid->pdb, (DWORD)lEvent, (LPCITEMIDLIST*)ppidl);
                pbid->Release();
            }
        }
        break;

CBandItemData* CBandSite::_GetBandItemDataStructByID(DWORD uID)
{
    int iBand = _BandIDToIndex(uID);
    if (iBand == -1)
        return NULL;
    return _GetBandItem(iBand);
}

/*----------------------------------------------------------
Purpose: Given the band ID, returns the internal band index.

*/
int CBandSite::_BandIDToIndex(DWORD dwBandID)
{
    int nRet = -1;

    if (_hwnd)
        nRet = (int)SendMessage(_hwnd, RB_IDTOINDEX, (WPARAM) dwBandID, (LPARAM) 0);
    return nRet;
}

#define RB_IDTOINDEX    (WM_USER +  16) // wParam == id


第二部分:ID

UINT CReBar::_IDToIndex(UINT id)
{
    UINT i;
    REBARBANDINFO   rbbi;

    rbbi.cbSize = sizeof(REBARBANDINFO);
    rbbi.fMask = RBBIM_ID;            //根据rbbi.fMask = RBBIM_ID选择需要的信息


#define RBBIM_STYLE         0x00000001
#define RBBIM_COLORS        0x00000002
#define RBBIM_TEXT          0x00000004
#define RBBIM_IMAGE         0x00000008
#define RBBIM_CHILD         0x00000010
#define RBBIM_CHILDSIZE     0x00000020
#define RBBIM_SIZE          0x00000040
#define RBBIM_BACKGROUND    0x00000080
#define RBBIM_ID            0x00000100
#if (_WIN32_IE >= 0x0400)
#define RBBIM_IDEALSIZE     0x00000200
#define RBBIM_LPARAM        0x00000400
#define RBBIM_HEADERSIZE    0x00000800  // control the size of the header
#endif

// IMPORTANT: don't change the value of anything between CBIDX_FIRST and CBIDX_LAST.
// CInternetToolbar::_LoadUpgradeSettings assumes these values haven't changed from
// version to version.
#define CBIDX_MENU              1
#define CBIDX_TOOLS             2
#define CBIDX_LINKS             3
#define CBIDX_ADDRESS           4
#define CBIDX_BRAND             5
#define CBIDX_FIRST             CBIDX_MENU
#define CBIDX_LAST              CBIDX_BRAND


第三部分:


1: kd> p
comctl32!CReBar::_IDToIndex+0x12:
001b:6f6b22d7 c745b050000000  mov     dword ptr [ebp-50h],50h
1: kd> dv
           this = 0x00000000
             id = 4                                //id = 4
           rbbi = struct tagREBARBANDINFOW
1: kd> p


UINT CReBar::_IDToIndex(UINT id)
{
    UINT i;
    REBARBANDINFO   rbbi;

    rbbi.cbSize = sizeof(REBARBANDINFO);
    rbbi.fMask = RBBIM_ID;

    for (i = 0; i < _cBands; i++)
    {

        if (_GetBandInfo(i, &rbbi))
        {

            if (rbbi.wID == (WORD)id)
                return i;
        }
    }

    return -1;
}


BOOL CReBar::_GetBandInfo(UINT uBand, LPREBARBANDINFO lprbbi)
{
    PRBB prbb;

    if (!_IsValidIndex(uBand) || lprbbi->cbSize > SIZEOF(REBARBANDINFO))
        return(FALSE);

    prbb = _GetBand(uBand);

。。。。。。

    if (lprbbi->fMask & RBBIM_ID)
        lprbbi->wID = prbb->wID;

。。。。。。

    return(TRUE);
}

第四部分:


1: kd> dt comctl32!tagREBARBAND  0x101380
   +0x000 fStyle           : 0x720
   +0x004 clrFore          : 0xffffffff
   +0x008 clrBack          : 0xffffffff
   +0x00c lpText           : 0x000d6df8  -> 0
   +0x010 cxText           : 0n0
   +0x014 iImage           : 0n-1
   +0x018 cxMinChild       : 0n36
   +0x01c cyMinChild       : 0n19
   +0x020 cxBmp            : 0n0
   +0x024 cyBmp            : 0n0
   +0x028 x                : 0n0
   +0x02c y                : 0n0
   +0x030 cx               : 0n980
   +0x034 cy               : 0n22
   +0x038 cxRequest        : 0n4000
   +0x03c cxMin            : 0n52
   +0x040 cxIdeal          : 0n247
   +0x044 cyMaxChild       : 0n2147483647
   +0x048 cyIntegral       : 0n0
   +0x04c cyChild          : 0n19
   +0x050 hwndChild        : 0x00020094 HWND__
   +0x054 hbmBack          : (null)
   +0x058 wID              : 1
   +0x05c lParam           : 0n984592
   +0x060 fChevron         : 0n0
   +0x064 rcChevron        : tagRECT
   +0x074 wChevState       : 0x80
1: kd> dt comctl32!tagREBARBAND  0x101380+0x78*1
   +0x000 fStyle           : 0x562
   +0x004 clrFore          : 0xffffffff
   +0x008 clrBack          : 0xffffffff
   +0x00c lpText           : 0x000d6740  -> 0
   +0x010 cxText           : 0n0
   +0x014 iImage           : 0n-1
   +0x018 cxMinChild       : 0n38
   +0x01c cyMinChild       : 0n22
   +0x020 cxBmp            : 0n0
   +0x024 cyBmp            : 0n0
   +0x028 x                : 0n982
   +0x02c y                : 0n0
   +0x030 cx               : 0n38
   +0x034 cy               : 0n22
   +0x038 cxRequest        : 0n38
   +0x03c cxMin            : 0n38
   +0x040 cxIdeal          : 0n0
   +0x044 cyMaxChild       : 0n38
   +0x048 cyIntegral       : 0n0
   +0x04c cyChild          : 0n22
   +0x050 hwndChild        : 0x000300d0 HWND__
   +0x054 hbmBack          : (null)
   +0x058 wID              : 5
   +0x05c lParam           : 0n1022792
   +0x060 fChevron         : 0n0
   +0x064 rcChevron        : tagRECT
   +0x074 wChevState       : 0x80
1: kd> dt comctl32!tagREBARBAND  0x101380+0x78*2
   +0x000 fStyle           : 0x721
   +0x004 clrFore          : 0xffffffff
   +0x008 clrBack          : 0xffffffff
   +0x00c lpText           : 0x000fbe88  -> 0
   +0x010 cxText           : 0n0
   +0x014 iImage           : 0n-1
   +0x018 cxMinChild       : 0n67
   +0x01c cyMinChild       : 0n22
   +0x020 cxBmp            : 0n0
   +0x024 cyBmp            : 0n0
   +0x028 x                : 0n0
   +0x02c y                : 0n24
   +0x030 cx               : 0n1020
   +0x034 cy               : 0n22
   +0x038 cxRequest        : 0n4000
   +0x03c cxMin            : 0n83
   +0x040 cxIdeal          : 0n403
   +0x044 cyMaxChild       : 0n2147483647
   +0x048 cyIntegral       : 0n0
   +0x04c cyChild          : 0n22
   +0x050 hwndChild        : 0x000300ce HWND__
   +0x054 hbmBack          : (null)
   +0x058 wID              : 2
   +0x05c lParam           : 0n1034152
   +0x060 fChevron         : 0n0
   +0x064 rcChevron        : tagRECT
   +0x074 wChevState       : 0x80
1: kd> dt comctl32!tagREBARBAND  0x101380+0x78*3
   +0x000 fStyle           : 0x121
   +0x004 clrFore          : 0xffffffff
   +0x008 clrBack          : 0xffffffff
   +0x00c lpText           : 0x000fc9f8  -> 0x41
   +0x010 cxText           : 0n39
   +0x014 iImage           : 0n-1
   +0x018 cxMinChild       : 0n0
   +0x01c cyMinChild       : 0n22
   +0x020 cxBmp            : 0n0
   +0x024 cyBmp            : 0n0
   +0x028 x                : 0n0
   +0x02c y                : 0n48
   +0x030 cx               : 0n1020
   +0x034 cy               : 0n22
   +0x038 cxRequest        : 0n4000
   +0x03c cxMin            : 0n47
   +0x040 cxIdeal          : 0n0
   +0x044 cyMaxChild       : 0n2147483647
   +0x048 cyIntegral       : 0n0
   +0x04c cyChild          : 0n22
   +0x050 hwndChild        : 0x00020090 HWND__
   +0x054 hbmBack          : (null)
   +0x058 wID              : 4                        +0x058 wID              : 4
   +0x05c lParam           : 0n1035448
   +0x060 fChevron         : 0n0
   +0x064 rcChevron        : tagRECT
   +0x074 wChevState       : 0x80
1: kd> db 0x000fc9f8
000fc9f8  41 00 26 00 64 00 64 00-72 00 65 00 73 00 73 00  A.&.d.d.r.e.s.s.
000fca08  00 00 00 00 ff ff ff ff-07 00 04 00 17 01 08 00  ................

相关文章:

  • Yocto Linux 量产 BSP 镜像定制
  • C++中避免重复虚函数的三大解决方案:以卡牌游戏开发为例
  • ArcGIS Pro:轻松制作地震动画,洞察灾害动态
  • Kubernetes全解析:从容器编排到云原生霸主
  • Arcgis中添加脚本工具箱
  • Java后端大厂高频面经——Java基础
  • *VulnHub-FristiLeaks:1.3暴力解法、细节解法,主打软硬都吃,隧道搭建、寻找exp、提权、只要你想没有做不到的姿势
  • ​‌fpassthru($stream)‌ 是 PHP 中的一个函数​
  • 加速科技Flex10K-L测试机:以硬核创新重塑显示驱动芯片测试新标杆!
  • Ubuntu 24.04 配置ODBC连接ORACLE 11G数据库
  • 从零构建企业级财务分析数仓 | Hive建模实战
  • 2025 ubuntu24.04系统安装docker
  • vue实现一个pdf在线预览,pdf选择文本并提取复制文字触发弹窗效果
  • 数据结构拓展:详解perror函数(C++)
  • 基于python实现的疫情数据可视化分析系统
  • 3. 前后端实现压缩包文件下载
  • 用R语言的XML库写一个采集图片的爬虫程序
  • 使用python进行数据分析需要安装的库
  • C++ list(双向链表)
  • [Python入门学习记录(小甲鱼)]第3章 Python基础知识
  • 制作网站要什么软件/seo网站关键词优化
  • 河间做网站 申梦网络/西宁网站seo
  • 企业网站建设可行性分析表/武汉seo首页
  • 网站免费正能量软件/seo实战培训教程
  • 网站开发研/爱站网seo综合查询工具
  • wordpress 推荐环境/重庆seo排名软件