Got generic wxListCtrl, wxTreeCtrl working under Windows, wxNotebook almost;

some doc corrections; Win16 dialog crash cured


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@1255 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Julian Smart
1998-12-23 09:58:02 +00:00
parent c238949553
commit f60d0f944a
24 changed files with 178 additions and 61 deletions

View File

@@ -28,6 +28,39 @@ Destructor. If the handler is part of a chain, the destructor will
unlink itself and restore the previous and next handlers so that they point to unlink itself and restore the previous and next handlers so that they point to
each other. each other.
\membersection{wxEvtHandler::Connect}\label{wxevthandlerconnect}
\func{void}{Connect}{\param{int}{ id},
\param{wxEventType }{eventType}, \param{wxObjectEventFunction}{ function},
\param{wxObject*}{ userData = NULL}}
\func{void}{Connect}{\param{int}{ id}, \param{int}{ lastId},
\param{wxEventType }{eventType}, \param{wxObjectEventFunction}{ function},
\param{wxObject*}{ userData = NULL}}
Connects the given function dynamically with the event handler, id and event type. This
is an alternative to the use of static event tables. See the 'dynamic' sample for usage.
\wxheading{Parameters}
\docparam{id}{The identifier (or first of the identifier range) to be associated with the event handler function.}
\docparam{lastId}{The second part of the identifier range to be associated with the event handler function.}
\docparam{eventType}{The event type to be associated with this event handler.}
\docparam{function}{The event handler function.}
\docparam{userData}{Data to be associated with the event table entry.}
\wxheading{Example}
\begin{verbatim}
frame->Connect( wxID_EXIT,
wxEVT_COMMAND_MENU_SELECTED,
(wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) MyFrame::OnQuit );
\end{verbatim}
\membersection{wxEvtHandler::Default}\label{wxevthandlerdefault} \membersection{wxEvtHandler::Default}\label{wxevthandlerdefault}
\func{virtual long}{Default}{\void} \func{virtual long}{Default}{\void}

View File

@@ -76,7 +76,8 @@ Creates a new icon.
Creates an icon from XPM data. Creates an icon from XPM data.
\func{}{wxIcon}{\param{const wxString\& }{name}, \param{long}{ type}} \func{}{wxIcon}{\param{const wxString\& }{name}, \param{long}{ type},
\param{int}{ desiredWidth = -1}, \param{int}{ desiredHeight = -1}}
Loads an icon from a file or resource. Loads an icon from a file or resource.
@@ -88,6 +89,14 @@ Loads an icon from a file or resource.
\docparam{height}{Specifies the height of the icon.} \docparam{height}{Specifies the height of the icon.}
\docparam{desiredWidth}{Specifies the desired width of the icon. This
parameter only has an effect in Windows (32-bit) where icon resources can contain
several icons of different sizes.}
\docparam{desiredWidth}{Specifies the desired height of the icon. This
parameter only has an effect in Windows (32-bit) where icon resources can contain
several icons of different sizes.}
\docparam{depth}{Specifies the depth of the icon. If this is omitted, the display depth of the \docparam{depth}{Specifies the depth of the icon. If this is omitted, the display depth of the
screen is used.} screen is used.}

View File

@@ -3,7 +3,8 @@
A wxPaintDC must be constructed if an application wishes to paint on the A wxPaintDC must be constructed if an application wishes to paint on the
client area of a window from within an {\bf OnPaint} event. client area of a window from within an {\bf OnPaint} event.
This should normally be constructed as a temporary stack object; don't store This should normally be constructed as a temporary stack object; don't store
a wxPaintDC object. a wxPaintDC object. If you have an OnPaint handler, you {\it must} create a wxPaintDC
object within it even if you don't actually use it.
Using wxPaintDC within OnPaint is important because it automatically Using wxPaintDC within OnPaint is important because it automatically
sets the clipping area to the damaged area of the window. Attempts to draw sets the clipping area to the damaged area of the window. Attempts to draw

View File

