no message

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@6643 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
David Webster
2000-03-13 05:43:53 +00:00
parent 6e395e9c60
commit a06066343d
6 changed files with 373 additions and 187 deletions

View File

@@ -205,7 +205,7 @@ bool wxApp::RegisterWindowClasses(
,wxFrameClassName
,(PFNWP)wxWndProc
,CS_SIZEREDRAW | CS_SYNCPAINT
,0
,sizeof(ULONG)
))
{
vError = ::WinGetLastError(vHab);
@@ -321,19 +321,13 @@ void wxApp::CleanUp()
wxLog::DontCreateOnDemand();
// this will flush the old messages if any
#if (!(defined(__VISAGECPP__) && __IBMCPP__ < 400))
// another VA 3.0 memory problem here
delete wxLog::SetActiveTarget(new wxLogStderr);
#endif
#endif // wxUSE_LOG
// One last chance for pending objects to be cleaned up
wxTheApp->DeletePendingObjects();
#if (!(defined(__VISAGECPP__) && __IBMCPP__ < 400))
// another VA 3.0 memory problem here
wxModule::CleanUpModules();
#endif
#if wxUSE_WX_RESOURCES
wxCleanUpResourceSystem();
@@ -345,10 +339,7 @@ void wxApp::CleanUp()
// by deleting the bitmap list before g_globalCursor goes out of scope
// (double deletion of the cursor).
wxSetCursor(wxNullCursor);
#if (!(defined(__VISAGECPP__) && __IBMCPP__ < 400))
// another VA 3.0 memory problem here
delete g_globalCursor;
#endif
g_globalCursor = NULL;
wxDeleteStockObjects();
@@ -364,7 +355,7 @@ void wxApp::CleanUp()
delete[] wxBuffer;
wxBuffer = NULL;
//// WINDOWS-SPECIFIC CLEANUP
//// PM-SPECIFIC CLEANUP
// wxSetKeyboardHook(FALSE);

View File

@@ -23,83 +23,100 @@ IMPLEMENT_DYNAMIC_CLASS(wxColour, wxObject)
wxColour::wxColour ()
{
m_isInit = FALSE;
m_pixel = 0;
m_red = m_blue = m_green = 0;
}
m_bIsInit = FALSE;
m_vPixel = 0;
m_cRed = m_cBlue = m_cGreen = 0;
} // end of wxColour::wxColour
wxColour::wxColour (unsigned char r, unsigned char g, unsigned char b)
wxColour::wxColour (
unsigned char cRed
, unsigned char cGreen
, unsigned char cBlue
)
{
m_red = r;
m_green = g;
m_blue = b;
m_isInit = TRUE;
// m_pixel = PALETTERGB (m_red, m_green, m_blue);
}
m_cRed = cRed;
m_cGreen = cGreen;
m_cBlue = cBlue;
m_bIsInit = TRUE;
m_vPixel = PALETTERGB (m_cRed, m_cGreen, m_cBlue);
} // end of wxColour::wxColour
wxColour::wxColour (const wxColour& col)
wxColour::wxColour (
const wxColour& rCol
)
{
m_red = col.m_red;
m_green = col.m_green;
m_blue = col.m_blue;
m_isInit = col.m_isInit;
m_pixel = col.m_pixel;
}
m_cRed = rCol.m_cRed;
m_cGreen = rCol.m_cGreen;
m_cBlue = rCol.m_cBlue;
m_bIsInit = rCol.m_bIsInit;
m_vPixel = rCol.m_vPixel;
} // end of wxColour::wxColour
wxColour& wxColour::operator =(const wxColour& col)
wxColour& wxColour::operator =(
const wxColour& rCol
)
{
m_red = col.m_red;
m_green = col.m_green;
m_blue = col.m_blue;
m_isInit = col.m_isInit;
m_pixel = col.m_pixel;
return *this;
}
m_cRed = rCol.m_cRed;
m_cGreen = rCol.m_cGreen;
m_cBlue = rCol.m_cBlue;
m_bIsInit = rCol.m_bIsInit;
m_vPixel = rCol.m_vPixel;
return *this;
} // end of wxColour& wxColour::operator =
void wxColour::InitFromName(const wxString& col)
void wxColour::InitFromName(
const wxString& sCol
)
{
wxColour *the_colour = wxTheColourDatabase->FindColour (col);
if (the_colour)
wxColour* pTheColour = wxTheColourDatabase->FindColour(sCol);
if (pTheColour)
{
m_red = the_colour->Red ();
m_green = the_colour->Green ();
m_blue = the_colour->Blue ();
m_isInit = TRUE;
m_cRed = pTheColour->Red();
m_cGreen = pTheColour->Green();
m_cBlue = pTheColour->Blue();
m_bIsInit = TRUE;
}
else
{
m_red = 0;
m_green = 0;
m_blue = 0;
m_isInit = FALSE;
m_cRed = 0;
m_cGreen = 0;
m_cBlue = 0;
m_bIsInit = FALSE;
}
/* TODO
m_pixel = PALETTERGB (m_red, m_green, m_blue);
*/
}
m_vPixel = PALETTERGB (m_cRed, m_cGreen, m_cBlue);
} // end of wxColour::InitFromName
wxColour::~wxColour ()
{
}
} // end of wxColour::~wxColour
void wxColour::Set (unsigned char r, unsigned char g, unsigned char b)
void wxColour::Set (
unsigned char cRed
, unsigned char cGreen
, unsigned char cBlue
)
{
m_red = r;
m_green = g;
m_blue = b;
m_isInit = TRUE;
/* TODO
m_pixel = PALETTERGB (m_red, m_green, m_blue);
*/
}
m_cRed = cRed;
m_cGreen = cGreen;
m_cBlue = cBlue;
m_bIsInit = TRUE;
m_vPixel = PALETTERGB (m_cRed, m_cGreen, m_cBlue);
} // end of wxColour::Set
//
// Obsolete
//
#if WXWIN_COMPATIBILITY
void wxColour::Get (unsigned char *r, unsigned char *g, unsigned char *b) const
void wxColour::Get (
unsigned char* pRed
, unsigned char* pGreen
, unsigned char* pBlue
) const
{
*r = m_red;
*g = m_green;
*b = m_blue;
}
*Red = m_cRed;
*Green = m_cGreen;
*Blue = m_cBlue;
} // end of wxColour::Get
#endif

