GetMenu()???
От: Аноним  
Дата: 23.07.02 04:44
Оценка:
--------------------------------------------------------------------------------
Пытаюсь подгружать битмапы в меню (MDI приложение).
Следую таким путем:
1.создаю битмапы
2.получаю через GetMenu() указатель на меню
3.вызываю SetMenuItemBitmaps(ID_MYMENU, MF_BYCOMMAND,
&m_Bitmap1, &m_Bitmap2));
Получается следующая кака:
если все это произвожу в OnCreate(...) CMainFrame класса, то все отлично,
если делаю абсолютно то же самое, но в OnCreate(..) CChildFrame — получаю ошибку при вызове SetMenuItemBitmap ()

Читаю в МСДНе, что результат GetMenu() не определен для дочерних (child) окон. Как быть-то???
Рисунок-то надо подгрузить именно в меню CChildFrame..
Наведите на путь истинный :))

Заранее благодарен LOL
Re: GetMenu()???
От: Mink Россия  
Дата: 23.07.02 12:22
Оценка:
Здравствуйте Аноним, Вы писали:

А>--------------------------------------------------------------------------------

А> Пытаюсь подгружать битмапы в меню (MDI приложение).
А>Следую таким путем:
А>1.создаю битмапы
А>2.получаю через GetMenu() указатель на меню
А>3.вызываю SetMenuItemBitmaps(ID_MYMENU, MF_BYCOMMAND,
А>&m_Bitmap1, &m_Bitmap2));
А>Получается следующая кака:
А>если все это произвожу в OnCreate(...) CMainFrame класса, то все отлично,
А>если делаю абсолютно то же самое, но в OnCreate(..) CChildFrame — получаю ошибку при вызове SetMenuItemBitmap ()

А>Читаю в МСДНе, что результат GetMenu() не определен для дочерних (child) окон. Как быть-то???

А>Рисунок-то надо подгрузить именно в меню CChildFrame..
А>Наведите на путь истинный :))

Что ты понимаешь под "меню CChildFrame"? Как написано в том же МСДНе у них нет меню :)
Если ты имеешь в виду, что рисунок в меню надо подгрузить при открытии дочернего окна, то определи в у себя в MainFrame метод, котрый эти рисунки загружает и вызывай его из OnCreate(..) CChildFrame.
Сила, она в ньютонах
Re: GetMenu()???
От: Аноним  
Дата: 23.07.02 16:55
Оценка:
Здравствуйте Аноним, Вы писали:

А>--------------------------------------------------------------------------------

А> Пытаюсь подгружать битмапы в меню (MDI приложение).
А>Следую таким путем:
А>1.создаю битмапы
А>2.получаю через GetMenu() указатель на меню
А>3.вызываю SetMenuItemBitmaps(ID_MYMENU, MF_BYCOMMAND,
А>&m_Bitmap1, &m_Bitmap2));
А>Получается следующая кака:
А>если все это произвожу в OnCreate(...) CMainFrame класса, то все отлично,
А>если делаю абсолютно то же самое, но в OnCreate(..) CChildFrame — получаю ошибку при вызове SetMenuItemBitmap ()

А>Читаю в МСДНе, что результат GetMenu() не определен для дочерних (child) окон. Как быть-то???

А>Рисунок-то надо подгрузить именно в меню CChildFrame..
А>Наведите на путь истинный :))

А>Заранее благодарен LOL


Вобщем написал что-то похожее....

Попроьуй сделать тоже самое для нескольких документов, так чтобы они изменяли один пункт, допустим ID_FILE_NEW. Результат можешь сюда отписать :)


BOOL CChildFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
// загружаем битовые маски
bitmap1.LoadBitmap(IDB_BITMAP1);
bitmap2.LoadBitmap(IDB_BITMAP2);

// получаем системные размеры маркера
int cx = ::GetSystemMetrics(SM_CXMENUCHECK);
int cy = ::GetSystemMetrics(SM_CYMENUCHECK);

// приводим текущие размеры битовых массивов к системным
bitmap1.SetBitmapDimension(cx, cy);
bitmap2.SetBitmapDimension(cx, cy);

return CMDIChildWnd::OnCreateClient(lpcs, pContext);
}

void CChildFrame::OnMDIActivate(BOOL bActivate, CWnd* pActivateWnd, CWnd* pDeactivateWnd)
{
CMDIChildWnd::OnMDIActivate(bActivate, pActivateWnd, pDeactivateWnd);

if ( bActivate )
{
CMenu *pViewMenu = NULL;
CMenu *pTopMenu = AfxGetMainWnd()->GetMenu();
int iPos;

// ищем элемент меню
for (iPos = pTopMenu->GetMenuItemCount()-1; iPos >= 0; iPos--)
{
CMenu* pMenu = pTopMenu->GetSubMenu(iPos);
if (pMenu && pMenu->GetMenuItemID(0) == ID_MENU_FROM_BITMAP)
{
pViewMenu = pMenu;
break;
}
}
ASSERT(pViewMenu != NULL);

// устанавливаем новые маркеры для отмеченного и
// неотмеченного состояний
pViewMenu->SetMenuItemBitmaps(ID_MENU_FROM_BITMAP, MF_BYCOMMAND,
&bitmap1, &bitmap2);
}
else
{
}
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.