Арматура Win32: проблема с myRebar.cbSize возникла после перехода с Visual Studio 6 на Visual Studio 2010
Я пытаюсь перенести полностью рабочий код win32 на Visual Studio 6 в 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 и провести некоторое сравнение. Я обнаружил, что на Visual 6 значение sizeof(REBARBANDINFO) равно 80, а на Visual Studio 2010 - 100. Поэтому я попытался провести эксперимент по значению жесткого кода в Visual Studio 2010 до 80. Затем sendMessage был успешным, но пользовательский интерфейс внутри этой арматуры не виден в окне. Может кто-нибудь, пожалуйста, помогите мне с этой проблемой? Заранее спасибо.
РЕДАКТИРОВАТЬ:
Это хорошая идея, если я заменил sizeof(REBARBANDINFO) на REBARBANDINFOW_V6_SIZE вместо жесткого значения 80?