More framework updates

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@6403 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
David Webster
2000-03-02 22:13:38 +00:00
parent 294f6bcbdb
commit 914589c26c
8 changed files with 259 additions and 157 deletions

View File

@@ -196,6 +196,9 @@ WXDLLEXPORT extern wxString wxGetWindowClass(WXHWND hWnd);
// is, for mainly historical reasons, signed) // is, for mainly historical reasons, signed)
WXDLLEXPORT extern WXWORD wxGetWindowId(WXHWND hWnd); WXDLLEXPORT extern WXWORD wxGetWindowId(WXHWND hWnd);
// Convert a PM Error code to a string
WXDLLEXPORT extern wxString wxPMErrorToStr(ERRORID vError);
// Does this window style specify any border? // Does this window style specify any border?
inline bool wxStyleHasBorder(long style) inline bool wxStyleHasBorder(long style)
{ {

View File

@@ -119,6 +119,16 @@ bool wxApp::Initialize(
HAB vHab HAB vHab
) )
{ {
//
// OS2 has to have an anchorblock
//
vHab = WinInitialize(0);
if (!vHab)
return FALSE;
else
vHabmain = vHab;
// Some people may wish to use this, but // Some people may wish to use this, but
// probably it shouldn't be here by default. // probably it shouldn't be here by default.
#ifdef __WXDEBUG__ #ifdef __WXDEBUG__
@@ -188,100 +198,110 @@ bool wxApp::RegisterWindowClasses(
) )
{ {
APIRET rc; APIRET rc;
ERRORID vError = 0L;
wxString sError;
if ((rc = ::WinRegisterClass( vHab if ((rc = ::WinRegisterClass( vHab
,wxFrameClassName ,wxFrameClassName
,(PFNWP)wxWndProc ,(PFNWP)wxWndProc
,CS_SIZEREDRAW | CS_SYNCPAINT | CS_HITTEST | CS_CLIPCHILDREN | CS_FRAME ,CS_SIZEREDRAW | CS_SYNCPAINT | CS_FRAME
,0 ,0
)) != 0) )) != 0)
{ {
wxLogLastError("RegisterClass(frame)"); vError = ::WinGetLastError(vHab);
sError = wxPMErrorToStr(vError);
wxLogLastError(sError);
return FALSE; return FALSE;
} }
if (!::WinRegisterClass( vHab if ((rc = ::WinRegisterClass( vHab
,wxFrameClassNameNoRedraw ,wxFrameClassNameNoRedraw
,(PFNWP)wxWndProc ,(PFNWP)wxWndProc
,CS_HITTEST | CS_CLIPCHILDREN | CS_FRAME ,CS_FRAME
,0 ,0
)) )) != 0)
{ {
wxLogLastError("RegisterClass(no redraw frame)"); vError = ::WinGetLastError(vHab);
sError = wxPMErrorToStr(vError);
wxLogLastError(sError);
return FALSE; return FALSE;
} }
if (!::WinRegisterClass( vHab if ((rc = ::WinRegisterClass( vHab
,wxMDIFrameClassName ,wxMDIFrameClassName
,(PFNWP)wxWndProc ,(PFNWP)wxWndProc
,CS_SIZEREDRAW | CS_SYNCPAINT | CS_HITTEST | CS_CLIPCHILDREN | CS_FRAME ,CS_SIZEREDRAW | CS_SYNCPAINT | CS_FRAME
,0 ,0
)) )) != 0)
{ {
wxLogLastError("RegisterClass(MDI parent)"); vError = ::WinGetLastError(vHab);
sError = wxPMErrorToStr(vError);
wxLogLastError(sError);
return FALSE; return FALSE;
} }
if (!::WinRegisterClass( vHab if ((rc = ::WinRegisterClass( vHab
,wxMDIFrameClassNameNoRedraw ,wxMDIFrameClassNameNoRedraw
,(PFNWP)wxWndProc ,(PFNWP)wxWndProc
,CS_HITTEST | CS_CLIPCHILDREN | CS_FRAME ,CS_FRAME
,0 ,0
)) )) != 0)
{ {
wxLogLastError("RegisterClass(no redraw MDI parent)"); vError = ::WinGetLastError(vHab);
sError = wxPMErrorToStr(vError);
wxLogLastError(sError);
return FALSE; return FALSE;
} }
if (!::WinRegisterClass( vHab if ((rc = ::WinRegisterClass( vHab
,wxMDIChildFrameClassName ,wxMDIChildFrameClassName
,(PFNWP)wxWndProc ,(PFNWP)wxWndProc
,CS_MOVENOTIFY | CS_SIZEREDRAW | CS_SYNCPAINT | CS_HITTEST | CS_CLIPSIBLINGS | CS_FRAME ,CS_MOVENOTIFY | CS_SIZEREDRAW | CS_SYNCPAINT | CS_HITTEST | CS_FRAME
,0 ,0
)) )) != 0)
{ {
wxLogLastError("RegisterClass(MDI child)"); vError = ::WinGetLastError(vHab);
sError = wxPMErrorToStr(vError);
wxLogLastError(sError);
return FALSE; return FALSE;
} }
if (!::WinRegisterClass( vHab if ((rc = ::WinRegisterClass( vHab
,wxMDIChildFrameClassNameNoRedraw ,wxMDIChildFrameClassNameNoRedraw
,(PFNWP)wxWndProc ,(PFNWP)wxWndProc
,CS_HITTEST | CS_CLIPSIBLINGS | CS_FRAME ,CS_HITTEST | CS_FRAME
,0 ,0
)) )) != 0)
{ {
wxLogLastError("RegisterClass(no redraw MDI child)"); vError = ::WinGetLastError(vHab);
sError = wxPMErrorToStr(vError);
wxLogLastError(sError);
return FALSE; return FALSE;
} }
if (!::WinRegisterClass( vHab if ((rc = ::WinRegisterClass( vHab
,wxPanelClassName ,wxPanelClassName
,(PFNWP)wxWndProc ,(PFNWP)wxWndProc
,CS_MOVENOTIFY | CS_SIZEREDRAW | CS_HITTEST | CS_CLIPSIBLINGS | CS_SAVEBITS | CS_SYNCPAINT ,CS_MOVENOTIFY | CS_SIZEREDRAW | CS_HITTEST | CS_SAVEBITS | CS_SYNCPAINT
,0 ,0
)) )) != 0)
{ {
wxLogLastError("RegisterClass(Panel)"); vError = ::WinGetLastError(vHab);
sError = wxPMErrorToStr(vError);
wxLogLastError(sError);
return FALSE; return FALSE;
} }
if (!::WinRegisterClass( vHab if ((rc = ::WinRegisterClass( vHab
,wxCanvasClassName ,wxCanvasClassName
,(PFNWP)wxWndProc ,(PFNWP)wxWndProc
,CS_MOVENOTIFY | CS_SIZEREDRAW | CS_HITTEST | CS_CLIPSIBLINGS | CS_SAVEBITS | CS_SYNCPAINT ,CS_MOVENOTIFY | CS_SIZEREDRAW | CS_HITTEST | CS_SAVEBITS | CS_SYNCPAINT
,0 ,0
)) )) != 0)
{ {
wxLogLastError("RegisterClass(Canvas)"); vError = ::WinGetLastError(vHab);
sError = wxPMErrorToStr(vError);
wxLogLastError(sError);
return FALSE; return FALSE;
} }
return TRUE; return TRUE;
@@ -483,9 +503,17 @@ int wxEntry(
bool wxApp::OnInitGui() bool wxApp::OnInitGui()
{ {
vHabmain = WinInitialize(0); ERRORID vError;
m_hMq = WinCreateMsgQueue(vHabmain, 0); wxString sError;
m_hMq = WinCreateMsgQueue(vHabmain, 0);
if (!m_hMq)
{
vError = ::WinGetLastError(vHabmain);
sError = wxPMErrorToStr(vError);
wxLogDebug(sError);
return FALSE;
}
return TRUE; return TRUE;
} }

View File

@@ -727,70 +727,63 @@ bool wxFrame::OS2Create(
, long ulStyle , long ulStyle
) )
{ {
ULONG ulPmFlags = 0; ULONG ulPmFlags = 0L;
ULONG ulExtraFlags = 0; ULONG ulExtraFlags = 0L;
ULONG ulTempFlags = FCF_TITLEBAR | ULONG ulTempFlags = FCF_STANDARD;
FCF_SYSMENU |
FCF_MINBUTTON |
FCF_MAXBUTTON |
FCF_SIZEBORDER |
FCF_ICON |
FCF_MENU |
FCF_ACCELTABLE |
FCF_SHELLPOSITION |
FCF_TASKLIST;
m_hDefaultIcon = (WXHICON) (wxSTD_FRAME_ICON ? wxSTD_FRAME_ICON : wxDEFAULT_FRAME_ICON); m_hDefaultIcon = (WXHICON) (wxSTD_FRAME_ICON ? wxSTD_FRAME_ICON : wxDEFAULT_FRAME_ICON);
if ((ulStyle & wxCAPTION) == wxCAPTION) if (ulStyle == wxDEFAULT_FRAME_STYLE)
ulPmFlags = FCF_TASKLIST;
else
ulPmFlags = FCF_NOMOVEWITHOWNER;
if (ulStyle & wxMINIMIZE_BOX)
ulPmFlags |= FCF_MINBUTTON;
if (ulStyle & wxMAXIMIZE_BOX)
ulPmFlags |= FCF_MAXBUTTON;
if (ulStyle & wxTHICK_FRAME)
ulPmFlags |= FCF_DLGBORDER;
if (ulStyle & wxSYSTEM_MENU)
ulPmFlags |= FCF_SYSMENU;
if ((ulStyle & wxMINIMIZE) || (ulStyle & wxICONIZE))
ulPmFlags |= WS_MINIMIZED;
if (ulStyle & wxMAXIMIZE)
ulPmFlags |= WS_MAXIMIZED;
if (ulStyle & wxCAPTION)
ulPmFlags |= FCF_TASKLIST;
if (ulStyle & wxCLIP_CHILDREN)
{
// Invalid for frame windows under PM
}
//
// Keep this in wxFrame because it saves recoding this function
// in wxTinyFrame
//
#if wxUSE_ITSY_BITSY
if (ulStyle & wxTINY_CAPTION_VERT)
ulExtraFlags |= kVertCaption;
if (ulStyle & wxTINY_CAPTION_HORIZ)
ulExtraFlags |= kHorzCaption;
#else
if (ulStyle & wxTINY_CAPTION_VERT)
ulPmFlags |= FCF_TASKLIST;
if (ulStyle & wxTINY_CAPTION_HORIZ)
ulPmFlags |= FCF_TASKLIST;
#endif
if ((ulStyle & wxTHICK_FRAME) == 0)
ulPmFlags |= FCF_BORDER;
if (ulStyle & wxFRAME_TOOL_WINDOW)
ulExtraFlags = kFrameToolWindow;
if (ulStyle & wxSTAY_ON_TOP)
ulPmFlags |= FCF_SYSMODAL;
if (ulPmFlags & ulTempFlags)
ulPmFlags = FCF_STANDARD; ulPmFlags = FCF_STANDARD;
else
{
if ((ulStyle & wxCAPTION) == wxCAPTION)
ulPmFlags = FCF_TASKLIST;
else
ulPmFlags = FCF_NOMOVEWITHOWNER;
if (ulStyle & wxMINIMIZE_BOX)
ulPmFlags |= FCF_MINBUTTON;
if (ulStyle & wxMAXIMIZE_BOX)
ulPmFlags |= FCF_MAXBUTTON;
if (ulStyle & wxTHICK_FRAME)
ulPmFlags |= FCF_DLGBORDER;
if (ulStyle & wxSYSTEM_MENU)
ulPmFlags |= FCF_SYSMENU;
if ((ulStyle & wxMINIMIZE) || (ulStyle & wxICONIZE))
ulPmFlags |= WS_MINIMIZED;
if (ulStyle & wxMAXIMIZE)
ulPmFlags |= WS_MAXIMIZED;
if (ulStyle & wxCAPTION)
ulPmFlags |= FCF_TASKLIST;
if (ulStyle & wxCLIP_CHILDREN)
{
// Invalid for frame windows under PM
}
//
// Keep this in wxFrame because it saves recoding this function
// in wxTinyFrame
//
#if wxUSE_ITSY_BITSY
if (ulStyle & wxTINY_CAPTION_VERT)
ulExtraFlags |= kVertCaption;
if (ulStyle & wxTINY_CAPTION_HORIZ)
ulExtraFlags |= kHorzCaption;
#else
if (ulStyle & wxTINY_CAPTION_VERT)
ulPmFlags |= FCF_TASKLIST;
if (ulStyle & wxTINY_CAPTION_HORIZ)
ulPmFlags |= FCF_TASKLIST;
#endif
if ((ulStyle & wxTHICK_FRAME) == 0)
ulPmFlags |= FCF_BORDER;
if (ulStyle & wxFRAME_TOOL_WINDOW)
ulExtraFlags = kFrameToolWindow;
if (ulStyle & wxSTAY_ON_TOP)
ulPmFlags |= FCF_SYSMODAL;
}
// //
// Clear the visible flag, we always call show // Clear the visible flag, we always call show
// //

View File

@@ -68,7 +68,15 @@ wxIcon::wxIcon(
, int nDesiredHeight , int nDesiredHeight
) )
{ {
LoadFile( rIconFile //
// A very poor hack, but we have to have separate icon files from windows
// So we have a modified name where replace the last three characters
// with os2. Also need the extension.
//
wxString sOs2Name = rIconFile.Mid(0, rIconFile.Length() - 3);
sOs2Name += "Os2.ico";
LoadFile( sOs2Name
,lFlags ,lFlags
,nDesiredWidth ,nDesiredWidth
,nDesiredHeight ,nDesiredHeight

View File

@@ -915,7 +915,7 @@ $(WXDIR)\lib\wxos22.lib: $(OS2LIBOBJS2)
ilib $(LIBFLAGS) $@ @<< ilib $(LIBFLAGS) $@ @<<
$**; $**;
<< <<
del *.obj # del *.obj
$(WXDIR)\lib\wx.lib: \ $(WXDIR)\lib\wx.lib: \
$D\dummy.obj \ $D\dummy.obj \
@@ -933,14 +933,14 @@ $(WXDIR)\lib\wx.lib: \
ilib $(LIBFLAGS) $@ @<< ilib $(LIBFLAGS) $@ @<<
$**; $**;
<< <<
del $(COMTEMPTGT1) # del $(COMTEMPTGT1)
del $(COMTEMPTGT2) # del $(COMTEMPTGT2)
del $(COMTEMPTGT3) # del $(COMTEMPTGT3)
del $(GENTEMPTGT) # del $(GENTEMPTGT)
del $(HTMLTEMPTGT) # del $(HTMLTEMPTGT)
del $(NONESTEMPTGT) # del $(NONESTEMPTGT)
del $(OS2TEMPTGT1) # del $(OS2TEMPTGT1)
del $(OS2TEMPTGT2) # del $(OS2TEMPTGT2)
!else !else

View File

@@ -180,17 +180,17 @@ void wxMenuItem::Enable(
if (m_isEnabled == bEnable) if (m_isEnabled == bEnable)
return; return;
if (bEnable) if (bEnable)
bOk = ::WinSendMsg( GetHMenuOf(m_parentMenu) bOk = (bool)::WinSendMsg( GetHMenuOf(m_parentMenu)
,MM_SETITEMATTR ,MM_SETITEMATTR
,MPFROM2SHORT(GetRealId(), TRUE) ,MPFROM2SHORT(GetRealId(), TRUE)
,MPFROM2SHORT(MIA_DISABLED, MIA_DISABLED) ,MPFROM2SHORT(MIA_DISABLED, MIA_DISABLED)
); );
else else
bOk = ::WinSendMsg( GetHMenuOf(m_parentMenu) bOk = (bool)::WinSendMsg( GetHMenuOf(m_parentMenu)
,MM_SETITEMATTR ,MM_SETITEMATTR
,MPFROM2SHORT(GetRealId(), TRUE) ,MPFROM2SHORT(GetRealId(), TRUE)
,MPFROM2SHORT(MIA_DISABLED, FALSE) ,MPFROM2SHORT(MIA_DISABLED, FALSE)
); );
if (!bOk) if (!bOk)
{ {
wxLogLastError("EnableMenuItem"); wxLogLastError("EnableMenuItem");
@@ -208,17 +208,17 @@ void wxMenuItem::Check(
if (m_isChecked == bCheck) if (m_isChecked == bCheck)
return; return;
if (bCheck) if (bCheck)
bOk = ::WinSendMsg( GetHMenuOf(m_parentMenu) bOk = (bool)::WinSendMsg( GetHMenuOf(m_parentMenu)
,MM_SETITEMATTR ,MM_SETITEMATTR
,MPFROM2SHORT(GetRealId(), TRUE) ,MPFROM2SHORT(GetRealId(), TRUE)
,MPFROM2SHORT(MIA_CHECKED, MIA_CHECKED) ,MPFROM2SHORT(MIA_CHECKED, MIA_CHECKED)
); );
else else
bOk = ::WinSendMsg( GetHMenuOf(m_parentMenu) bOk = (bool)::WinSendMsg( GetHMenuOf(m_parentMenu)
,MM_SETITEMATTR ,MM_SETITEMATTR
,MPFROM2SHORT(GetRealId(), TRUE) ,MPFROM2SHORT(GetRealId(), TRUE)
,MPFROM2SHORT(MIA_CHECKED, FALSE) ,MPFROM2SHORT(MIA_CHECKED, FALSE)
); );
if (!bOk) if (!bOk)
{ {
wxLogLastError("EnableMenuItem"); wxLogLastError("EnableMenuItem");
@@ -250,7 +250,7 @@ void wxMenuItem::SetText(
USHORT uId = GetRealId(); USHORT uId = GetRealId();
MENUITEM vItem; MENUITEM vItem;
USHORT uFlagsOld; USHORT uFlagsOld;
if (!::WinSendMsg( hMenu if (!::WinSendMsg( hMenu
,MM_QUERYITEM ,MM_QUERYITEM
,MPFROM2SHORT(uId, TRUE) ,MPFROM2SHORT(uId, TRUE)

View File

@@ -817,3 +817,62 @@ WXWORD WXDLLEXPORT wxGetWindowId(
return ::WinQueryWindowUShort((HWND)hWnd, QWS_ID); return ::WinQueryWindowUShort((HWND)hWnd, QWS_ID);
} }
wxString WXDLLEXPORT wxPMErrorToStr(
ERRORID vError
)
{
wxString sError;
//
// Remove the high order byte -- it is useless
//
vError &= 0x0000ffff;
switch(vError)
{
case PMERR_INVALID_HWND:
sError = wxT("Invalid window handle specified");
break;
case PMERR_INVALID_FLAG:
sError = wxT("Invalid flag bit set");
break;
case PMERR_NO_MSG_QUEUE:
sError = wxT("No message queue available");
break;
case PMERR_INVALID_PARM:
sError = wxT("Parameter contained invalid data");
break;
case PMERR_INVALID_PARAMETERS:
sError = wxT("Parameter value is out of range");
break;
case PMERR_PARAMETER_OUT_OF_RANGE:
sError = wxT("Parameter value is out of range");
break;
case PMERR_INVALID_INTEGER_ATOM:
sError = wxT("Not a valid atom");
break;
case PMERR_INVALID_HATOMTBL:
sError = wxT("Atom table handle is invalid");
break;
case PMERR_INVALID_ATOM_NAME:
sError = wxT("Not a valid atom name");
break;
case PMERR_ATOM_NAME_NOT_FOUND:
sError = wxT("Valid name format, but cannot find name in atom table");
break;
default:
sError = wxT("Unknown error");
}
return(sError);
} // end of wxPMErrorToStr

View File

@@ -2327,6 +2327,8 @@ bool wxWindow::OS2Create(
, WXDWORD dwExtendedStyle // Port compatability only , WXDWORD dwExtendedStyle // Port compatability only
) )
{ {
ERRORID vError;
wxString sError;
int nX1 = CW_USEDEFAULT; int nX1 = CW_USEDEFAULT;
int nY1 = 0; int nY1 = 0;
int nWidth1 = CW_USEDEFAULT; int nWidth1 = CW_USEDEFAULT;
@@ -2350,6 +2352,8 @@ bool wxWindow::OS2Create(
nWidth1 = vParentRect.xRight - vParentRect.xLeft; nWidth1 = vParentRect.xRight - vParentRect.xLeft;
nHeight1 = vParentRect.yTop - vParentRect.yBottom; nHeight1 = vParentRect.yTop - vParentRect.yBottom;
} }
else
hParent = HWND_DESKTOP;
if (nX > -1) if (nX > -1)
nX1 = nX; nX1 = nX;
@@ -2373,7 +2377,7 @@ bool wxWindow::OS2Create(
PDLGTEMPLATE pDlgt; PDLGTEMPLATE pDlgt;
::DosGetResource(0L, RT_DIALOG, vId, (PPVOID)&pDlgt); ::DosGetResource(0L, RT_DIALOG, vId, (PPVOID)&pDlgt);
m_hWnd = (WXHWND)::WinCreateDlg( pParent->GetHWND() m_hWnd = (WXHWND)::WinCreateDlg( hParent
,NULLHANDLE ,NULLHANDLE
,(PFNWP)wxDlgProc ,(PFNWP)wxDlgProc
,pDlgt ,pDlgt
@@ -2381,8 +2385,11 @@ bool wxWindow::OS2Create(
); );
if (m_hWnd == 0) if (m_hWnd == 0)
{ {
wxLogError(_("Can't find dummy dialog template!\n" vError = ::WinGetLastError(vHabmain);
"Check resource include path for finding wx.rc.")); sError = wxPMErrorToStr(vError);
wxLogError("Can't find dummy dialog template!\n"
"Check resource include path for finding wx.rc.\n"
"Error: %s\n", sError);
return FALSE; return FALSE;
} }
@@ -2398,7 +2405,9 @@ bool wxWindow::OS2Create(
,SWP_MOVE | SWP_SIZE | SWP_NOREDRAW ,SWP_MOVE | SWP_SIZE | SWP_NOREDRAW
)); ));
{ {
wxLogLastError(wxT("MoveWindow")); vError = ::WinGetLastError(vHabmain);
sError = wxPMErrorToStr(vError);
wxLogError("MoveWindow, error: %s\n", sError);
} }
} }
else else
@@ -2447,7 +2456,9 @@ bool wxWindow::OS2Create(
); );
if (!m_hWnd) if (!m_hWnd)
{ {
wxLogError("Can't create window of class %s!\n", zWclass); vError = ::WinGetLastError(vHabmain);
sError = wxPMErrorToStr(vError);
wxLogError("Can't create window of class %s!. Error: %s\n", zWclass, sError);
return FALSE; return FALSE;
} }
} }