View File

@@ -343,16 +343,37 @@ void wxFrame::DoShowWindow(
)
{
HWND hClient;
HWND hTitlebar = NULLHANDLE;
HWND hHScroll = NULLHANDLE;
HWND hVScroll = NULLHANDLE;
HWND hMenuBar = NULLHANDLE;
SWP vSwp;
SWP vSwpTitlebar;
SWP vSwpVScroll;
SWP vSwpHScroll;
SWP vSwpMenu;
//
// Send anything to initialize the frame
//
::WinSendMsg( GetHwnd()
,WM_UPDATEFRAME
,(MPARAM)FCF_MENU
,(MPARAM)0
);
hClient = ::WinWindowFromID(GetHwnd(), FID_CLIENT);
WinQueryWindowPos(GetHwnd(), &vSwp);
hClient = WinWindowFromID(GetHwnd(), FID_CLIENT);
hTitlebar = WinWindowFromID(GetHwnd(), FID_TITLEBAR);
WinQueryWindowPos(hTitlebar, &vSwpTitlebar);
hHScroll = WinWindowFromID(GetHwnd(), FID_HORZSCROLL);
WinQueryWindowPos(hHScroll, &vSwpHScroll);
hVScroll = WinWindowFromID(GetHwnd(), FID_VERTSCROLL);
WinQueryWindowPos(hVScroll, &vSwpVScroll);
hMenuBar = WinWindowFromID(GetHwnd(), FID_MENU);
WinQueryWindowPos(hMenuBar, &vSwpMenu);
WinSetWindowPos( hClient
,HWND_TOP
,SV_CXSIZEBORDER
,(SV_CYSIZEBORDER - 1) + vSwpHScroll.cy
,vSwp.cx - ((SV_CXSIZEBORDER * 2) + vSwpVScroll.cx)
,vSwp.cy - ((SV_CYSIZEBORDER * 2) + 1 + vSwpTitlebar.cy + vSwpMenu.cy + vSwpHScroll.cy)
,SWP_SIZE | SWP_MOVE
);
::WinShowWindow(GetHwnd(), (BOOL)bShowCmd);
::WinShowWindow(hClient, (BOOL)bShowCmd);
} // end of wxFrame::DoShowWindow
@@ -371,14 +392,7 @@ bool wxFrame::Show(
::WinQueryWindowPos(GetHwnd(), &vSwp);
m_bIconized = vSwp.fl & SWP_MINIMIZE;
::WinSetWindowPos( (HWND) GetHWND()
,HWND_TOP
,vSwp.x
,vSwp.y
,vSwp.cx
,vSwp.cy
,SWP_ZORDER | SWP_ACTIVATE | SWP_SHOW | SWP_MOVE
);
::WinEnableWindow(GetHwnd(), TRUE);
vEvent.SetEventObject(this);
GetEventHandler()->ProcessEvent(vEvent);
}
@@ -402,6 +416,7 @@ bool wxFrame::Show(
,vSwp.cy
,SWP_ZORDER | SWP_ACTIVATE | SWP_SHOW | SWP_MOVE
);
::WinEnableWindow(hWndParent, TRUE);
}
}
return TRUE;
@@ -747,16 +762,23 @@ bool wxFrame::OS2Create(
HWND hTitlebar = NULLHANDLE;
HWND hHScroll = NULLHANDLE;
HWND hVScroll = NULLHANDLE;
HWND hMenuBar = NULLHANDLE;
HWND hMenu1 = NULLHANDLE;
HWND hMenu2 = NULLHANDLE;
HWND hFrame = NULLHANDLE;
SWP vSwp;
SWP vSwpTitlebar;
SWP vSwpVScroll;
SWP vSwpHScroll;
SWP vSwpMenu;
RGB2 vRgb;
m_hDefaultIcon = (WXHICON) (wxSTD_FRAME_ICON ? wxSTD_FRAME_ICON : wxDEFAULT_FRAME_ICON);
memset(&vSwp, '\0', sizeof(SWP));
memset(&vSwpTitlebar, '\0', sizeof(SWP));
memset(&vSwpVScroll, '\0', sizeof(SWP));
memset(&vSwpHScroll, '\0', sizeof(SWP));
if (pParent)
hParent = GetWinHwnd(pParent);
else
@@ -844,8 +866,8 @@ bool wxFrame::OS2Create(
// Create the client window. We must call the API from here rather than
// the static base class create because we need a separate handle
//
if ((hClient = ::WinCreateWindow( GetHwnd() // Frame is parent
,zWclass // Custom client class
if ((hClient = ::WinCreateWindow( hFrame // Frame is parent
,wxFrameClassName
,NULL // Window title
,0 // No styles
,0, 0, 0, 0 // Window position
@@ -861,7 +883,7 @@ bool wxFrame::OS2Create(
//
// Send anything to initialize the frame
//
::WinSendMsg( GetHwnd()
::WinSendMsg( hFrame
,WM_UPDATEFRAME
,(MPARAM)FCF_TASKLIST
,(MPARAM)0
@@ -870,7 +892,7 @@ bool wxFrame::OS2Create(
//
// Now size everything. If adding a menu the client will need to be resized.
//
if (!::WinSetWindowPos( GetHwnd()
if (!::WinSetWindowPos( hFrame
,HWND_TOP
,nX
,nY
@@ -880,21 +902,34 @@ bool wxFrame::OS2Create(
))
return FALSE;
WinQueryWindowPos(GetHwnd(), &vSwp);
WinQueryWindowPos(hFrame, &vSwp);
//
// Set the client window's background, otherwise it is transparent!
//
wxColour vColour = wxSystemSettings::GetSystemColour(wxSYS_COLOUR_WINDOW);
vRgb.bRed = (BYTE)vColour.Red();
vRgb.bGreen = (BYTE)vColour.Green();
vRgb.bBlue = (BYTE)vColour.Blue();
WinSetPresParam( hClient
,PP_BACKGROUNDCOLOR
,(ULONG)sizeof(RGB2)
,(PVOID)&vRgb
);
if (ulCreateFlags & FCF_TITLEBAR)
{
hTitlebar = WinWindowFromID(GetHwnd(), FID_TITLEBAR);
hTitlebar = WinWindowFromID(hFrame, FID_TITLEBAR);
WinQueryWindowPos(hTitlebar, &vSwpTitlebar);
}
if (ulCreateFlags & FCF_HORZSCROLL)
{
hHScroll = WinWindowFromID(GetHwnd(), FID_HORZSCROLL);
hHScroll = WinWindowFromID(hFrame, FID_HORZSCROLL);
WinQueryWindowPos(hHScroll, &vSwpHScroll);
}
if (ulCreateFlags & FCF_VERTSCROLL)
{
hVScroll = WinWindowFromID(GetHwnd(), FID_VERTSCROLL);
hVScroll = WinWindowFromID(hFrame, FID_VERTSCROLL);
WinQueryWindowPos(hVScroll, &vSwpVScroll);
}
if (!::WinSetWindowPos( hClient
@@ -907,6 +942,7 @@ bool wxFrame::OS2Create(
))
return FALSE;
WinQueryWindowPos(hClient, &vSwp);
::WinShowWindow(hClient, TRUE);
return TRUE;
} // end of wxFrame::OS2Create

View File

@@ -86,10 +86,16 @@ void wxMenu::Init()
,0L
,NULL
,NULL
)) != 0)
)) == 0)
{
wxLogLastError("WinLoadMenu");
}
m_vMenuData.iPosition = 0;
m_vMenuData.afStyle = MIS_SUBMENU | MIS_TEXT;
m_vMenuData.afAttribute = (USHORT)0;
m_vMenuData.id = (USHORT)0;
m_vMenuData.hwndSubMenu = m_hMenu;
m_vMenuData.hItem = NULLHANDLE;
//
// If we have a title, insert it in the beginning of the menu
@@ -207,6 +213,9 @@ bool wxMenu::DoInsertOrAppend(
, size_t nPos
)
{
ERRORID vError;
wxString sError;
#if wxUSE_ACCEL
UpdateAccel(pItem);
#endif // wxUSE_ACCEL
@@ -270,47 +279,29 @@ bool wxMenu::DoInsertOrAppend(
pData = (char*)pItem->GetText().c_str();
}
BOOL bOk;
APIRET rc;
m_vMenuData.hwndSubMenu = NULLHANDLE;
m_vMenuData.hItem = NULLHANDLE;
//
// -1 means this is a sub menu not a menuitem. We must create a window for it.
// Submenus are also attached to a menubar so its parent and owner should be the handle of the menubar.
// -1 means append at end
//
if (nPos == (size_t)-1)
{
HWND hMenuBar;
if (m_menuBar)
hMenuBar = GetWinHwnd(m_menuBar);
else
hMenuBar = HWND_DESKTOP;
HWND hSubMenu = ::WinCreateWindow( hMenuBar // parent
,WC_MENU // type
,"Menu" // a generic name
,0L // no style flag
,0L,0L,0L,0L // no position
,hMenuBar // no owner
,HWND_TOP // always on top
,0L // no ID needed for dynamic creation
,NULL // no control data
,NULL // no presentation params
);
m_vMenuData.iPosition = 0;
m_vMenuData.hwndSubMenu = hSubMenu;
m_vMenuData.hItem = NULLHANDLE;
bOk = (bool)::WinSendMsg(GetHmenu(), MM_INSERTITEM, (MPARAM)&m_vMenuData, (MPARAM)pItem->GetText().c_str());
m_vMenuData.iPosition = MIT_END;
}
else
{
m_vMenuData.iPosition = nPos;
m_vMenuData.hwndSubMenu = NULLHANDLE;
m_vMenuData.hItem = NULLHANDLE;
bOk = (bool)::WinSendMsg(GetHmenu(), MM_INSERTITEM, (MPARAM)&m_vMenuData, (MPARAM)pItem->GetText().c_str());
}
if (!bOk)
rc = (APIRET)::WinSendMsg(GetHmenu(), MM_INSERTITEM, (MPARAM)&m_vMenuData, (MPARAM)pData);
if (rc == MIT_MEMERROR || rc == MIT_ERROR)
{
vError = ::WinGetLastError(vHabmain);
sError = wxPMErrorToStr(vError);
wxLogError("Error inserting or appending a menuitem. Error: %s\n", sError);
wxLogLastError("Insert or AppendMenu");
return FALSE;
}
@@ -625,6 +616,7 @@ WXHMENU wxMenuBar::Create()
{
MENUITEM vItem;
HWND hFrame;
HWND hMenuBar = NULLHANDLE;
if (m_hMenu != 0 )
return m_hMenu;
@@ -662,19 +654,13 @@ WXHMENU wxMenuBar::Create()
{
size_t nCount = GetMenuCount();
hMenuBar = GetHwnd();
for (size_t i = 0; i < nCount; i++)
{
vItem.iPosition = 0;
vItem.afStyle = MIS_SUBMENU | MIS_TEXT;
vItem.afAttribute = (USHORT)0;
vItem.id = (USHORT)0;
vItem.hwndSubMenu = m_menus[i]->GetHMenu();
vItem.hItem = NULLHANDLE;
::WinSendMsg(GetHmenu(), MM_INSERTITEM, (MPARAM)&vItem, (MPARAM)m_titles[i].c_str());
::WinSendMsg(hMenuBar, MM_INSERTITEM, (MPARAM)&m_menus[i]->m_vMenuData, (MPARAM)m_titles[i].c_str());
}
}
return m_hMenu;
return hMenuBar;
} // end of wxMenuBar::Create
// ---------------------------------------------------------------------------

View File

@@ -24,17 +24,141 @@
#include "wx/window.h"
#include "wx/os2/private.h"
// TODO: see ::SystemParametersInfo for all sorts of Windows settings.
// Different args are required depending on the id. How does this differ
// from GetSystemMetric, and should it? Perhaps call it GetSystemParameter
// and pass an optional void* arg to get further info.
// Should also have SetSystemParameter.
// Also implement WM_WININICHANGE (NT) / WM_SETTINGCHANGE (Win95)
wxColour wxSystemSettings::GetSystemColour(int index)
wxColour wxSystemSettings::GetSystemColour(
int nIndex
)
{
// TODO
return wxColour();
}
COLORREF vRef;
wxColour vCol;
switch (nIndex)
{
//
// PM actually has values for these
//
case wxSYS_COLOUR_WINDOW:
vRef = (ULONG)::WinQuerySysColor( HWND_DESKTOP
,SYSCLR_WINDOW
,0L
);
vCol.Set( GetRValue(vRef)
,GetGValue(vRef)
,GetBValue(vRef)
);
return vCol;
break;
case wxSYS_COLOUR_WINDOWFRAME:
vRef = (ULONG)::WinQuerySysColor( HWND_DESKTOP
,SYSCLR_WINDOWFRAME
,0L
);
vCol.Set( GetRValue(vRef)
,GetGValue(vRef)
,GetBValue(vRef)
);
return vCol;
break;
case wxSYS_COLOUR_MENUTEXT:
vRef = (ULONG)::WinQuerySysColor( HWND_DESKTOP
,SYSCLR_MENUTEXT
,0L
);
vCol.Set( GetRValue(vRef)
,GetGValue(vRef)
,GetBValue(vRef)
);
break;
case wxSYS_COLOUR_BTNFACE:
vRef = (ULONG)::WinQuerySysColor( HWND_DESKTOP
,SYSCLR_BUTTONDEFAULT
,0L
);
vCol.Set( GetRValue(vRef)
,GetGValue(vRef)
,GetBValue(vRef)
);
return vCol;
break;
case wxSYS_COLOUR_BTNSHADOW:
vRef = (ULONG)::WinQuerySysColor( HWND_DESKTOP
,SYSCLR_BUTTONMIDDLE
,0L
);
vCol.Set( GetRValue(vRef)
,GetGValue(vRef)
,GetBValue(vRef)
);
return vCol;
break;
case wxSYS_COLOUR_BTNHIGHLIGHT:
vRef = (ULONG)::WinQuerySysColor( HWND_DESKTOP
,SYSCLR_BUTTONLIGHT
,0L
);
vCol.Set( GetRValue(vRef)
,GetGValue(vRef)
,GetBValue(vRef)
);
return vCol;
break;
//
// We'll have to just give values to these
//
case wxSYS_COLOUR_LISTBOX:
case wxSYS_COLOUR_CAPTIONTEXT:
return(*wxWHITE);
break;
case wxSYS_COLOUR_WINDOWTEXT:
case wxSYS_COLOUR_INACTIVECAPTIONTEXT:
case wxSYS_COLOUR_BTNTEXT:
case wxSYS_COLOUR_INFOTEXT:
return(*wxBLACK);
break;
//
// We should customize these to look like other ports
//
case wxSYS_COLOUR_ACTIVECAPTION:
case wxSYS_COLOUR_ACTIVEBORDER:
case wxSYS_COLOUR_HIGHLIGHT:
return(*wxBLUE);
break;
case wxSYS_COLOUR_SCROLLBAR:
case wxSYS_COLOUR_BACKGROUND:
case wxSYS_COLOUR_INACTIVECAPTION:
case wxSYS_COLOUR_MENU:
case wxSYS_COLOUR_INACTIVEBORDER:
case wxSYS_COLOUR_APPWORKSPACE:
case wxSYS_COLOUR_HIGHLIGHTTEXT:
case wxSYS_COLOUR_GRAYTEXT:
case wxSYS_COLOUR_3DDKSHADOW:
case wxSYS_COLOUR_3DLIGHT:
case wxSYS_COLOUR_INFOBK:
return(*wxLIGHT_GREY);
break;
default:
vRef = (ULONG)::WinQuerySysColor( HWND_DESKTOP
,SYSCLR_WINDOW
,0L
);
vCol.Set( GetRValue(vRef)
,GetGValue(vRef)
,GetBValue(vRef)
);
return vCol;
break;
}
return(vCol);
} // end of wxSystemSettings::GetSystemColour
wxFont wxSystemSettings::GetSystemFont(int index)
{