Win32 Rebar:从 Visual Studio 6 迁移到 Visual Studio 2010 后出现 myRebar.cbSize 问题

2024-02-11

我正在尝试将 Visual Studio 6 上完全工作的 win32 代码迁移到 Visual Studio 2010。Rebar 似乎存在一些问题。下面是我的代码,在 Visual Studio 6 上运行良好。

HWND            hwndRebar = NULL;
REBARINFO       rbi;
REBARBANDINFO   rbbi;
HWND            hwndChild;
RECT            rc;
LPSTR           lpszTemp;
UINT            nHeight;

hwndRebar = CreateWindowEx( WS_EX_TOOLWINDOW, 
                            REBARCLASSNAME, 
                            NULL,
                            WS_VISIBLE |
                            WS_BORDER | 
                            WS_OVERLAPPED | 
                            WS_CHILD | 
                            WS_CLIPCHILDREN | 
                            WS_CLIPSIBLINGS | 
                            RBS_VARHEIGHT | 
                            RBS_BANDBORDERS | 
                            RBS_DBLCLKTOGGLE |
                            RBS_AUTOSIZE |
                            RBS_REGISTERDROP |
                            CCS_TOP |
                            CCS_NODIVIDER | 
                            CCS_NOPARENTALIGN |
                            0,
                            0, 
                            0, 
                            200, 
                            m_info.cyTB, 
                            hwndParent, 
                            (HMENU)IDC_REBAR, 
                            g_hInst, 
                            NULL);

if(!hwndRebar) 
    return FALSE;

rbi.cbSize  = sizeof(rbi);
rbi.fMask   = RBIM_IMAGELIST;
rbi.himl    = NULL;
if(!SendMessage(hwndRebar, RB_SETBARINFO, 0, (LPARAM)&rbi))
    return FALSE;

//add a band that contains a button
hwndChild = CreateMainToolbar(hwndRebar);

if(!hwndChild)
    return FALSE;

GetClientRect(hwndChild, &rc);

ZeroMemory(&rbbi, sizeof(rbbi));
rbbi.cbSize       = sizeof(REBARBANDINFO);
rbbi.fMask        = RBBIM_SIZE | 
                        RBBIM_CHILD | 
                        RBBIM_CHILDSIZE | 
                        RBBIM_ID | 
                        RBBIM_STYLE | 
                        0;
rbbi.cxMinChild   = rc.right;
rbbi.cyMinChild   = MYICON_CY + EXTRA_PIXELS;
rbbi.cyMaxChild   = TallestBtn(hwndChild);
rbbi.cyChild      = m_info.fTextLabels ? rbbi.cyMaxChild : rbbi.cyMinChild;
rbbi.cyIntegral   = rbbi.cyMaxChild - rbbi.cyMinChild;
rbbi.cx           = 100;
rbbi.fStyle       = RBBS_CHILDEDGE | 
                        RBBS_VARIABLEHEIGHT |
                        ((m_info.windows & WND_TOOLBAR) ? 0 : RBBS_HIDDEN) | 
                        0;
rbbi.wID          = IDC_TOOLBAR;
rbbi.hwndChild    = hwndChild;

// SendMessage FAILED on visual studio 2010. But worked on visual studio 6.
if(!SendMessage(hwndRebar, RB_INSERTBAND, (WPARAM)-1, (LPARAM)(LPREBARBANDINFO)&rbbi))
{
    int i = GetLastError(); // --> i = 6 (invalid handle)
    return FALSE;
}

我尝试在 Visual Studio 6 和 2010 中运行代码并进行一些比较。我发现在视觉 6 上,尺寸(REBARBANDINFO) is 80在 Visual Studio 2010 上是100。所以我确实在 Visual Studio 2010 上尝试了通过硬编码值到 80 进行实验。然后 sendMessage 成功,但该钢筋内的 UI 在窗口上不可见。 谁能帮我解决这个问题吗? 先感谢您。

EDIT:

如果我更换是个好主意吗尺寸(REBARBANDINFO) with REBARBANDINFOW_V6_SIZE而不是硬编码值 80?


