From f60d0f944a6ce86bce59901e7ea3811f0992bce7 Mon Sep 17 00:00:00 2001 From: Julian Smart Date: Wed, 23 Dec 1998 09:58:02 +0000 Subject: [PATCH] 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 --- docs/latex/wx/evthand.tex | 33 ++++++++++++++++++++++++ docs/latex/wx/icon.tex | 11 +++++++- docs/latex/wx/paintdc.tex | 3 ++- docs/latex/wx/tdnd.tex | 36 ++++++++++++--------------- docs/msw/changes.txt | 10 ++++++++ docs/msw/install.txt | 7 ++---- docs/msw/issues.txt | 4 --- include/wx/generic/listctrl.h | 2 +- samples/notebook/test.cpp | 8 +++--- samples/treectrl/bitmaps/file1.bmp | Bin 0 -> 246 bytes samples/treectrl/bitmaps/folder1.bmp | Bin 0 -> 246 bytes samples/treectrl/treetest.cpp | 8 +++++- samples/treectrl/treetest.rc | 3 +++ src/common/utilscmn.cpp | 2 +- src/generic/imaglist.cpp | 26 +++++++++++++------ src/generic/listctrl.cpp | 13 +++++++--- src/generic/notebook.cpp | 6 +++-- src/generic/treectrl.cpp | 9 ++++--- src/motif/metafile.cpp | 2 +- src/motif/utilsexc.cpp | 2 +- src/msw/dc.cpp | 6 +++++ src/msw/icon.cpp | 7 ++++++ src/msw/makefile.nt | 33 +++++++++++++++++++++--- src/msw/window.cpp | 8 ++++++ 24 files changed, 178 insertions(+), 61 deletions(-) create mode 100644 samples/treectrl/bitmaps/file1.bmp create mode 100644 samples/treectrl/bitmaps/folder1.bmp diff --git a/docs/latex/wx/evthand.tex b/docs/latex/wx/evthand.tex index 16e10a1bcb..eff1e2aeeb 100644 --- a/docs/latex/wx/evthand.tex +++ b/docs/latex/wx/evthand.tex @@ -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 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} \func{virtual long}{Default}{\void} diff --git a/docs/latex/wx/icon.tex b/docs/latex/wx/icon.tex index 87193b04c6..fdc9efd9af 100644 --- a/docs/latex/wx/icon.tex +++ b/docs/latex/wx/icon.tex @@ -76,7 +76,8 @@ Creates a new icon. 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. @@ -88,6 +89,14 @@ Loads an icon from a file or resource. \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 screen is used.} diff --git a/docs/latex/wx/paintdc.tex b/docs/latex/wx/paintdc.tex index 5589b42648..05842fb646 100644 --- a/docs/latex/wx/paintdc.tex +++ b/docs/latex/wx/paintdc.tex @@ -3,7 +3,8 @@ A wxPaintDC must be constructed if an application wishes to paint on the client area of a window from within an {\bf OnPaint} event. 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 sets the clipping area to the damaged area of the window. Attempts to draw diff --git a/docs/latex/wx/tdnd.tex b/docs/latex/wx/tdnd.tex index 3955a86538..cbd0d8ea5a 100644 --- a/docs/latex/wx/tdnd.tex +++ b/docs/latex/wx/tdnd.tex @@ -15,37 +15,36 @@ Headers: , > This overview describes wxWindows support for drag and drop and clipboard 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 is almost the same. -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 -of clipboard transfer, the data is first places on the clipboard and then -pasted into the destination program while for a drag-and-drop operation the +Both operations involve passing some data from one program to another, +although the data can be received in the same program as the source. In the case +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 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 -ended successfully or cancelled). +dragging and is destroyed as soon as he ends it, whether the operation was +ended successfully or cancelled. 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 \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} wxTextDataObject data("This string will be dragged."); \end{verbatim} Of course, the data object may contain arbitrary data of any type, but for -this you should derive your own class from -\helpref{wxDataObject}{wxdataobject} overriding all of its pure virtual +this you should derive your own class from \helpref{wxDataObject}{wxdataobject} overriding all of its pure virtual functions. \item{\bf Drag start:} To start dragging process (typically in response to a -mouse click) you must call \helpref{DoDragDrop}{wxdropsourcedodragdrop} -function of wxDropSource object which should be constructed like this: +mouse click) you must call \helpref{DoDragDrop}{wxdropsourcedodragdrop} function +of wxDropSource object which should be constructed like this: \begin{verbatim} 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 are called - see below. -\item {\bf Processing the result:} DoDragDrop() returns an {\it effect code} -which is one of the values of \helpref{wxDragResult}{wxdragresult} enum. Codes +\item {\bf Processing the result:} DoDragDrop() returns an {\it effect code} which +is one of the values of \helpref{wxDragResult}{wxdragresult} enum. Codes 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 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 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. - \end{itemize} - To be a {\it drop target}, i.e. to receive the data dropped by user you should follow the instructions below: @@ -91,8 +88,8 @@ or OnDropFiles() method. \item {\bf Drop:} When the user releases the mouse over a window, wxWindows queries the associated wxDropTarget object if it accepts the data. For -this, \helpref{GetFormatCount}{wxdroptargetgetformatcount} and -\helpref{GetFormat}{wxdroptargetgetformat} are used and if the format is +this, \helpref{GetFormatCount}{wxdroptargetgetformatcount} and \helpref{GetFormat}{wxdroptargetgetformat} are +used and if the format is supported (i.e. is one of returned by GetFormat()), then \helpref{OnDrop}{wxdroptargetondrop} is called. 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 (, and ) at the moment of drop. There is currently no way for the drop target to change this return code. - \end{itemize} diff --git a/docs/msw/changes.txt b/docs/msw/changes.txt index f2ad9cdb14..25d5b38935 100644 --- a/docs/msw/changes.txt +++ b/docs/msw/changes.txt @@ -2,6 +2,16 @@ 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 ---------------------------- diff --git a/docs/msw/install.txt b/docs/msw/install.txt index 09562235ec..4a7872625a 100644 --- a/docs/msw/install.txt +++ b/docs/msw/install.txt @@ -56,11 +56,8 @@ Visual C++ 1.5 compilation 1. Change directory to wx\src\msw. Type 'nmake -f makefile.dos' to make the wxWindows core library. -2. Change directory to wx\samples and type 'nmake -f makefile.dos' - to make all the samples. You can also make them individually. - -NOTE: 16-bit compilation is not recommended (see issues.txt): -many things are broken, including dialog boxes. +2. Change directory to a sample, such as wx\samples\minimal, and + type 'nmake -f makefile.dos'. Borland C++ 4.5/5.0 compilation ------------------------------- diff --git a/docs/msw/issues.txt b/docs/msw/issues.txt index 900bfa8600..d77a710a94 100644 --- a/docs/msw/issues.txt +++ b/docs/msw/issues.txt @@ -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 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). diff --git a/include/wx/generic/listctrl.h b/include/wx/generic/listctrl.h index ff5bc55e13..810d91f9a6 100644 --- a/include/wx/generic/listctrl.h +++ b/include/wx/generic/listctrl.h @@ -17,7 +17,7 @@ #include "wx/defs.h" #include "wx/object.h" -#include "wx/imaglist.h" +#include "wx/generic/imaglist.h" #include "wx/control.h" #include "wx/timer.h" #include "wx/textctrl.h" diff --git a/samples/notebook/test.cpp b/samples/notebook/test.cpp index feffe3ee58..7ee1dfb3e8 100644 --- a/samples/notebook/test.cpp +++ b/samples/notebook/test.cpp @@ -20,7 +20,6 @@ #include "wx/wx.h" #endif -#include "wx/tab.h" #include "test.h" // If 1, use a dialog. Otherwise use a frame. @@ -44,10 +43,9 @@ bool MyApp::OnInit(void) #else 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 - // you set the size again (to a different size than before, - // since SetSize is optimized) -#ifdef __WXMOTIF__ + // Problem with generic wxNotebook implementation whereby it doesn't size properly unless + // you set the size again (to a different size than before, since SetSize is optimized) +#if defined(__WXMOTIF__) || defined(__WIN16__) frame->SetSize(-1, -1, 370, 390); #endif diff --git a/samples/treectrl/bitmaps/file1.bmp b/samples/treectrl/bitmaps/file1.bmp new file mode 100644 index 0000000000000000000000000000000000000000..9a0544b232721e18b22e955fb09d0aecf303084e GIT binary patch literal 246 zcmb76u@Qhk2#a_2IEHiByN)%Z{YX@{F~Hl{nTJ5geU9@+pG+w28v8D8A}#Qhy;IFj7@ygAdd(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(icon2)); +#endif SetImageList(m_imageListNormal); diff --git a/samples/treectrl/treetest.rc b/samples/treectrl/treetest.rc index c1a90c7724..550dc2f135 100644 --- a/samples/treectrl/treetest.rc +++ b/samples/treectrl/treetest.rc @@ -5,3 +5,6 @@ aaaa ICON "mondrian.ico" icon1 ICON "bitmaps\\file1.ico" icon2 ICON "bitmaps\\folder1.ico" +bitmap1 BITMAP "bitmaps\\file1.bmp" +bitmap2 BITMAP "bitmaps\\folder1.bmp" + diff --git a/src/common/utilscmn.cpp b/src/common/utilscmn.cpp index a5f03d0543..c5e8204954 100644 --- a/src/common/utilscmn.cpp +++ b/src/common/utilscmn.cpp @@ -824,4 +824,4 @@ int isascii( int c ) { return ( c >= 0 && c < 128 ) ; } -#endif \ No newline at end of file +#endif diff --git a/src/generic/imaglist.cpp b/src/generic/imaglist.cpp index 95614a8281..b0dc6594c7 100644 --- a/src/generic/imaglist.cpp +++ b/src/generic/imaglist.cpp @@ -18,7 +18,7 @@ #pragma hdrstop #endif -#include "wx/imaglist.h" +#include "wx/generic/imaglist.h" //----------------------------------------------------------------------------- // wxImageList @@ -50,7 +50,10 @@ bool wxImageList::Create() 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(); } @@ -68,17 +71,23 @@ bool wxImageList::Replace( int index, const wxBitmap &bitmap ) wxNode *node = m_images.Nth( index ); 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) { m_images.DeleteNode( node ); - m_images.Append( new wxBitmap(bitmap) ); + m_images.Append( newBitmap ); } else { wxNode *next = node->Next(); m_images.DeleteNode( node ); - m_images.Insert( next, new wxBitmap(bitmap) ); + m_images.Insert( next, newBitmap ); } return TRUE; @@ -126,8 +135,11 @@ bool wxImageList::Draw( int index, wxDC &dc, int x, int y, wxCHECK_MSG( node, FALSE, "wrong index in image list" ); 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; } diff --git a/src/generic/listctrl.cpp b/src/generic/listctrl.cpp index 4e5824aabb..8927a2d981 100644 --- a/src/generic/listctrl.cpp +++ b/src/generic/listctrl.cpp @@ -20,7 +20,8 @@ #include "wx/dcscreen.h" #include "wx/app.h" -#include "wx/listctrl.h" +#include "wx/generic/listctrl.h" +#include "wx/generic/imaglist.h" //----------------------------------------------------------------------------- // wxListItemData @@ -551,6 +552,7 @@ void wxListLineData::DoDraw( wxDC *dc, bool hilight, bool paintBG ) m_bound_hilight.width, m_bound_hilight.height ); } + dc->SetBackgroundMode(wxTRANSPARENT); if (m_mode == wxLC_REPORT) { wxString s; @@ -741,6 +743,7 @@ void wxListHeaderWindow::OnPaint( wxPaintEvent &WXUNUSED(event) ) int y = 0; GetClientSize( &w, &h ); + dc.SetBackgroundMode(wxTRANSPARENT); dc.SetTextForeground( *wxBLACK ); if (m_foregroundColour.Ok()) dc.SetTextForeground( m_foregroundColour ); @@ -1037,13 +1040,15 @@ void wxListMainWindow::RefreshLine( wxListLineData *line ) 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_lines.GetCount() == 0) return; - wxPaintDC dc( this ); - PrepareDC( dc ); - dc.BeginDrawing(); dc.SetFont( GetFont() ); diff --git a/src/generic/notebook.cpp b/src/generic/notebook.cpp index cced371845..dca6679456 100644 --- a/src/generic/notebook.cpp +++ b/src/generic/notebook.cpp @@ -52,7 +52,7 @@ BEGIN_EVENT_TABLE(wxNotebook, wxControl) EVT_MOUSE_EVENTS(wxNotebook::OnMouseEvent) EVT_SET_FOCUS(wxNotebook::OnSetFocus) EVT_NAVIGATION_KEY(wxNotebook::OnNavigationKey) - EVT_IDLE(wxNotebook::OnIdle) +// EVT_IDLE(wxNotebook::OnIdle) END_EVENT_TABLE() IMPLEMENT_DYNAMIC_CLASS(wxNotebook, wxControl) @@ -108,9 +108,11 @@ bool wxNotebook::Create(wxWindow *parent, m_windowId = id == -1 ? NewControlId() : id; // 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; + SetBackgroundColour(wxSystemSettings::GetSystemColour(wxSYS_COLOUR_3DFACE)); + SetTabView(new wxNotebookTabView(this)); return TRUE; diff --git a/src/generic/treectrl.cpp b/src/generic/treectrl.cpp index 3a2dea9902..a9827f7b60 100644 --- a/src/generic/treectrl.cpp +++ b/src/generic/treectrl.cpp @@ -29,12 +29,12 @@ #endif #include "wx/generic/treectrl.h" +#include "wx/generic/imaglist.h" #include "wx/settings.h" #include "wx/log.h" #include "wx/intl.h" #include "wx/dynarray.h" #include "wx/dcclient.h" -#include "wx/imaglist.h" #include "wx/msgdlg.h" // ----------------------------------------------------------------------------- @@ -1089,6 +1089,7 @@ void wxTreeCtrl::PaintItem(wxGenericTreeItem *item, wxDC& dc) dc.DestroyClippingRegion(); } + dc.SetBackgroundMode(wxTRANSPARENT); dc.DrawText( item->GetText(), image_w + item->GetX(), item->GetY() ); // restore normal font for bold items @@ -1197,7 +1198,8 @@ void wxTreeCtrl::OnPaint( wxPaintEvent &WXUNUSED(event) ) wxPaintDC dc(this); 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 ); m_lineHeight = (int)(dc.GetCharHeight() + 4); @@ -1446,7 +1448,8 @@ void wxTreeCtrl::CalculatePositions() wxClientDC dc(this); 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 ); m_lineHeight = (int)(dc.GetCharHeight() + 4); diff --git a/src/motif/metafile.cpp b/src/motif/metafile.cpp index 348440fd79..7380a03402 100644 --- a/src/motif/metafile.cpp +++ b/src/motif/metafile.cpp @@ -52,7 +52,7 @@ bool wxMetaFile::SetClipboard(int width, int height) bool wxMetaFile::Play(wxDC *dc) { // TODO - return false; + return FALSE; } /* diff --git a/src/motif/utilsexc.cpp b/src/motif/utilsexc.cpp index 05e0fb5ef7..c7c928a2de 100644 --- a/src/motif/utilsexc.cpp +++ b/src/motif/utilsexc.cpp @@ -97,7 +97,7 @@ void xt_notify_end_process(XtPointer client, int *fid, /* 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 ;-) * --- offer@sgi.com */ -#if !defined(__sgi) && !defined(__ALPHA__) +#if !defined(__sgi) && !defined(__SGI__) && !defined(__ALPHA__) && !defined(__SUNCC__) wait4(process_data->pid, NULL, 0, NULL); #else wait3((int *) NULL, 0, (rusage *) NULL); diff --git a/src/msw/dc.cpp b/src/msw/dc.cpp index 25997d4c27..d14d10afb1 100644 --- a/src/msw/dc.cpp +++ b/src/msw/dc.cpp @@ -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) { +#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()); +#endif + CalcBoundingBox(x, y); CalcBoundingBox(x+icon.GetWidth(), y+icon.GetHeight()); } diff --git a/src/msw/icon.cpp b/src/msw/icon.cpp index bd69394f9a..08c91789d0 100644 --- a/src/msw/icon.cpp +++ b/src/msw/icon.cpp @@ -178,6 +178,13 @@ bool wxICOResourceHandler::LoadFile(wxBitmap *bitmap, const wxString& name, long M_ICONHANDLERDATA->m_width = 32; M_ICONHANDLERDATA->m_height = 32; #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); return M_ICONHANDLERDATA->m_ok; } diff --git a/src/msw/makefile.nt b/src/msw/makefile.nt index 76945a8ebe..63acc309b4 100644 --- a/src/msw/makefile.nt +++ b/src/msw/makefile.nt @@ -60,6 +60,11 @@ GENERICOBJS= \ $(GENDIR)\tabg.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, # but sometimes it's useful to do so for testing purposes. NONESSENTIALOBJS= \ @@ -169,11 +174,9 @@ MSWOBJS = \ $(MSWDIR)\gdiobj.obj \ $(MSWDIR)\helpwin.obj \ $(MSWDIR)\icon.obj \ - $(MSWDIR)\imaglist.obj \ $(MSWDIR)\iniconf.obj \ $(MSWDIR)\joystick.obj \ $(MSWDIR)\listbox.obj \ - $(MSWDIR)\listctrl.obj \ $(MSWDIR)\main.obj \ $(MSWDIR)\mdi.obj \ $(MSWDIR)\menu.obj \ @@ -182,7 +185,6 @@ MSWOBJS = \ $(MSWDIR)\minifram.obj \ $(MSWDIR)\msgdlg.obj \ $(MSWDIR)\nativdlg.obj \ - $(MSWDIR)\notebook.obj \ $(MSWDIR)\ownerdrw.obj \ $(MSWDIR)\palette.obj \ $(MSWDIR)\pen.obj \ @@ -211,11 +213,14 @@ MSWOBJS = \ $(MSWDIR)\textctrl.obj \ $(MSWDIR)\thread.obj \ $(MSWDIR)\timer.obj \ - $(MSWDIR)\treectrl.obj \ $(MSWDIR)\utils.obj \ $(MSWDIR)\utilsexc.obj \ $(MSWDIR)\wave.obj \ $(MSWDIR)\window.obj \ + $(MSWDIR)\notebook.obj \ + $(MSWDIR)\listctrl.obj \ + $(MSWDIR)\imaglist.obj \ + $(MSWDIR)\treectrl.obj \ $(OLEDIR)\droptgt.obj \ $(OLEDIR)\dropsrc.obj \ $(OLEDIR)\dataobj.obj \ @@ -1150,6 +1155,26 @@ $(GENDIR)/textdlgg.obj: $*.$(SRCSUFF) $(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 $(XPMDIR)\crbuffri.obj: $(XPMDIR)\crbuffri.c diff --git a/src/msw/window.cpp b/src/msw/window.cpp index 6a20945ba8..2d1f1ae135 100644 --- a/src/msw/window.cpp +++ b/src/msw/window.cpp @@ -1468,10 +1468,18 @@ void wxWindow::MSWCreate(int id, wxWindow *parent, const char *wclass, wxWindow m_hWnd = (WXHWND) ::CreateDialog(wxGetInstance(), dialog_template, hParent, (DLGPROC)wxDlgProc); #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()); m_hWnd = (WXHWND) ::CreateDialog(wxGetInstance(), dialog_template, hParent, (DLGPROC)dlgproc); +#endif #endif if (m_hWnd == 0) -- 2.45.2