Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.01.2013, 01:57   #1
SKupchenko
Новичок
Джуниор
 
Регистрация: 31.01.2013
Сообщений: 8
По умолчанию Создание rebar control.

Всем привет, помогите решить задачу, создать ребар.

Код:
//=================================================================================================
// The main function.
//=================================================================================================
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{	
	// Initialization "Common Control Library".
	INITCOMMONCONTROLSEX InitCC;
	InitCC.dwSize = sizeof(INITCOMMONCONTROLSEX);
	InitCC.dwICC = ICC_COOL_CLASSES | ICC_BAR_CLASSES;
	InitCommonControlsEx(& InitCC);

	// Create the main window.
	g_pMainWnd = new CCreateWndEx("Scene editor", "WndClass", hInstance, nCmdShow, WndProc, MAKEINTRESOURCE(IDR_MENU1));
		
	g_hToolbarTop = CreateToolbar(g_pMainWnd->GetHWnd(), hInstance, NULL, WS_CHILD | CCS_TOP | CCS_NODIVIDER | TBSTYLE_WRAPABLE | TBSTYLE_FLAT);
	CreateRebar(g_pMainWnd->GetHWnd(), g_hToolbarTop, hInstance);
        .........
}

//=================================================================================================
// Create the rebar.
//=================================================================================================
HWND CreateRebar(HWND hWnd, HWND hWndToolbar, HINSTANCE hInstance)
{
	// Create the rebar.
	HWND hWndRebar = CreateWindowEx(NULL,
		REBARCLASSNAME,
		NULL,
		WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | RBS_VARHEIGHT | CCS_NODIVIDER | RBS_BANDBORDERS,
		0, 0, 0, 0,
		hWnd,
		NULL,
		hInstance, // Global instance handle
		NULL);

	// Initialize band info.
	REBARBANDINFO rbBand = {sizeof(REBARBANDINFO)};
	rbBand.fMask = 
		RBBIM_STYLE			// fStyle is valid.
		| RBBIM_CHILD		// hwndChild is valid.
		| RBBIM_CHILDSIZE	// child size members are valid.
		| RBBIM_SIZE;		// cx is valid
	rbBand.fStyle = RBBS_CHILDEDGE | RBBS_GRIPPERALWAYS;

	// Get the height of the toolbar.
	DWORD dwBtnSize = (DWORD)SendMessage(hWndToolbar, TB_GETBUTTONSIZE, 0, 0);

	// Set values unique to the band with the toolbar.
	rbBand.hwndChild = hWndToolbar;
	rbBand.cyChild = HIWORD(dwBtnSize);
	rbBand.cxMinChild = 3 * LOWORD(dwBtnSize);
	rbBand.cyMinChild = HIWORD(dwBtnSize);
	// The default width is the width of the buttons.
	rbBand.cx = 0;

	// Add the band that has the toolbar.
	SendMessage(hWndRebar, RB_INSERTBAND, (WPARAM) - 1, (LPARAM) & rbBand);

	return hWndRebar;
}
Функцию создания ребара содрал с МСДН, пробовал пример с МСДН, он тоже не работает.
Не вижу где ошибка, кто увидит, покажите, спасибо.
SKupchenko вне форума Ответить с цитированием
Старый 31.01.2013, 02:37   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

хотелось бы услышать сначала что такое ребар...
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 31.01.2013, 02:38   #3
SKupchenko
Новичок
Джуниор
 
Регистрация: 31.01.2013
Сообщений: 8
По умолчанию

Это проверка знаний или Вы не знаете ?
SKupchenko вне форума Ответить с цитированием
Старый 31.01.2013, 02:43   #4
SKupchenko
Новичок
Джуниор
 
Регистрация: 31.01.2013
Сообщений: 8
По умолчанию

На всякий случай приведу ссылку на МСДН
http://msdn.microsoft.com/en-us/libr...=vs.85%29.aspx

Это контейнер для дочерних окон.
SKupchenko вне форума Ответить с цитированием
Старый 31.01.2013, 03:08   #5
SKupchenko
Новичок
Джуниор
 
Регистрация: 31.01.2013
Сообщений: 8
По умолчанию

Функция создания тулбара:

