d rasool Ответов: 3

contextmenu в дочернем фрейме задачи sdi - mfc


привет.
у меня есть программа mfc - sdi.я разбираю свое представление на 3 подвида с помощью статического разделителя и в одном из представлений создаю дочерний фрейм, чтобы на нем была закрепляемая панель инструментов.
вот мои коды:

1.Вот как я создаю дочерний фрейм:
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
	// TODO: Add your specialized code here and/or call the base class
if(!m_wndSpMain.CreateStatic(this, 2, 1, WS_CHILD | WS_VISIBLE, AFX_IDW_PANE_FIRST)){
TRACE0("Failed to CreateStaticSplitter\n");
return FALSE;
}
if(!m_wndSpMain.CreateView(0, 0, RUNTIME_CLASS(COutputView), CSize(100, 100), pContext)){
TRACE0("Failed to create first pane\n");
return FALSE;
}
if(!m_wndSpSub.CreateStatic(&m_wndSpMain, 1, 2,WS_CHILD | WS_VISIBLE, m_wndSpMain.IdFromRowCol(1, 0))){
TRACE0("Failed to create nested splitter\n");
return FALSE;
}
if(!m_wndSpSub.CreateView(0, 0, RUNTIME_CLASS(CTab), CSize(200, 0), pContext)){
TRACE0("Failed to create second pane\n");
return FALSE;
}
//****************************************************************************
//the most important codes are here:
//****************************************************************************
pContext->m_pNewViewClass = RUNTIME_CLASS(CMainView);
if(!m_wndSpSub.CreateView(0, 1, RUNTIME_CLASS(CmainSPFrame), CSize(0, 0), pContext)){
TRACE0("Failed to create third pane\n");
return FALSE;
}
	return TRUE;//CFrameWndEx::OnCreateClient(lpcs, pContext);
}

как вы можете видеть, у меня есть класс Cview (CMainview) на моем дочернем фрейме (CmainSPFrame).

2.и вот как я создаю контекстное меню в своем классе CMainview:

добавить контекстное меню в приложение
void CLedMatrixAnimatorApp::PreLoadState()
{
GetContextMenuManager()->AddMenu(_T("First View menu"), IDR_FIRSTVIEW);
}


добавить контекстное меню для просмотра
void CMainView::OnContextMenu(CWnd* /*pWnd*/, CPoint point)
{
#ifndef SHARED_HANDLERS

theApp.GetContextMenuManager()->ShowPopupMenu(IDR_FIRSTVIEW,
	                                              point.x, point.y, this);
#endif
}


теперь это моя проблема:
после того,как я добавляю обработчики меню в свой класс CMainView, кажется, что сообщение ON_COMMAND не отправляется в veiw, и все пункты меню все еще серые, не хватает ли чего-то?

извините за мой плохой английский и надеюсь,что вы ответите на мой вопрос.
с наилучшими пожеланиями - D rasool

3 Ответов

Рейтинг:
20

d rasool

karstenk спасибо за ответ.
я решаю эту проблему.при добавлении contextmenu для просмотра :

theApp.GetContextMenuManager()->ShowPopupMenu(IDR_FIRSTVIEW,
	                            point.x, point.y, this, TRUE);


Рейтинг:
2

Mubeen_D

theApp.GetContextMenuManager()->ShowPopupMenu(IDR_FIRSTVIEW,
	                            point.x, point.y, this,TRUE FALSE);


Последний параметр задается как TRUE, это должно быть ЛОЖНЫЙ поскольку вы хотите использовать макросы ON_COMMAND, определенные для других пунктов меню в
BEGIN_MESSAGE_MAP
.


CHill60

ОП уже заявил что проблема решена и выложил код который они использовали

Mubeen_D

Chil60, люди, как правило, повторно посещают страницу с аналогичными вопросами. На самом деле у меня была та же проблема выше. После некоторых раскопок я обнаружил, что решение, которое было "решено", не было правильным. Я отправил исправление.

Рейтинг:
0

KarstenK

эти пункты отключаются, если они имеют серый цвет.

Проверьте определения и обработчики сообщений в классе "this".


d rasool

извините, я новичок в программировании windows, не могли бы вы объяснить немного больше?

KarstenK

посмотрите в ресурсе, если элементы отключены или через код.

Убедитесь, что значения #define каждый раз имеют уникальное значение.

d rasool

большое спасибо за помощь мне

d rasool

#определяет r ok и ресурсы элемента включены.
я должен сказать тебе еще одну вещь:
когда я добавляю эти пункты меню на панель инструментов(добавить кнопки панели инструментов с идентификаторами menuitem) в этом представлении, я могу нажимать кнопки, и ничего не происходит!
я имею в виду, что панели инструментов работают нормально, и только элементы contextmenu серые.