• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

Winapi Controls Rebar

  • Автор темы alekssgor
  • Дата начала
A

alekssgor

Как поместить в перестраиваемую панель Toolbar(у меня Toolbar размещаетя во всю ширину окна и перекрывает Rebar полностью
Если размещаю на Rebare два Comboboksa всё работает. Подскажите где ошибка.
Код:
//Создание панели инструментов
HWND CreateToolBar(HWND hwnd, DWORD dwStyle, UINT uCom)
{
static TBBUTTON but[4];
but[0].fsStyle = TBSTYLE_SEP;
but[1].iBitmap = STD_FILENEW;
but[1].idCommand = FILE_NEW;
but[1].fsState = TBSTATE_ENABLED;
but[1].fsStyle = TBSTYLE_BUTTON;
but[2].iBitmap = STD_FILEOPEN;
but[2].idCommand = FILE_OPENS;
but[2].fsState = TBSTATE_ENABLED;
but[2].fsStyle = TBSTYLE_BUTTON;
but[3].iBitmap = STD_FILESAVE;
but[3].idCommand = FILE_SAVE;
but[3].fsState = TBSTATE_ENABLED;
but[3].fsStyle = TBSTYLE_BUTTON; 
return CreateToolbarEx(hwnd, dwStyle, uCom, 0, HINST_COMMCTRL, IDB_VIEW_LARGE_COLOR, but, 4, 0, 0, 0, 0, sizeof(TBBUTTON));
}
//Создание Rebar
HWND CreateRebar(HWND hwndOwner, HWND hwndToolbar, HWND hwndCombo)
{
INITCOMMONCONTROLSEX icex;
icex.dwSize = sizeof(INITCOMMONCONTROLSEX);
icex.dwICC  = ICC_COOL_CLASSES | ICC_BAR_CLASSES;
InitCommonControlsEx(&icex);


HWND hwndRebar = CreateWindowEx(WS_EX_TOOLWINDOW, REBARCLASSNAME, NULL,
WS_CHILD | WS_VISIBLE| WS_CLIPSIBLINGS | WS_CLIPCHILDREN | RBS_VARHEIGHT | CCS_NODIVIDER | RBS_BANDBORDERS ,
0,0,0,0,hwndOwner,NULL,hinstance, NULL);

if(!hwndRebar)
{
return NULL;
}

REBARBANDINFO rbBand = { sizeof(REBARBANDINFO) };
rbBand.fMask = RBBIM_STYLE | RBBIM_TEXT | RBBIM_CHILD | RBBIM_CHILDSIZE | RBBIM_SIZE; 
rbBand.fStyle = RBBS_CHILDEDGE | RBBS_GRIPPERALWAYS; 

DWORD dwBtnSize = (DWORD)SendMessage(hwndToolbar, TB_GETBUTTONSIZE, 0,0);
rbBand.lpText = TEXT("");
rbBand.hwndChild = hwndToolbar;
rbBand.cyChild = LOWORD(dwBtnSize);
rbBand.cxMinChild = NUMBUTTONS * HIWORD(dwBtnSize);
rbBand.cyMinChild = LOWORD(dwBtnSize);
rbBand.cx = 0;

SendMessage(hwndRebar, RB_INSERTBAND, (WPARAM)-1, (LPARAM)&rbBand);

RECT rc;
GetWindowRect(hwndCombo, &rc);
rbBand.lpText = TEXT("Шрифт");
rbBand.hwndChild = hwndCombo;
rbBand.cxMinChild = 0;
rbBand.cyMinChild = rc.bottom - rc.top;
// The default width should be set to some value wider than the text. The combo 
// box itself will expand to fill the band.
rbBand.cx = 100;

// Add the band that has the combo box.
SendMessage(hwndRebar, RB_INSERTBAND, (WPARAM)-1, (LPARAM)&rbBand);
return (hwndRebar);
}

//Создаём Toolbar
DWORD dwStyle = WS_CHILD | TBSTYLE_TOOLTIPS | WS_DLGFRAME | WS_VISIBLE;
hToolbar = CreateToolBar(hwnd, dwStyle, ID_TOOLBAR);
//Создаём ComboBox
hCombo = CreateWindow("COMBOBOX", NULL, WS_CHILD | CBS_DROPDOWNLIST,
0, 0, 200, 25, hwnd, (HMENU)ID_COMBOBOX, hinstance, NULL);
//Создаём Rebar
hRebar = CreateRebar(hwnd, hToolbar,hCombo);//Rebar не виден?????
//hRebar = CreateRebar(hwnd, hCombo, hCombo2);//Здесь всё работает
 
A

alekssgor

Проблема в стиле toolbara. Должен быть установлен стиль CCS_NOPARENTALIGN
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!