more framework fixes for menu displays
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@6778 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -552,6 +552,9 @@ void wxFrame::SetMenuBar(
|
|||||||
wxMenuBar* pMenuBar
|
wxMenuBar* pMenuBar
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
ERRORID vError;
|
||||||
|
wxString sError;
|
||||||
|
|
||||||
if (!pMenuBar)
|
if (!pMenuBar)
|
||||||
{
|
{
|
||||||
DetachMenuBar();
|
DetachMenuBar();
|
||||||
@@ -578,6 +581,22 @@ void wxFrame::SetMenuBar(
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Set the parent and owner of the menubar to be the frame
|
||||||
|
//
|
||||||
|
if (!::WinSetParent(m_hMenu, GetHwnd(), FALSE))
|
||||||
|
{
|
||||||
|
vError = ::WinGetLastError(vHabmain);
|
||||||
|
sError = wxPMErrorToStr(vError);
|
||||||
|
wxLogError("Error setting parent for submenu. Error: %s\n", sError);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!::WinSetOwner(m_hMenu, GetHwnd()))
|
||||||
|
{
|
||||||
|
vError = ::WinGetLastError(vHabmain);
|
||||||
|
sError = wxPMErrorToStr(vError);
|
||||||
|
wxLogError("Error setting parent for submenu. Error: %s\n", sError);
|
||||||
|
}
|
||||||
InternalSetMenuBar();
|
InternalSetMenuBar();
|
||||||
|
|
||||||
m_frameMenuBar = pMenuBar;
|
m_frameMenuBar = pMenuBar;
|
||||||
|
@@ -215,29 +215,38 @@ bool wxMenu::DoInsertOrAppend(
|
|||||||
{
|
{
|
||||||
ERRORID vError;
|
ERRORID vError;
|
||||||
wxString sError;
|
wxString sError;
|
||||||
|
MENUITEM vItem;
|
||||||
|
|
||||||
#if wxUSE_ACCEL
|
#if wxUSE_ACCEL
|
||||||
UpdateAccel(pItem);
|
UpdateAccel(pItem);
|
||||||
#endif // wxUSE_ACCEL
|
#endif // wxUSE_ACCEL
|
||||||
|
|
||||||
|
memset(&vItem, '\0', sizeof(vItem));
|
||||||
|
|
||||||
//
|
//
|
||||||
// If "Break" has just been called, insert a menu break before this item
|
// If "Break" has just been called, insert a menu break before this item
|
||||||
// (and don't forget to reset the flag)
|
// (and don't forget to reset the flag)
|
||||||
//
|
//
|
||||||
if (m_bDoBreak)
|
if (m_bDoBreak)
|
||||||
{
|
{
|
||||||
m_vMenuData.afStyle |= MIS_BREAK;
|
vItem.afStyle |= MIS_BREAK;
|
||||||
m_bDoBreak = FALSE;
|
m_bDoBreak = FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Menu items that are being inserted into a submenu MUST have a
|
||||||
|
// MENUITEM structure separate from the parent menu so we must use
|
||||||
|
// a local vItem not the object's m_vMenuItem as that is the MENUITEM
|
||||||
|
// associated with the parent submenu.
|
||||||
|
//
|
||||||
if (pItem->IsSeparator())
|
if (pItem->IsSeparator())
|
||||||
{
|
{
|
||||||
m_vMenuData.afStyle |= MIS_SEPARATOR;
|
vItem.afStyle |= MIS_SEPARATOR;
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Id is the numeric id for normal menu items and HMENU for submenus as
|
// Id is the numeric id for normal menu items and HMENU for submenus as
|
||||||
// required by ::WinInsertMenu() API
|
// required by ::MM_INSERTITEM message API
|
||||||
//
|
//
|
||||||
|
|
||||||
wxMenu* pSubmenu = pItem->GetSubMenu();
|
wxMenu* pSubmenu = pItem->GetSubMenu();
|
||||||
@@ -247,13 +256,13 @@ bool wxMenu::DoInsertOrAppend(
|
|||||||
wxASSERT_MSG(pSubmenu->GetHMenu(), wxT("invalid submenu"));
|
wxASSERT_MSG(pSubmenu->GetHMenu(), wxT("invalid submenu"));
|
||||||
pSubmenu->SetParent(this);
|
pSubmenu->SetParent(this);
|
||||||
|
|
||||||
m_vMenuData.iPosition = 0; // submenus have a 0 position
|
vItem.iPosition = 0; // submenus have a 0 position
|
||||||
m_vMenuData.id = (USHORT)pSubmenu->GetHMenu();
|
vItem.id = (USHORT)pSubmenu->GetHMenu();
|
||||||
m_vMenuData.afStyle |= MIS_SUBMENU | MIS_TEXT;
|
vItem.afStyle |= MIS_SUBMENU | MIS_TEXT;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_vMenuData.id = pItem->GetId();
|
vItem.id = pItem->GetId();
|
||||||
}
|
}
|
||||||
|
|
||||||
BYTE* pData;
|
BYTE* pData;
|
||||||
@@ -264,10 +273,11 @@ bool wxMenu::DoInsertOrAppend(
|
|||||||
//
|
//
|
||||||
// Want to get {Measure|Draw}Item messages?
|
// Want to get {Measure|Draw}Item messages?
|
||||||
// item draws itself, pass pointer to it in data parameter
|
// item draws itself, pass pointer to it in data parameter
|
||||||
// Will eventually need to set the image handle somewhere into m_vMenuData.hItem
|
// Will eventually need to set the image handle somewhere into vItem.hItem
|
||||||
//
|
//
|
||||||
m_vMenuData.afStyle |= MIS_OWNERDRAW;
|
vItem.afStyle |= MIS_OWNERDRAW;
|
||||||
pData = (BYTE*)pItem;
|
pData = (BYTE*)pItem;
|
||||||
|
// vItem.hItem = ????
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
#endif
|
#endif
|
||||||
@@ -275,28 +285,28 @@ bool wxMenu::DoInsertOrAppend(
|
|||||||
//
|
//
|
||||||
// Menu is just a normal string (passed in data parameter)
|
// Menu is just a normal string (passed in data parameter)
|
||||||
//
|
//
|
||||||
m_vMenuData.afStyle |= MIS_TEXT;
|
vItem.afStyle |= MIS_TEXT;
|
||||||
pData = (char*)pItem->GetText().c_str();
|
pData = (char*)pItem->GetText().c_str();
|
||||||
}
|
}
|
||||||
|
|
||||||
APIRET rc;
|
APIRET rc;
|
||||||
|
|
||||||
m_vMenuData.hwndSubMenu = NULLHANDLE;
|
if (pSubmenu == NULL)
|
||||||
m_vMenuData.hItem = NULLHANDLE;
|
|
||||||
|
|
||||||
//
|
|
||||||
// -1 means append at end
|
|
||||||
//
|
|
||||||
if (nPos == (size_t)-1)
|
|
||||||
{
|
{
|
||||||
m_vMenuData.iPosition = MIT_END;
|
//
|
||||||
}
|
// -1 means append at end
|
||||||
else
|
//
|
||||||
{
|
if (nPos == (size_t)-1)
|
||||||
m_vMenuData.iPosition = nPos;
|
{
|
||||||
|
vItem.iPosition = MIT_END;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
vItem.iPosition = nPos;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
rc = (APIRET)::WinSendMsg(GetHmenu(), MM_INSERTITEM, (MPARAM)&m_vMenuData, (MPARAM)pData);
|
rc = (APIRET)::WinSendMsg(GetHmenu(), MM_INSERTITEM, (MPARAM)&vItem, (MPARAM)pData);
|
||||||
if (rc == MIT_MEMERROR || rc == MIT_ERROR)
|
if (rc == MIT_MEMERROR || rc == MIT_ERROR)
|
||||||
{
|
{
|
||||||
vError = ::WinGetLastError(vHabmain);
|
vError = ::WinGetLastError(vHabmain);
|
||||||
@@ -660,6 +670,26 @@ WXHMENU wxMenuBar::Create()
|
|||||||
APIRET rc;
|
APIRET rc;
|
||||||
ERRORID vError;
|
ERRORID vError;
|
||||||
wxString sError;
|
wxString sError;
|
||||||
|
MENUITEM vItem;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Set the parent and owner of the submenues to be the menubar, not the desktop
|
||||||
|
//
|
||||||
|
if (!::WinSetParent(m_menus[i]->m_vMenuData.hwndSubMenu, hMenuBar, FALSE))
|
||||||
|
{
|
||||||
|
vError = ::WinGetLastError(vHabmain);
|
||||||
|
sError = wxPMErrorToStr(vError);
|
||||||
|
wxLogError("Error setting parent for submenu. Error: %s\n", sError);
|
||||||
|
return NULLHANDLE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!::WinSetOwner(m_menus[i]->m_vMenuData.hwndSubMenu, hMenuBar))
|
||||||
|
{
|
||||||
|
vError = ::WinGetLastError(vHabmain);
|
||||||
|
sError = wxPMErrorToStr(vError);
|
||||||
|
wxLogError("Error setting parent for submenu. Error: %s\n", sError);
|
||||||
|
return NULLHANDLE;
|
||||||
|
}
|
||||||
|
|
||||||
rc = (APIRET)::WinSendMsg(hMenuBar, MM_INSERTITEM, (MPARAM)&m_menus[i]->m_vMenuData, (MPARAM)m_titles[i].c_str());
|
rc = (APIRET)::WinSendMsg(hMenuBar, MM_INSERTITEM, (MPARAM)&m_menus[i]->m_vMenuData, (MPARAM)m_titles[i].c_str());
|
||||||
if (rc == MIT_MEMERROR || rc == MIT_ERROR)
|
if (rc == MIT_MEMERROR || rc == MIT_ERROR)
|
||||||
|
Reference in New Issue
Block a user