@@ -15,37 +15,36 @@ Headers: <wx/dataobj.h>, <wx/dropsrc.h and <wx/droptgt.h>>
This overview describes wxWindows support for drag and drop and clipboard This overview describes wxWindows support for drag and drop and clipboard
operations. Both of these topics are discussed here because, in fact, they're operations. Both of these topics are discussed here because, in fact, they're
quite related. Drag and drop and clipboard are just too ways of passing the quite related. Drag and drop and clipboard are just two ways of passing the
data around and so the code required to implement both types of the operations data around and so the code required to implement both types of the operations
is almost the same. is almost the same.
Both operations involve passing some data from one program to another Both operations involve passing some data from one program to another,
(although the data may be received in the same program as well). In the case although the data can be received in the same program as the source. In the case
of clipboard transfer, the data is first places on the clipboard and then of clipboard transfer, the data is first placed on the clipboard and then
pasted into the destination program while for a drag-and-drop operation the pasted into the destination program, while for a drag-and-drop operation the
data object is not stored anywhere but is created when the user starts data object is not stored anywhere but is created when the user starts
dragging and is destroyed as soon as he ends it (whether the operation was dragging and is destroyed as soon as he ends it, whether the operation was
ended successfully or cancelled). ended successfully or cancelled.
To be a {\it drag source}, i.e. to provide the data which may be dragged by To be a {\it drag source}, i.e. to provide the data which may be dragged by
user elsewhere you should implement the following steps: user elsewhere, you should implement the following steps:
\begin{itemize}\itemsep=0pt \begin{itemize}\itemsep=0pt
\item {\bf Preparation:} First of all, the data object must be created and \item {\bf Preparation:} First of all, the data object must be created and
initilized with the data you wish to drag. For example: initialized with the data you wish to drag. For example:
\begin{verbatim} \begin{verbatim}
wxTextDataObject data("This string will be dragged."); wxTextDataObject data("This string will be dragged.");
\end{verbatim} \end{verbatim}
Of course, the data object may contain arbitrary data of any type, but for Of course, the data object may contain arbitrary data of any type, but for
this you should derive your own class from this you should derive your own class from \helpref{wxDataObject}{wxdataobject} overriding all of its pure virtual
\helpref{wxDataObject}{wxdataobject} overriding all of its pure virtual
functions. functions.
\item{\bf Drag start:} To start dragging process (typically in response to a \item{\bf Drag start:} To start dragging process (typically in response to a
mouse click) you must call \helpref{DoDragDrop}{wxdropsourcedodragdrop} mouse click) you must call \helpref{DoDragDrop}{wxdropsourcedodragdrop} function
function of wxDropSource object which should be constructed like this: of wxDropSource object which should be constructed like this:
\begin{verbatim} \begin{verbatim}
wxDropSource dragSource(data, this); wxDropSource dragSource(data, this);
@@ -63,8 +62,8 @@ same drag-and-drop protocol (any program under Windows or any program supporting
under X Windows), the corresponding \helpref{wxDropTarget}{wxdroptarget} methods under X Windows), the corresponding \helpref{wxDropTarget}{wxdroptarget} methods
are called - see below. are called - see below.
\item {\bf Processing the result:} DoDragDrop() returns an {\it effect code} \item {\bf Processing the result:} DoDragDrop() returns an {\it effect code} which
which is one of the values of \helpref{wxDragResult}{wxdragresult} enum. Codes is one of the values of \helpref{wxDragResult}{wxdragresult} enum. Codes
of wxDragError, wxDragNone and wxDragCancel have the obvious meaning and mean of wxDragError, wxDragNone and wxDragCancel have the obvious meaning and mean
that there is nothing to do on the sending end (except of possibly logging the that there is nothing to do on the sending end (except of possibly logging the
error in the first case). wxDragCopy means that the data has been successfully error in the first case). wxDragCopy means that the data has been successfully
@@ -72,10 +71,8 @@ copied and doesn't require any specific actions neither. But wxDragMove is
special because it means that the data must be deleted from where it was special because it means that the data must be deleted from where it was
copied. If it doesn't make sense (dragging selected text from a read-only copied. If it doesn't make sense (dragging selected text from a read-only
file) you should pass FALSE as parameter to DoDragDrop() in the previous step. file) you should pass FALSE as parameter to DoDragDrop() in the previous step.
\end{itemize} \end{itemize}
To be a {\it drop target}, i.e. to receive the data dropped by user you should To be a {\it drop target}, i.e. to receive the data dropped by user you should
follow the instructions below: follow the instructions below:
@@ -91,8 +88,8 @@ or OnDropFiles() method.
\item {\bf Drop:} When the user releases the mouse over a window, wxWindows \item {\bf Drop:} When the user releases the mouse over a window, wxWindows
queries the associated wxDropTarget object if it accepts the data. For queries the associated wxDropTarget object if it accepts the data. For
this, \helpref{GetFormatCount}{wxdroptargetgetformatcount} and this, \helpref{GetFormatCount}{wxdroptargetgetformatcount} and \helpref{GetFormat}{wxdroptargetgetformat} are
\helpref{GetFormat}{wxdroptargetgetformat} are used and if the format is used and if the format is
supported (i.e. is one of returned by GetFormat()), supported (i.e. is one of returned by GetFormat()),
then \helpref{OnDrop}{wxdroptargetondrop} is called. then \helpref{OnDrop}{wxdroptargetondrop} is called.
Otherwise, \helpref{wxDragNone}{stdformat} is returned by DoDragDrop() and Otherwise, \helpref{wxDragNone}{stdformat} is returned by DoDragDrop() and
@@ -102,6 +99,5 @@ nothing happens.
wxDragCopy or wxDragMove depending on the state of the keys (<Ctrl>, <Shift> wxDragCopy or wxDragMove depending on the state of the keys (<Ctrl>, <Shift>
and <Alt>) at the moment of drop. There is currently no way for the drop and <Alt>) at the moment of drop. There is currently no way for the drop
target to change this return code. target to change this return code.
\end{itemize} \end{itemize}

