Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Win32 Rebar:从visual studio 6迁移到visual studio 2010后,myRebar.cbSize出现问题_C_Visual Studio 2010_Winapi_Visual Studio 6 - Fatal编程技术网

Win32 Rebar:从visual studio 6迁移到visual studio 2010后,myRebar.cbSize出现问题

Win32 Rebar:从visual studio 6迁移到visual studio 2010后,myRebar.cbSize出现问题,c,visual-studio-2010,winapi,visual-studio-6,C,Visual Studio 2010,Winapi,Visual Studio 6,我正在尝试将visual studio 6上完全工作的win32代码迁移到visual studio 2010。看起来钢筋有点问题。下面是我在VisualStudio6上运行良好的代码 HWND hwndRebar = NULL; REBARINFO rbi; REBARBANDINFO rbbi; HWND hwndChild; RECT rc; LPSTR lpszTemp; UINT

我正在尝试将visual studio 6上完全工作的win32代码迁移到visual studio 2010。看起来钢筋有点问题。下面是我在VisualStudio6上运行良好的代码

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;
}
我尝试在VisualStudio6和2010中运行代码,并进行了一些比较。我发现在visual 6上,sizeofREBARBANDINFO的值是80,在visual studio 2010上是100。所以我在VisualStudio2010到80上尝试了一个硬代码值的实验。然后sendMessage成功,但该钢筋内的UI在窗口上不可见。 有人能帮我解决这个问题吗? 先谢谢你

编辑:


如果我将sizeofREBARBANDINFO替换为ReBarbandInfo\u V6\u大小而不是硬编码值80,这是一个好主意吗?

100大小是由于Vista中添加了新字段。如果您在XP上运行,则不支持Vista结构。在加入windows之前,你需要正确设置你的windows版本。h.@RaymondChen:对不起,我不明白。当我在Windows7上使用VisualStudio6运行程序时,它可以正常工作。但当它与visual 2010在同一操作系统上运行时,它就不起作用了。您能告诉我如何设置窗口版本吗?只需将_WIN32_WINNT设置为正确的值即可。谢谢。这有助于: