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}
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.
\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.}
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
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);
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
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:
\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
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
target to change this return code.
-
\end{itemize}
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
----------------------------
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
-------------------------------
(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).
#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"
#include "wx/wx.h"
#endif
-#include "wx/tab.h"
#include "test.h"
// If 1, use a dialog. Otherwise use a frame.
#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
IMPLEMENT_APP(MyApp)
-// `Main program' equivalent, creating windows and returning main app frame
bool MyApp::OnInit()
{
// Create the main frame window
m_imageListNormal = new wxImageList(16, 16, TRUE);
// 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(icon2));
+#endif
SetImageList(m_imageListNormal);
icon1 ICON "bitmaps\\file1.ico"
icon2 ICON "bitmaps\\folder1.ico"
+bitmap1 BITMAP "bitmaps\\file1.bmp"
+bitmap2 BITMAP "bitmaps\\folder1.bmp"
+
{
return ( c >= 0 && c < 128 ) ;
}
-#endif
\ No newline at end of file
+#endif
#pragma hdrstop
#endif
-#include "wx/imaglist.h"
+#include "wx/generic/imaglist.h"
//-----------------------------------------------------------------------------
// wxImageList
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();
}
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;
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;
}
#include "wx/dcscreen.h"
#include "wx/app.h"
-#include "wx/listctrl.h"
+#include "wx/generic/listctrl.h"
+#include "wx/generic/imaglist.h"
//-----------------------------------------------------------------------------
// wxListItemData
m_bound_hilight.width, m_bound_hilight.height );
}
+ dc->SetBackgroundMode(wxTRANSPARENT);
if (m_mode == wxLC_REPORT)
{
wxString s;
int y = 0;
GetClientSize( &w, &h );
+ dc.SetBackgroundMode(wxTRANSPARENT);
dc.SetTextForeground( *wxBLACK );
if (m_foregroundColour.Ok()) dc.SetTextForeground( m_foregroundColour );
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() );
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)
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;
#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"
// -----------------------------------------------------------------------------
dc.DestroyClippingRegion();
}
+ dc.SetBackgroundMode(wxTRANSPARENT);
dc.DrawText( item->GetText(), image_w + item->GetX(), item->GetY() );
// restore normal font for bold items
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);
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);
bool wxMetaFile::Play(wxDC *dc)
{
// TODO
- return false;
+ return FALSE;
}
/*
/* 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);
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());
}
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;
}
$(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= \
$(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 \
$(MSWDIR)\minifram.obj \
$(MSWDIR)\msgdlg.obj \
$(MSWDIR)\nativdlg.obj \
- $(MSWDIR)\notebook.obj \
$(MSWDIR)\ownerdrw.obj \
$(MSWDIR)\palette.obj \
$(MSWDIR)\pen.obj \
$(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 \
$(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
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)