View File

@@ -2,6 +2,16 @@
wxWindows 2.0 for Windows Change Log wxWindows 2.0 for Windows Change Log
------------------------------------ ------------------------------------
Alpha 18, December 23nd 1998
----------------------------
- Win16 support working again (VC++ 1.5)
- Win16 now uses generic wxNotebook, wxListCtrl,
wxTreeCtrl -- more or less working now, although
a little work on wxNotebook is still needed.
Under 16-bit Windows, get assertion when you click
on a tab.
Alpha 17, November 22nd 1998 Alpha 17, November 22nd 1998
---------------------------- ----------------------------

View File

@@ -56,11 +56,8 @@ Visual C++ 1.5 compilation
1. Change directory to wx\src\msw. Type 'nmake -f makefile.dos' to 1. Change directory to wx\src\msw. Type 'nmake -f makefile.dos' to
make the wxWindows core library. make the wxWindows core library.
2. Change directory to wx\samples and type 'nmake -f makefile.dos' 2. Change directory to a sample, such as wx\samples\minimal, and
to make all the samples. You can also make them individually. type 'nmake -f makefile.dos'.
NOTE: 16-bit compilation is not recommended (see issues.txt):
many things are broken, including dialog boxes.
Borland C++ 4.5/5.0 compilation Borland C++ 4.5/5.0 compilation
------------------------------- -------------------------------

View File

@@ -8,7 +8,3 @@ This conflicts with wxUSE_IOSTREAMSH = 0 using MS VC++ 5.0
(crashes the template code). It should be switched off if you (crashes the template code). It should be switched off if you
wish to use wxUSE_IOSTREAMSH = 0. wish to use wxUSE_IOSTREAMSH = 0.
Many things seem to be broken for 16-bit Windows, including
dialogs (crash in wxFindWinFromHandle). The generic tree, list
and notebook controls don't work. The generic wxImageList drawing
function doesn't work (wxDC::SelectObject problem).

View File

@@ -17,7 +17,7 @@
#include "wx/defs.h" #include "wx/defs.h"
#include "wx/object.h" #include "wx/object.h"
#include "wx/imaglist.h" #include "wx/generic/imaglist.h"
#include "wx/control.h" #include "wx/control.h"
#include "wx/timer.h" #include "wx/timer.h"
#include "wx/textctrl.h" #include "wx/textctrl.h"

View File

