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)
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?
inline bool wxStyleHasBorder(long style)
{

View File

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

View File

@@ -727,70 +727,63 @@ bool wxFrame::OS2Create(
, long ulStyle
)
{
ULONG ulPmFlags = 0;
ULONG ulExtraFlags = 0;
ULONG ulTempFlags = FCF_TITLEBAR |
FCF_SYSMENU |
FCF_MINBUTTON |
FCF_MAXBUTTON |
FCF_SIZEBORDER |
FCF_ICON |
FCF_MENU |
FCF_ACCELTABLE |
FCF_SHELLPOSITION |
FCF_TASKLIST;
ULONG ulPmFlags = 0L;
ULONG ulExtraFlags = 0L;
ULONG ulTempFlags = FCF_STANDARD;
m_hDefaultIcon = (WXHICON) (wxSTD_FRAME_ICON ? wxSTD_FRAME_ICON : wxDEFAULT_FRAME_ICON);
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;
if (ulPmFlags & ulTempFlags)
if (ulStyle == wxDEFAULT_FRAME_STYLE)
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
//

View File

@@ -68,7 +68,15 @@ wxIcon::wxIcon(
, 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
,nDesiredWidth
,nDesiredHeight

View File

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

View File

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

View File

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