Код:
//=================================================================================================
// Create the toolbar.
//=================================================================================================
HWND CreateToolbar(HWND hWnd, HINSTANCE hInstance, DWORD dwExStyle, DWORD dwStyle)
{
	const int NUM_BUTTONS = 3;
	int iBtnID[NUM_BUTTONS] = {ID_BUTTON40001, ID_BUTTON40002, ID_BUTTON40003};
	int iBtnStyle[NUM_BUTTONS] = {TBSTYLE_BUTTON};

	// Declaration the buttons info.
	TBBUTTON TBButton[NUM_BUTTONS];

	// Fills a block of memory with zeros. It is designed to be a more secure version of ZeroMemory.
	SecureZeroMemory(TBButton, sizeof(TBButton));
	
	// Definition the buttons info.
	for(size_t i = 0; i < NUM_BUTTONS; ++i)
	{
		TBButton[i].iBitmap = i;
		TBButton[i].idCommand = iBtnID[i];
		TBButton[i].fsState = TBSTATE_ENABLED | TBSTATE_WRAP;
		TBButton[i].fsStyle = iBtnStyle[i];
	}

	// Create the toolbar window.
	HWND hWndToolbar = CreateWindowEx(dwExStyle, TOOLBARCLASSNAME, NULL, dwStyle, 0, 0, 0, 0, hWnd, NULL, hInstance, NULL);

	// Create the image list.
	HIMAGELIST hImageList = ImageList_Create(35, 35, ILC_COLOR24, NUM_BUTTONS, 0);
		
	// Adds an image or images to an image list.
	ImageList_Add(hImageList, LoadBitmap(hInstance, MAKEINTRESOURCE(IDR_TOOLBAR1)), NULL);

	// Set the image list.
	SendMessage(hWndToolbar, TB_SETIMAGELIST, NULL, (LPARAM)hImageList);

	// Add buttons to the toolbar.
	SendMessage(hWndToolbar, TB_BUTTONSTRUCTSIZE, (WPARAM)sizeof(TBBUTTON), 0);
	SendMessage(hWndToolbar, TB_ADDBUTTONS, NUM_BUTTONS, (LPARAM) & TBButton);

	// Resize the toolbar, and show the buttons.
	SendMessage(hWndToolbar, TB_AUTOSIZE, 0, 0);
	ShowWindow(hWndToolbar, TRUE);

	return hWndToolbar;
}
SKupchenko вне форума Ответить с цитированием
Старый 31.01.2013, 09:18   #6
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

A вы уверены, что ребар НЕ создается? Или все же он создается, но не удается в него добавить ничего?

Сравните вызов CreateToolbar(g_pMainWnd->GetHWnd(), hInstance, NULL
с тем, какие параметры ожидает CreateToolbar
waleri вне форума Ответить с цитированием
Старый 31.01.2013, 14:58   #7
SKupchenko
Новичок
Джуниор
 
Регистрация: 31.01.2013
Сообщений: 8
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
A вы уверены, что ребар НЕ создается? Или все же он создается, но не удается в него добавить ничего?

Сравните вызов CreateToolbar(g_pMainWnd->GetHWnd(), hInstance, NULL
с тем, какие параметры ожидает CreateToolbar
Сделал трассировку приложения, функция CreateWindowEx выполняется с именем класса REBARCLASSNAME и возвращает хендл ребара, далее создается структура REBARBANDINFO и инициализируется, правда инициализацию я скопировал с МСДН, потом выполняется SendMessage с параметром RB_INSERTBAND, возвращает 0 после выполнения.

Я не понял что сравнивать в вызове CreateToolbar, эта функция определена топиком выше.

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

Последний раз редактировалось SKupchenko; 31.01.2013 в 15:01.
SKupchenko вне форума Ответить с цитированием
Старый 01.02.2013, 10:44   #8
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

Насчет CreateToolbar / CreateRebar это я перепутал - смотрел вызов одной и аргументы другой.

Вместо sizeof(REBARBANDINFO) изпользуйте REBARBANDINFO_V6_SIZE либо добавьте в ваш проект манифест, для того, чтоб common controls работали в режиме 6.0
waleri вне форума Ответить с цитированием
Старый 01.02.2013, 14:13   #9
SKupchenko
Новичок
Джуниор
 
Регистрация: 31.01.2013
Сообщений: 8
По умолчанию

waleri

Спасибо, использование структуры REBARBANDINFO_V6_SIZE в примерах с СДК Виндовс помогло, в моем же приложении появились сдвиги, но еще не то что надо, скорее всего это из-за того что я не разобрался во всех стилях которые подключаю.

Еще просьба к Вам, расскажите о манифесте, что это такое и как его подключать, в гугле я не нашел ответов.
SKupchenko вне форума Ответить с цитированием
Старый 01.02.2013, 16:24   #10
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

http://en.wikipedia.org/wiki/Side-by-side_assembly
http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx
waleri вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Slider Control electronic255 Помощь студентам 0 25.11.2012 23:08
Alpha Control Wekly Общие вопросы Delphi 2 09.08.2011 21:28
WebBrowser Control Guy C# (си шарп) 0 08.08.2011 14:54
создание TSplitter на форме в dll, Control has no parent window sprofxx Общие вопросы Delphi 9 04.09.2010 13:37