@@ -20,7 +20,6 @@
#include "wx/wx.h" #include "wx/wx.h"
#endif #endif
#include "wx/tab.h"
#include "test.h" #include "test.h"
// If 1, use a dialog. Otherwise use a frame. // If 1, use a dialog. Otherwise use a frame.
@@ -44,10 +43,9 @@ bool MyApp::OnInit(void)
#else #else
frame = new MyFrame((wxFrame*) NULL, -1, (char *) "Notebook", wxPoint(-1, -1), wxSize(365, 390), wxDEFAULT_FRAME_STYLE); frame = new MyFrame((wxFrame*) NULL, -1, (char *) "Notebook", wxPoint(-1, -1), wxSize(365, 390), wxDEFAULT_FRAME_STYLE);
// Problem with Motif whereby it doesn't size properly unless // Problem with generic wxNotebook implementation whereby it doesn't size properly unless
// you set the size again (to a different size than before, // you set the size again (to a different size than before, since SetSize is optimized)
// since SetSize is optimized) #if defined(__WXMOTIF__) || defined(__WIN16__)
#ifdef __WXMOTIF__
frame->SetSize(-1, -1, 370, 390); frame->SetSize(-1, -1, 370, 390);
#endif #endif

Binary file not shown.

After

Width:  |  Height:  |  Size: 246 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 246 B

View File

