Re[3]: Создать меню динамически
От: oleg3d  
Дата: 21.03.07 13:11
Оценка: 2 (1)
Пождойдет...
void CAppList::OnInitMenuPopup(CMenu* pPopupMenu, UINT nIndex, BOOL bSysMenu){
Сюда пишем инсерт итем делете
на подобие (как у меня)
pPopupMenu->EnableMenuItem(IDM_DETAIL, enable ? MF_ENABLED : MF_GRAYED);
}


Здравствуйте, Niswn, Вы писали:

N>Так не подойдет, к сожалению. Я не знаю изначально сколько у меня пунков меню и не знаю их названия. Это все возвращается специальными функциями, поэтому жестко прописать в ресурсы я их не могу. Надо сформировать меню динамически.


N>Здравствуйте, oleg3d, Вы писали:


O>>У меня так работает

O>>BOOL CAppList::OnInitDialog(){
O>> CMyDialog::OnInitDialog();

O>> if (!m_dlgCommandBar.Create(this) ||

O>> !m_dlgCommandBar.InsertMenuBar(IDR_APPLIST))
O>> {
O>> MessageBox(L"can not create menu",0,0);
O>> return FALSE; // fail to create
O>> }

O>> List.init();

O>> pExeLock = new ExeLock();
O>> LoadPrograms();

O>> return TRUE;

O>>}


O>>IDR_APPLIST MENU DISCARDABLE

O>>BEGIN
O>> MENUITEM "Ok", IDM_OK
O>> POPUP "Option"
O>> BEGIN
O>> MENUITEM "Add", IDM_ADD
O>> MENUITEM "Delete", IDM_DELETE
O>> MENUITEM "Detail", IDM_DETAIL
O>> END
O>>END

O>>IDR_APPLIST SHMENUBAR DISCARDABLE

O>>BEGIN
O>> IDR_APPLIST, 2,
O>> I_IMAGENONE, IDM_OK, TBSTATE_ENABLED, TBSTYLE_BUTTON | TBSTYLE_AUTOSIZE, IDS_OK, 0, NOMENU,
O>> I_IMAGENONE, IDM_OPTION, TBSTATE_ENABLED, TBSTYLE_AUTOSIZE | TBSTYLE_DROPDOWN, IDS_OPTION, 0, 1,
O>>END
Re[5]: Создать меню динамически
От: Alexander Shargin Россия RSDN.ru
Дата: 21.03.07 18:36
Оценка: 2 (1)
Здравствуйте, Niswn, Вы писали:


N>А для главного меню: добавить, удалить, переименовать пункты как-нибудь возможно?


Вот тут есть кое-что:
http://www.pocketpcdn.com/articles/articles.php?&atb.set(c_id)=72&atb.set(a_id)=6992&atb.perform(details)=&

Обычно я для простоты не добавляю/удаляю пункты, а просто назначаю ненужной кнопке пустой текст и дизаблю её (назначаю TBSTATE_INDETERMINATE). Когда нужна снова — назначаю нужный текст и енаблю.
--
Я думал, ты огромный страшный Бажище,
А ты недоучка, крохотный Бажик...
Создать меню динамически
От: Niswn  
Дата: 16.03.07 12:51
Оценка:
Сабж вообще возможен? Если возможен, то как?

Пишу на VS2005 под MFC для Pocket PC 2003.
Пытаюсь создать меню динамически (т.е не используя ресурсов):


   if (!m_menu)
   {
      m_menu = new CMenu;
      m_menu->CreatePopupMenu();
      m_menu->AppendMenu(0, ID_RM_END, "End");
   }

   if (!m_menu_sub)
   {
      m_menu_sub = new CMenu;
      m_menu_sub->CreatePopupMenu();
      m_menu_sub->AppendMenu(0, ID_RM_CMD1, "Menu1");
      m_menu_sub->AppendMenu(0, ID_RM_CMD2, "Menu2");      
      m_menu->AppendMenu(MF_POPUP | MF_STRING, (UINT)m_menu_sub->m_hMenu, "Menu");
   }

   SHMENUBARINFO info;
 
   HWND hwnd = SHFindMenuBar(m_hWnd);
   if (hwnd) DeleteObject(hwnd);

   memset((void*)&info, 0, sizeof(SHMENUBARINFO));
   info.cbSize = sizeof(SHMENUBARINFO);
   info.hwndParent = m_hWnd;
   info.dwFlags = SHCMBF_HMENU;
   info.nToolBarId = (UINT)m_menu->m_hMenu;
   info.hInstRes = ::AfxGetInstanceHandle();
   info.nBmpId = 0;
   info.cBmpImages = 0;
   SHCreateMenuBar(&info);


Никаких ошибок не выдает, но и никакого меню не отображает.
Перепахал весь этот форум, есть подобные сообщения, но они все без ответов.
В инете тоже глухо.
Неужели нельзя обойтись без ресурсов при создании меню?
ICQ: 326084932
Re: Создать меню динамически
От: oleg3d  
Дата: 19.03.07 09:55
Оценка:
У меня так работает
BOOL CAppList::OnInitDialog(){
CMyDialog::OnInitDialog();

if (!m_dlgCommandBar.Create(this) ||
!m_dlgCommandBar.InsertMenuBar(IDR_APPLIST))
{
MessageBox(L"can not create menu",0,0);
return FALSE; // fail to create
}

List.init();
pExeLock = new ExeLock();
LoadPrograms();

return TRUE;
}


IDR_APPLIST MENU DISCARDABLE
BEGIN
MENUITEM "Ok", IDM_OK
POPUP "Option"
BEGIN
MENUITEM "Add", IDM_ADD
MENUITEM "Delete", IDM_DELETE
MENUITEM "Detail", IDM_DETAIL
END
END

