WWW.ИСХОДНИКИ.РУ cpp.sources.ru
java.sources.ru web.sources.ru soft.sources.ru
jdbc.sources.ru asp.sources.ru api.sources.ru

  Форум на исходниках
  C / C++ / Visual C++
  ReBar (или CoolBar) + Menu

СПРОСИТЬ  ОТВЕТИТЬ
профайл | регистрация | faq

Автор Тема:   ReBar (или CoolBar) + Menu
SUnteXx опубликован 06-01-2002 16:06 MSK   Click Here to See the Profile for SUnteXx   Click Here to Email SUnteXx  
Hlo all!
У меня вопрос: как можно поместить меню в ReBar (CoolBar). Все мои попытки не увенчались успехом! Помогите, ху кэн:)
SUnteXx опубликован 08-01-2002 00:32 MSK     Click Here to See the Profile for SUnteXx  Click Here to Email SUnteXx     
Люди, плиз, очень надо! Помогите, кто может! Буду благодарен!
ADK опубликован 08-01-2002 05:46 MSK     Click Here to See the Profile for ADK  Click Here to Email ADK     
Во-первых, я видел такой класс готовый, но там как-то не так было сделано. Знаешь, как в MMC в Win2K, нижняя строка меню - без hottrack. А если надо как в Explorer, то в WTL это стандартный компонент, поройся там и всё решится!
SUnteXx опубликован 08-01-2002 23:57 MSK     Click Here to See the Profile for SUnteXx  Click Here to Email SUnteXx     
А руками можно самому сделать всю эту бадягу? Если да, то помогите, плиииззз
ADK опубликован 09-01-2002 05:49 MSK     Click Here to See the Profile for ADK  Click Here to Email ADK     
На мой взягляд, тебе уже всё сказано. Берёшь исходники WTL и смотришь. Сколько будешь смотреть - не знаю. Вот отрывок для подключения меню:

BOOL AttachMenu(HMENU hMenu)
{
ATLASSERT(::IsWindow(m_hWnd));
ATLASSERT(::IsMenu(hMenu));
if(hMenu != NULL && !::IsMenu(hMenu))
return FALSE;

// destroy old menu, if needed, and set new one
if(m_hMenu != NULL && (m_dwExtendedStyle & CBR_EX_SHAREMENU) == 0)
::DestroyMenu(m_hMenu);
m_hMenu = hMenu;

if(m_bAttachedMenu) // Nothing else in this mode
return TRUE;

// Build buttons according to menu
SetRedraw(FALSE);

// Clear all
BOOL bRet;
int nCount = GetButtonCount();
for(int i = 0; i < nCount; i++)
{
bRet = DeleteButton(0);
ATLASSERT(bRet);
}


// Add buttons for each menu item
if(m_hMenu != NULL)
{
int nItems = ::GetMenuItemCount(m_hMenu);

T* pT = static_cast<T*>(this);
pT; // avoid level 4 warning
TCHAR szString[pT->_nMaxMenuItemTextLength];
for(int i = 0; i < nItems; i++)
{
CMenuItemInfo mii;
mii.fMask = MIIM_TYPE | MIIM_STATE | MIIM_SUBMENU;
mii.fType = MFT_STRING;
mii.dwTypeData = szString;
mii.cch = pT->_nMaxMenuItemTextLength;
bRet = ::GetMenuItemInfo(m_hMenu, i, TRUE, &mii);
ATLASSERT(bRet);
// If we have more than the buffer, we assume we have bitmaps bits
if(lstrlen(szString) > pT->_nMaxMenuItemTextLength - 1)
{
mii.fType = MFT_BITMAP;
::SetMenuItemInfo(m_hMenu, i, TRUE, &mii);
szString[0] = 0;
}

// NOTE: Command Bar currently supports only drop-down menu items
ATLASSERT(mii.hSubMenu != NULL);

TBBUTTON btn;
btn.iBitmap = 0;
btn.idCommand = i;
btn.fsState = (BYTE)(((mii.fState & MFS_DISABLED) == 0) ? TBSTATE_ENABLED : 0);
btn.fsStyle = TBSTYLE_BUTTON | TBSTYLE_AUTOSIZE | TBSTYLE_DROPDOWN;
btn.dwData = 0;
btn.iString = 0;

bRet = InsertButton(-1, &btn);
ATLASSERT(bRet);

TBBUTTONINFO bi;
memset(&bi, 0, sizeof(bi));
bi.cbSize = sizeof(TBBUTTONINFO);
bi.dwMask = TBIF_TEXT;
bi.pszText = szString;

bRet = SetButtonInfo(i, &bi);
ATLASSERT(bRet);
}
}

SetRedraw(TRUE);
Invalidate();
UpdateWindow();

return TRUE;
}

СПРОСИТЬ  ОТВЕТИТЬ
Перейти:


E-mail | WWW.ИСХОДНИКИ.RU

Powered by: Ultimate Bulletin Board, Freeware Version 5.10a
Purchase our Licensed Version- which adds many more features!
© Infopop Corporation (formerly Madrona Park, Inc.), 1998 - 2000.