@@ -83,7 +83,6 @@ END_EVENT_TABLE()
IMPLEMENT_APP(MyApp) IMPLEMENT_APP(MyApp)
// `Main program' equivalent, creating windows and returning main app frame
bool MyApp::OnInit() bool MyApp::OnInit()
{ {
// Create the main frame window // Create the main frame window
@@ -278,8 +277,15 @@ MyTreeCtrl::MyTreeCtrl(wxWindow *parent, const wxWindowID id,
m_imageListNormal = new wxImageList(16, 16, TRUE); m_imageListNormal = new wxImageList(16, 16, TRUE);
// should correspond to TreeCtrlIcon_xxx enum // should correspond to TreeCtrlIcon_xxx enum
#if defined(__WXMSW__) && defined(__WIN16__)
// This is required in 16-bit Windows mode only because we can't load a specific (16x16)
// icon image, so it comes out blank (using the empty 32x32 icon).
m_imageListNormal->Add(wxBitmap("bitmap1", wxBITMAP_TYPE_BMP_RESOURCE));
m_imageListNormal->Add(wxBitmap("bitmap2", wxBITMAP_TYPE_BMP_RESOURCE));
#else
m_imageListNormal->Add(wxICON(icon1)); m_imageListNormal->Add(wxICON(icon1));
m_imageListNormal->Add(wxICON(icon2)); m_imageListNormal->Add(wxICON(icon2));
#endif
SetImageList(m_imageListNormal); SetImageList(m_imageListNormal);

View File

@@ -5,3 +5,6 @@ aaaa ICON "mondrian.ico"
icon1 ICON "bitmaps\\file1.ico" icon1 ICON "bitmaps\\file1.ico"
icon2 ICON "bitmaps\\folder1.ico" icon2 ICON "bitmaps\\folder1.ico"
bitmap1 BITMAP "bitmaps\\file1.bmp"
bitmap2 BITMAP "bitmaps\\folder1.bmp"

View File

@@ -18,7 +18,7 @@
#pragma hdrstop #pragma hdrstop
#endif #endif
#include "wx/imaglist.h" #include "wx/generic/imaglist.h"
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// wxImageList // wxImageList
@@ -50,7 +50,10 @@ bool wxImageList::Create()
int wxImageList::Add( const wxBitmap &bitmap ) int wxImageList::Add( const wxBitmap &bitmap )
{ {
m_images.Append( new wxBitmap(bitmap) ); if (bitmap.IsKindOf(CLASSINFO(wxIcon)))
m_images.Append( new wxIcon( (const wxIcon&) bitmap ) );
else
m_images.Append( new wxBitmap(bitmap) );
return m_images.Number(); return m_images.Number();
} }
@@ -69,16 +72,22 @@ bool wxImageList::Replace( int index, const wxBitmap &bitmap )
wxCHECK_MSG( node, FALSE, "wrong index in image list" ); wxCHECK_MSG( node, FALSE, "wrong index in image list" );
wxBitmap* newBitmap = NULL;
if (bitmap.IsKindOf(CLASSINFO(wxIcon)))
newBitmap = new wxIcon( (const wxIcon&) bitmap );
else
newBitmap = new wxBitmap(bitmap) ;
if (index == m_images.Number()-1) if (index == m_images.Number()-1)
{ {
m_images.DeleteNode( node ); m_images.DeleteNode( node );
m_images.Append( new wxBitmap(bitmap) ); m_images.Append( newBitmap );
} }
else else
{ {
wxNode *next = node->Next(); wxNode *next = node->Next();
m_images.DeleteNode( node ); m_images.DeleteNode( node );
m_images.Insert( next, new wxBitmap(bitmap) ); m_images.Insert( next, newBitmap );
} }
return TRUE; return TRUE;
@@ -127,7 +136,10 @@ bool wxImageList::Draw( int index, wxDC &dc, int x, int y,
wxBitmap *bm = (wxBitmap*)node->Data(); wxBitmap *bm = (wxBitmap*)node->Data();
dc.DrawBitmap( *bm, x, y, (flags & wxIMAGELIST_DRAW_TRANSPARENT) > 0 ); if (bm->IsKindOf(CLASSINFO(wxIcon)))
dc.DrawIcon( * ((wxIcon*) bm), x, y);
else
dc.DrawBitmap( *bm, x, y, (flags & wxIMAGELIST_DRAW_TRANSPARENT) > 0 );
return TRUE; return TRUE;
} }

View File

@@ -20,7 +20,8 @@
#include "wx/dcscreen.h" #include "wx/dcscreen.h"
#include "wx/app.h" #include "wx/app.h"
#include "wx/listctrl.h" #include "wx/generic/listctrl.h"
#include "wx/generic/imaglist.h"
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// wxListItemData // wxListItemData
@@ -551,6 +552,7 @@ void wxListLineData::DoDraw( wxDC *dc, bool hilight, bool paintBG )
m_bound_hilight.width, m_bound_hilight.height ); m_bound_hilight.width, m_bound_hilight.height );
} }
dc->SetBackgroundMode(wxTRANSPARENT);
if (m_mode == wxLC_REPORT) if (m_mode == wxLC_REPORT)
{ {
wxString s; wxString s;
@@ -741,6 +743,7 @@ void wxListHeaderWindow::OnPaint( wxPaintEvent &WXUNUSED(event) )
int y = 0; int y = 0;
GetClientSize( &w, &h ); GetClientSize( &w, &h );
dc.SetBackgroundMode(wxTRANSPARENT);
dc.SetTextForeground( *wxBLACK ); dc.SetTextForeground( *wxBLACK );
if (m_foregroundColour.Ok()) dc.SetTextForeground( m_foregroundColour ); if (m_foregroundColour.Ok()) dc.SetTextForeground( m_foregroundColour );
@@ -1037,13 +1040,15 @@ void wxListMainWindow::RefreshLine( wxListLineData *line )
void wxListMainWindow::OnPaint( wxPaintEvent &WXUNUSED(event) ) void wxListMainWindow::OnPaint( wxPaintEvent &WXUNUSED(event) )
{ {
// Note: a wxPaintDC must be constructed even if no drawing is
// done (a Windows requirement).
wxPaintDC dc( this );
PrepareDC( dc );
if (m_dirty) return; if (m_dirty) return;
if (m_lines.GetCount() == 0) return; if (m_lines.GetCount() == 0) return;
wxPaintDC dc( this );
PrepareDC( dc );
dc.BeginDrawing(); dc.BeginDrawing();
dc.SetFont( GetFont() ); dc.SetFont( GetFont() );

View File

@@ -52,7 +52,7 @@ BEGIN_EVENT_TABLE(wxNotebook, wxControl)
EVT_MOUSE_EVENTS(wxNotebook::OnMouseEvent) EVT_MOUSE_EVENTS(wxNotebook::OnMouseEvent)
EVT_SET_FOCUS(wxNotebook::OnSetFocus) EVT_SET_FOCUS(wxNotebook::OnSetFocus)
EVT_NAVIGATION_KEY(wxNotebook::OnNavigationKey) EVT_NAVIGATION_KEY(wxNotebook::OnNavigationKey)
EVT_IDLE(wxNotebook::OnIdle) // EVT_IDLE(wxNotebook::OnIdle)
END_EVENT_TABLE() END_EVENT_TABLE()
IMPLEMENT_DYNAMIC_CLASS(wxNotebook, wxControl) IMPLEMENT_DYNAMIC_CLASS(wxNotebook, wxControl)
@@ -108,9 +108,11 @@ bool wxNotebook::Create(wxWindow *parent,
m_windowId = id == -1 ? NewControlId() : id; m_windowId = id == -1 ? NewControlId() : id;
// It's like a normal window... // It's like a normal window...
if (!wxWindow::Create(parent, id, pos, size, style, name)) if (!wxWindow::Create(parent, id, pos, size, style|wxNO_BORDER, name))
return FALSE; return FALSE;
SetBackgroundColour(wxSystemSettings::GetSystemColour(wxSYS_COLOUR_3DFACE));
SetTabView(new wxNotebookTabView(this)); SetTabView(new wxNotebookTabView(this));
return TRUE; return TRUE;

View File

@@ -29,12 +29,12 @@
#endif #endif
#include "wx/generic/treectrl.h" #include "wx/generic/treectrl.h"
#include "wx/generic/imaglist.h"
#include "wx/settings.h" #include "wx/settings.h"
#include "wx/log.h" #include "wx/log.h"
#include "wx/intl.h" #include "wx/intl.h"
#include "wx/dynarray.h" #include "wx/dynarray.h"
#include "wx/dcclient.h" #include "wx/dcclient.h"
#include "wx/imaglist.h"
#include "wx/msgdlg.h" #include "wx/msgdlg.h"
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
@@ -1089,6 +1089,7 @@ void wxTreeCtrl::PaintItem(wxGenericTreeItem *item, wxDC& dc)
dc.DestroyClippingRegion(); dc.DestroyClippingRegion();
} }
dc.SetBackgroundMode(wxTRANSPARENT);
dc.DrawText( item->GetText(), image_w + item->GetX(), item->GetY() ); dc.DrawText( item->GetText(), image_w + item->GetX(), item->GetY() );
// restore normal font for bold items // restore normal font for bold items
@@ -1197,7 +1198,8 @@ void wxTreeCtrl::OnPaint( wxPaintEvent &WXUNUSED(event) )
wxPaintDC dc(this); wxPaintDC dc(this);
PrepareDC( dc ); PrepareDC( dc );
dc.SetFont( wxSystemSettings::GetSystemFont( wxSYS_SYSTEM_FONT ) ); // dc.SetFont( wxSystemSettings::GetSystemFont( wxSYS_SYSTEM_FONT ) );
dc.SetFont( wxSystemSettings::GetSystemFont( wxSYS_DEFAULT_GUI_FONT ) );
dc.SetPen( m_dottedPen ); dc.SetPen( m_dottedPen );
m_lineHeight = (int)(dc.GetCharHeight() + 4); m_lineHeight = (int)(dc.GetCharHeight() + 4);
@@ -1446,7 +1448,8 @@ void wxTreeCtrl::CalculatePositions()
wxClientDC dc(this); wxClientDC dc(this);
PrepareDC( dc ); PrepareDC( dc );
dc.SetFont( wxSystemSettings::GetSystemFont( wxSYS_SYSTEM_FONT ) ); // dc.SetFont( wxSystemSettings::GetSystemFont( wxSYS_SYSTEM_FONT ) );
dc.SetFont( wxSystemSettings::GetSystemFont( wxSYS_DEFAULT_GUI_FONT ) );
dc.SetPen( m_dottedPen ); dc.SetPen( m_dottedPen );
m_lineHeight = (int)(dc.GetCharHeight() + 4); m_lineHeight = (int)(dc.GetCharHeight() + 4);

View File

@@ -52,7 +52,7 @@ bool wxMetaFile::SetClipboard(int width, int height)
bool wxMetaFile::Play(wxDC *dc) bool wxMetaFile::Play(wxDC *dc)
{ {
// TODO // TODO
return false; return FALSE;
} }
/* /*

View File

@@ -97,7 +97,7 @@ void xt_notify_end_process(XtPointer client, int *fid,
/* wait4 is not part of any standard, use at own risk /* wait4 is not part of any standard, use at own risk
* not sure what wait4 does, but wait3 seems to be closest, whats a digit ;-) * not sure what wait4 does, but wait3 seems to be closest, whats a digit ;-)
* --- offer@sgi.com */ * --- offer@sgi.com */
#if !defined(__sgi) && !defined(__ALPHA__) #if !defined(__sgi) && !defined(__SGI__) && !defined(__ALPHA__) && !defined(__SUNCC__)
wait4(process_data->pid, NULL, 0, NULL); wait4(process_data->pid, NULL, 0, NULL);
#else #else
wait3((int *) NULL, 0, (rusage *) NULL); wait3((int *) NULL, 0, (rusage *) NULL);

View File

@@ -603,7 +603,13 @@ void wxDC::DrawEllipticArc(long x,long y,long w,long h,double sa,double ea)
void wxDC::DrawIcon(const wxIcon& icon, long x, long y) void wxDC::DrawIcon(const wxIcon& icon, long x, long y)
{ {
#if defined(__WIN32__)
::DrawIconEx((HDC) m_hDC, XLOG2DEV(x), YLOG2DEV(y), (HICON) icon.GetHICON(),
icon.GetWidth(), icon.GetHeight(), 0, 0, DI_NORMAL);
#else
::DrawIcon((HDC) m_hDC, XLOG2DEV(x), YLOG2DEV(y), (HICON) icon.GetHICON()); ::DrawIcon((HDC) m_hDC, XLOG2DEV(x), YLOG2DEV(y), (HICON) icon.GetHICON());
#endif
CalcBoundingBox(x, y); CalcBoundingBox(x, y);
CalcBoundingBox(x+icon.GetWidth(), y+icon.GetHeight()); CalcBoundingBox(x+icon.GetWidth(), y+icon.GetHeight());
} }

View File

@@ -178,6 +178,13 @@ bool wxICOResourceHandler::LoadFile(wxBitmap *bitmap, const wxString& name, long
M_ICONHANDLERDATA->m_width = 32; M_ICONHANDLERDATA->m_width = 32;
M_ICONHANDLERDATA->m_height = 32; M_ICONHANDLERDATA->m_height = 32;
#endif #endif
// Override the found values with desired values
if (desiredWidth > -1 && desiredHeight > -1)
{
M_ICONHANDLERDATA->m_width = desiredWidth;
M_ICONHANDLERDATA->m_height = desiredHeight;
}
M_ICONHANDLERDATA->m_ok = (M_ICONHANDLERDATA->m_hIcon != 0); M_ICONHANDLERDATA->m_ok = (M_ICONHANDLERDATA->m_hIcon != 0);
return M_ICONHANDLERDATA->m_ok; return M_ICONHANDLERDATA->m_ok;
} }

View File

@@ -60,6 +60,11 @@ GENERICOBJS= \
$(GENDIR)\tabg.obj \ $(GENDIR)\tabg.obj \
$(GENDIR)\textdlgg.obj $(GENDIR)\textdlgg.obj
# $(GENDIR)\imaglist.obj \
# $(GENDIR)\treectrl.obj \
# $(GENDIR)\listctrl.obj \
# $(GENDIR)\notebook.obj \
# These are generic things that don't need to be compiled on MSW, # These are generic things that don't need to be compiled on MSW,
# but sometimes it's useful to do so for testing purposes. # but sometimes it's useful to do so for testing purposes.
NONESSENTIALOBJS= \ NONESSENTIALOBJS= \
@@ -169,11 +174,9 @@ MSWOBJS = \
$(MSWDIR)\gdiobj.obj \ $(MSWDIR)\gdiobj.obj \
$(MSWDIR)\helpwin.obj \ $(MSWDIR)\helpwin.obj \
$(MSWDIR)\icon.obj \ $(MSWDIR)\icon.obj \
$(MSWDIR)\imaglist.obj \
$(MSWDIR)\iniconf.obj \ $(MSWDIR)\iniconf.obj \
$(MSWDIR)\joystick.obj \ $(MSWDIR)\joystick.obj \
$(MSWDIR)\listbox.obj \ $(MSWDIR)\listbox.obj \
$(MSWDIR)\listctrl.obj \
$(MSWDIR)\main.obj \ $(MSWDIR)\main.obj \
$(MSWDIR)\mdi.obj \ $(MSWDIR)\mdi.obj \
$(MSWDIR)\menu.obj \ $(MSWDIR)\menu.obj \
@@ -182,7 +185,6 @@ MSWOBJS = \
$(MSWDIR)\minifram.obj \ $(MSWDIR)\minifram.obj \
$(MSWDIR)\msgdlg.obj \ $(MSWDIR)\msgdlg.obj \
$(MSWDIR)\nativdlg.obj \ $(MSWDIR)\nativdlg.obj \
$(MSWDIR)\notebook.obj \
$(MSWDIR)\ownerdrw.obj \ $(MSWDIR)\ownerdrw.obj \
$(MSWDIR)\palette.obj \ $(MSWDIR)\palette.obj \
$(MSWDIR)\pen.obj \ $(MSWDIR)\pen.obj \
@@ -211,11 +213,14 @@ MSWOBJS = \
$(MSWDIR)\textctrl.obj \ $(MSWDIR)\textctrl.obj \
$(MSWDIR)\thread.obj \ $(MSWDIR)\thread.obj \
$(MSWDIR)\timer.obj \ $(MSWDIR)\timer.obj \
$(MSWDIR)\treectrl.obj \
$(MSWDIR)\utils.obj \ $(MSWDIR)\utils.obj \
$(MSWDIR)\utilsexc.obj \ $(MSWDIR)\utilsexc.obj \
$(MSWDIR)\wave.obj \ $(MSWDIR)\wave.obj \
$(MSWDIR)\window.obj \ $(MSWDIR)\window.obj \
$(MSWDIR)\notebook.obj \
$(MSWDIR)\listctrl.obj \
$(MSWDIR)\imaglist.obj \
$(MSWDIR)\treectrl.obj \
$(OLEDIR)\droptgt.obj \ $(OLEDIR)\droptgt.obj \
$(OLEDIR)\dropsrc.obj \ $(OLEDIR)\dropsrc.obj \
$(OLEDIR)\dataobj.obj \ $(OLEDIR)\dataobj.obj \
@@ -1150,6 +1155,26 @@ $(GENDIR)/textdlgg.obj: $*.$(SRCSUFF)
$(CPPFLAGS) /c /Tp $*.$(SRCSUFF) /Fo$@ $(CPPFLAGS) /c /Tp $*.$(SRCSUFF) /Fo$@
<< <<
$(GENDIR)/treectrl.obj: $*.$(SRCSUFF)
cl @<<
$(CPPFLAGS) /c /Tp $*.$(SRCSUFF) /Fo$@
<<
$(GENDIR)/imaglist.obj: $*.$(SRCSUFF)
cl @<<
$(CPPFLAGS) /c /Tp $*.$(SRCSUFF) /Fo$@
<<
$(GENDIR)/listctrl.obj: $*.$(SRCSUFF)
cl @<<
$(CPPFLAGS) /c /Tp $*.$(SRCSUFF) /Fo$@
<<
$(GENDIR)/notebook.obj: $*.$(SRCSUFF)
cl @<<
$(CPPFLAGS) /c /Tp $*.$(SRCSUFF) /Fo$@
<<
$(OBJECTS): $(WXDIR)/include/wx/setup.h $(OBJECTS): $(WXDIR)/include/wx/setup.h
$(XPMDIR)\crbuffri.obj: $(XPMDIR)\crbuffri.c $(XPMDIR)\crbuffri.obj: $(XPMDIR)\crbuffri.c

View File

@@ -1468,10 +1468,18 @@ void wxWindow::MSWCreate(int id, wxWindow *parent, const char *wclass, wxWindow
m_hWnd = (WXHWND) ::CreateDialog(wxGetInstance(), dialog_template, hParent, m_hWnd = (WXHWND) ::CreateDialog(wxGetInstance(), dialog_template, hParent,
(DLGPROC)wxDlgProc); (DLGPROC)wxDlgProc);
#else #else
// N.B.: if we _don't_ use this form,
// then with VC++ 1.5, it crashes horribly.
#if 1
m_hWnd = (WXHWND) ::CreateDialog(wxGetInstance(), dialog_template, hParent,
(DLGPROC)wxDlgProc);
#else
// Crashes when we use this.
DLGPROC dlgproc = (DLGPROC)MakeProcInstance((DLGPROC)wxWndProc, wxGetInstance()); DLGPROC dlgproc = (DLGPROC)MakeProcInstance((DLGPROC)wxWndProc, wxGetInstance());
m_hWnd = (WXHWND) ::CreateDialog(wxGetInstance(), dialog_template, hParent, m_hWnd = (WXHWND) ::CreateDialog(wxGetInstance(), dialog_template, hParent,
(DLGPROC)dlgproc); (DLGPROC)dlgproc);
#endif
#endif #endif
if (m_hWnd == 0) if (m_hWnd == 0)