None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Win32 Rebar:从 Visual Studio 6 迁移到 Visual Studio 2010 后出现 myRebar.cbSize 问题 的相关文章

  • 类型转换 sockaddr 结构

    我正在尝试学习网络编程 并在这个过程中学习C 我对结构感到困惑sockaddr这是一个通用地址 并且sockaddr in 我的书里是这么说的 因此 我们可以填写 sockaddr in 的字段 然后强制转换 a 指向 它指向 指向 soc
  • 如何查找boost运行时版本

    我正在编写一个使用 boost 的 C 库 在这个库中 我想包含有关用于编译我的库的二进制版本的 boost 版本的信息 我可以使用宏BOOST VERSION这很好 我还想确定哪个是 boost 的运行时版本 以便我可以与用于编译我的库的
  • 每个 CPU 核心处于 C0 电源状态的时间

    任何帮助弄清楚如何做到这一点都会很棒 在过去一秒内 每个 CPU 核心处于 C0 电源状态的时间有多少 这是针对 Mac 应用程序的 因此需要 Objective C cocoa 和 c OS X 没有任何公开 CPU c 状态的 API
  • 如何使用Task.WhenAny并实现重试

    我有一个创建多个基于 I O 的任务的解决方案 我正在使用Task WhenAny 来管理这些任务 但通常许多任务会由于网络问题或请求限制等原因而失败 我似乎找不到一个解决方案 使我能够在使用时成功重试失败的任务Task WhenAny 方
  • WPF MVVM将DataTable绑定到DataGrid不显示数据

    我有一个简单的控件 其中包含一个 DataGrid 其中 ItemsSource 绑定到 DataTable 当我填充 DataTable 时 我可以看到 DataGrid 中添加了行 但没有显示任何数据 我没有为此 DataGrid 使用
  • Reflection.Emit 中的短格式操作码错误

    我正在制作一种与以下非常相似的小语言hlsl但仅支持像素着色器 该语言使用reflection emit构建实现相同功能的 NET 程序集 我目前正在测试分支指令的实现if在我的一个单元测试中 一个大的if与内if elses 失败并显示以
  • ApiController 操作无法从查询字符串解析数组

    使用 Visual Studio 2012 2 MVC4 Web 应用程序 我有请求发送到我的 ApiController 如下所示 http localhost api keys ids 1 ids 2 ids 3 我的印象是以下方法应该
  • WIX 自动生成 GUID *?

    假设我生成产品 ID 为 的 WIX XML 文件 另外 对于每个组件 GUID 我都使用
  • Code First - 实体框架 - 如何公开外键

    我有以下数据对象 public class Customer System Data Entity ModelConfiguration EntityTypeConfiguration
  • 使用 cryptoapi CryptImportKey 导入公钥时出错

    我想将公钥 blob 导入到 CSP 但发生了错误 BYTE pbData 0xEB 0x2A 0x38 0x56 0x86 0x61 0x88 0x7F 0xA1 0x80 0xBD 0xDB 0x5C 0xAB 0xD5 0xF2 0x
  • 允许 .NET WebApi 忽略 DOCTYPE 声明

    我正在尝试通过 WebApi 方法将 XML 反序列化为对象 我有以下课程 XmlRoot IsNullable false public class MyObject XmlElement Name public string Name
  • 读取所有进程内存以查找字符串变量c#的地址

    我有 2 个用 C 编写的程序 第一个名为 ScanMe 的程序包含一个包含值 FINDMEEEEEEE 的字符串变量 以及一个值为 1546 22915487 的双精度变量 另一个名为 MemoryScan 的程序读取第一个程序的所有内存
  • 如何使用包含的转换的排名来比较两个标准转换序列

    include
  • 为什么 MISRA:2012 需要函数原型?

    我想知道为什么 MISRA 2012 需要函数原型 在下面的示例中 这两个原型并不是真正必要的 include
  • 无论表单上的焦点控件如何,如何捕获 Keys.F1?

    我使用了 KeyDown 事件和一些简单的代码 例如if e KeyCode Keys F1 捕获在表单上按下 F1 但如果表单上有一些文本框 或者表单上有一些带有 Dock Fill 的电子表格 则上面的代码将毫无用处并且不执行任何操作
  • 修改公共属性的访问修饰符是否是重大更改?

    如果我将公共属性的 setter 的访问修饰符从私有更改为公共 是否会导致引用它的其他程序集发生任何重大更改 UPDATE 这个问题是我 2012 年 1 月博客的主题 https ericlippert com 2012 01 09 ev
  • 在同一条线上铸造两次

    我在项目中看到了这段代码 b的类型是void void b int a int unsigned long b 这条线毫无意义吗 我的意思是 这与a int b在所有情况下 这可能会避免 64 位 Unix 系统上的编译器警告unsigne
  • Yield Return == IEnumerable 和 IEnumerator 吗?

    Is yield return实施的捷径IEnumerable and IEnumerator 是的 您可以在我的书 C in Depth 的第 6 章中找到更多相关信息 幸好第六章是免费提供 http www manning source
  • 更新插入 MongoDB 时如何防止出现“_t”字段?

    我有一个应用程序 它使用 MongoDB 的 C 驱动程序将 Upsert 插入 MongoDB 数据库 当我打电话给Update函数 我无法指定我要更新的类型 然后 t字段插入元素的类型 这是我用来更新插入的代码 collection U
  • 什么是多重重继承?

    我将以下称为 多重重新继承 直接继承一个类一次 并通过继承其一个或多个后代来间接继承一次或多次 通过继承一个类的两个或多个后代来间接继承一个类两次或多次 我想知道它是否存在以及如何明确访问嵌入的子对象 1 Professional C 2n

随机推荐