Цвет фона ленты в чистом C
Привет,
Я пишу нативные программы на Си уже 30 лет, но теперь у меня есть задача моего босса улучшить существующие программы с помощью ленточного меню, не записывая все новые программы на c++ или c#.
Я прекрасно ориентировался на программу "Windows Ribbon Framework in Win32 C Application" от Стивена Вириа с 2010 года (Большое спасибо за эту замечательную программу!) и все lools очень хороши за одним исключением:
Я не могу установить глобальный цвет фона ленты с помощью "UI_PKEY_GlobalBackgroundColor".
Я решительно не знаком с C++, и все мои попытки перевести пример кода c++ на чистый c, чтобы установить цвет backgrouind ленты, потерпели неудачу.
Есть ли у кого-нибудь короткое решение для меня?
Огромное спасибо.
Детлеф
Что я уже пробовал:
HRESULT STDMETHODCALLTYPE OnCreateUICommand(IUIApplication *This, UINT32 commandId, UI_COMMANDTYPE typeID, IUICommandHandler **commandHandler) { HRESULT hr; VOID *ppvObj = NULL; PROPVARIANT pv; /* allocate pApplication */ // Command-Handler für das Abfragen der Command-Ids pCommandHandler = (IUICommandHandler *)GlobalAlloc(GMEM_FIXED, sizeof(IUICommandHandler)); (IUICommandHandlerVtbl *)pCommandHandler->lpVtbl = &myCommand_Vtbl; hr = pCommandHandler->lpVtbl->QueryInterface(pCommandHandler, &IID_IUICommandHandler, (void**)commandHandler); // Property-Handler pPropertyStore = (IPropertyStore *)GlobalAlloc(GMEM_FIXED, sizeof(IPropertyStore)); (IPropertyStoreVtbl*)pPropertyStore->lpVtbl = &myPropertyStore_Vtbl; pPropertyStore->lpVtbl->QueryInterface(pPropertyStore, &IID_IUIPropertyHandler, &ppvObj); UI_HSBCOLOR BackgroundColor = UI_HSB(0xFF, 0xFF, 0x00); PropVariantInit (&pv); pv.vt = VT_UI4; pv.lVal = BackgroundColor; hr = pPropertyStore->lpVtbl->SetValue(pPropertyStore, &UI_PKEY_GlobalBackgroundColor, &pv); hr = pPropertyStore->lpVtbl->Commit(pPropertyStore); return hr; }
KarstenK
Вы должны предоставить все сообщение об ошибке. Лучше всего, что Вы google для своих ключевых слов :-O
Member 13518242
Привет Карстен,
спасибо за ваш повтор.
Проблема в том, что я не получаю сообщения об ошибке, но цвет фона остается неизменным в своем старом состоянии.
Я думаю, что в c++ очень легко изменить цвет, и мне нужна такая функция:
CComPtr<ipropertystore> spPropertyStore;
// _spFramework - это указатель на назначенный интерфейс IUIFramework
// когда лента инициализируется.
if (SUCCESSED(_spFramework->QueryInterface(&spPropertyStore)))
{
ПРОПВАРИАНТ propvarBackground;
PROPVARIANT propvarHighlight;
ПРОПВАРИАНТНЫЙ пропвартекст;
// UI_HSBCOLOR-это тип, определенный в UIRibbon.h, который состоит из
// три значения компонентов: оттенок, насыщенность и яркость соответственно.
UI_HSBCOLOR BackgroundColor = UI_HSB(0x14, 0x38, 0x54);
UI_HSBCOLOR HighlightColor = UI_HSB(0x00, 0x36, 0x87);
UI_HSBCOLOR TextColor = UI_HSB(0x2B, 0xD6, 0x00);
InitPropVariantFromUInt32(BackgroundColor, &propvarBackground);
InitPropVariantFromUInt32(HighlightColor, &propvarHighlight);
InitPropVariantFromUInt32(TextColor, &propvarText);
spPropertyStore->SetValue(UI_PKEY_GlobalBackgroundColor, propvarBackground);
spPropertyStore->SetValue(UI_PKEY_GlobalTextColor, propvarText);
spPropertyStore->Commit();
}
Но в чистом c я не могу найти аналогичную функцию, как "InitPropVariantFromUInt32".
Может быть, это решит проблему.
Гугл не помог :-(.
Еще раз спасибо и с наилучшими пожеланиями.
Детлеф