IDR_APPLIST SHMENUBAR DISCARDABLE
BEGIN
IDR_APPLIST, 2,
I_IMAGENONE, IDM_OK, TBSTATE_ENABLED, TBSTYLE_BUTTON | TBSTYLE_AUTOSIZE, IDS_OK, 0, NOMENU,
I_IMAGENONE, IDM_OPTION, TBSTATE_ENABLED, TBSTYLE_AUTOSIZE | TBSTYLE_DROPDOWN, IDS_OPTION, 0, 1,
END


Здравствуйте, Niswn, Вы писали:

N>Сабж вообще возможен? Если возможен, то как?


N>Пишу на VS2005 под MFC для Pocket PC 2003.

N>Пытаюсь создать меню динамически (т.е не используя ресурсов):


N>
N>   if (!m_menu)
N>   {
N>      m_menu = new CMenu;
N>      m_menu->CreatePopupMenu();
N>      m_menu->AppendMenu(0, ID_RM_END, "End");
N>   }

N>   if (!m_menu_sub)
N>   {
N>      m_menu_sub = new CMenu;
N>      m_menu_sub->CreatePopupMenu();
N>      m_menu_sub->AppendMenu(0, ID_RM_CMD1, "Menu1");
N>      m_menu_sub->AppendMenu(0, ID_RM_CMD2, "Menu2");      
N>      m_menu->AppendMenu(MF_POPUP | MF_STRING, (UINT)m_menu_sub->m_hMenu, "Menu");
N>   }

N>   SHMENUBARINFO info;
 
N>   HWND hwnd = SHFindMenuBar(m_hWnd);
N>   if (hwnd) DeleteObject(hwnd);

N>   memset((void*)&info, 0, sizeof(SHMENUBARINFO));
N>   info.cbSize = sizeof(SHMENUBARINFO);
N>   info.hwndParent = m_hWnd;
N>   info.dwFlags = SHCMBF_HMENU;
N>   info.nToolBarId = (UINT)m_menu->m_hMenu;
N>   info.hInstRes = ::AfxGetInstanceHandle();
N>   info.nBmpId = 0;
N>   info.cBmpImages = 0;
N>   SHCreateMenuBar(&info);
N>


N>Никаких ошибок не выдает, но и никакого меню не отображает.

N>Перепахал весь этот форум, есть подобные сообщения, но они все без ответов.
N>В инете тоже глухо.
N>Неужели нельзя обойтись без ресурсов при создании меню?
Re[2]: Создать меню динамически
От: Niswn  
Дата: 21.03.07 08:39
Оценка:
Так не подойдет, к сожалению. Я не знаю изначально сколько у меня пунков меню и не знаю их названия. Это все возвращается специальными функциями, поэтому жестко прописать в ресурсы я их не могу. Надо сформировать меню динамически.

Здравствуйте, oleg3d, Вы писали:

O>У меня так работает

O>BOOL CAppList::OnInitDialog(){
O> CMyDialog::OnInitDialog();

O> if (!m_dlgCommandBar.Create(this) ||

O> !m_dlgCommandBar.InsertMenuBar(IDR_APPLIST))
O> {
O> MessageBox(L"can not create menu",0,0);
O> return FALSE; // fail to create
O> }

O> List.init();

O> pExeLock = new ExeLock();
O> LoadPrograms();

O> return TRUE;

O>}


O>IDR_APPLIST MENU DISCARDABLE

O>BEGIN
O> MENUITEM "Ok", IDM_OK
O> POPUP "Option"
O> BEGIN
O> MENUITEM "Add", IDM_ADD
O> MENUITEM "Delete", IDM_DELETE
O> MENUITEM "Detail", IDM_DETAIL
O> END
O>END

O>IDR_APPLIST SHMENUBAR DISCARDABLE

O>BEGIN
O> IDR_APPLIST, 2,
O> I_IMAGENONE, IDM_OK, TBSTATE_ENABLED, TBSTYLE_BUTTON | TBSTYLE_AUTOSIZE, IDS_OK, 0, NOMENU,
O> I_IMAGENONE, IDM_OPTION, TBSTATE_ENABLED, TBSTYLE_AUTOSIZE | TBSTYLE_DROPDOWN, IDS_OPTION, 0, 1,
O>END
ICQ: 326084932
Re[4]: Создать меню динамически
От: Niswn  
Дата: 21.03.07 16:42
Оценка:
Здравствуйте, oleg3d, Вы писали:

O>Пождойдет...

O>void CAppList::OnInitMenuPopup(CMenu* pPopupMenu, UINT nIndex, BOOL bSysMenu){
O> Сюда пишем инсерт итем делете
O> на подобие (как у меня)
O> pPopupMenu->EnableMenuItem(IDM_DETAIL, enable ? MF_ENABLED : MF_GRAYED);
O>}


Спасибо.
А для главного меню: добавить, удалить, переименовать пункты как-нибудь возможно?
ICQ: 326084932
Re[6]: Создать меню динамически
От: Niswn  
Дата: 22.03.07 07:17
Оценка:
Здравствуйте, Alexander Shargin, Вы писали:

AS>Здравствуйте, Niswn, Вы писали:



N>>А для главного меню: добавить, удалить, переименовать пункты как-нибудь возможно?


AS>Вот тут есть кое-что:

AS>http://www.pocketpcdn.com/articles/articles.php?&atb.set(c_id)=72&atb.set(a_id)=6992&atb.perform(details)=&

AS>Обычно я для простоты не добавляю/удаляю пункты, а просто назначаю ненужной кнопке пустой текст и дизаблю её (назначаю TBSTATE_INDETERMINATE). Когда нужна снова — назначаю нужный текст и енаблю.


То что надо!!! Спасибо.
ICQ: 326084932
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.