iDebD Ответов: 3

Метод cmfctoolbar: использовать пользовательский точечный рисунок(HBITMAP ) во время выполнения


//CMFCToolBar       m_wndToolBar;
if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
		!m_wndToolBar.LoadToolBar(theApp.m_bHiColorIcons ? IDR_MAINFRAME_256 : IDR_MAINFRAME))
	{
		TRACE0("Failed to create toolbar\n");
		return -1;      // fail to create
	}
	HBITMAP hBitmap = LoadBitmap(GetModuleHandle(NULL), MAKEINTRESOURCE(IDB_BITMAP1));
	//m_wndToolBar.LoadBitmap(MakeBitMapTransparent(hBitmap));
	//m_wndToolBar.CleanUpImages();


Я создал одно приложение MDC MDI которое имеет одну панель инструментов использующую растровое изображение;

Я хочу, чтобы запустить обновления, что растровое изображение и снова хочу, чтобы загрузить его на панель инструментов; но я не могу найти способ сделать это; в приведенном выше коде, IDR_MAINFRAME_256-это панель инструментов, с помощью изображения; для создания этого проекта, просто создать MDI-интерфейсом приложения в vs;

Любая идея, как я могу запустить обновления растрового изображения, используя растровую это HBITMAP?
[Та же проблема, что и у меня] http://stackoverflow.com/questions/9306980/cmfcmenubar-kind-of-transparency-for-a-cmfctoolbar?rq=1[^]
Спасибо

3 Ответов

Рейтинг:
1

jung-kreidler

Возможно, немного поздно, но это может помочь другим.
Нет, нет необходимости в другой панели инструментов.

При создании панели инструментов растровое изображение загружается во внутренний объект CMFCToolBar, который может быть сброшен с помощью CleanUpLockedImages. После этого другой растровый файл может быть загружен с вызовом LoadBitmap (так же, как и при создании). Затем AdjustLayout выполняет повторную покраску.

m_wndToolBar.CleanUpLockedImages();
m_wndToolBar.LoadBitmap(IDR_MAINFRAME_2, 0, 0, TRUE /* Locked */);
AdjustLayout();


Рейтинг:
0

KarstenK

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


iDebD

Что я проверил, если я могу использовать PNG-изображение вместо BMP, в этом случае фон может быть прозрачным (так как BMP не может иметь прозрачной информации?);

Но не уверен, что я могу использовать PNG-изображение в кнопке CMFCToolbar

iDebD

http://social.msdn.microsoft.com/Forums/en-US/vcmfcatl/thread/897e71e0-b644-4f60-945c-2fe6aa137136/

KarstenK

Прекрасно - если это сработает ;-)

Рейтинг:
0

KarstenK

шагните в код, и вы увидите, что растровое изображение прикреплено к панели инструментов, поэтому вы не можете его изменить. Поэтому вам нужна еще одна панель инструментов.

Я делал это в старые ХР-времена, и это прекрасно работало.