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
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}

View File

@ -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.}

View File

@ -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

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
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 (<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}

View File

@ -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
----------------------------

View File

@ -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
-------------------------------

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
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/object.h"
#include "wx/imaglist.h"
#include "wx/generic/imaglist.h"
#include "wx/control.h"
#include "wx/timer.h"
#include "wx/textctrl.h"

View File

@ -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

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)
// `Main program' equivalent, creating windows and returning main app frame
bool MyApp::OnInit()
{
// Create the main frame window
@ -278,8 +277,15 @@ MyTreeCtrl::MyTreeCtrl(wxWindow *parent, const wxWindowID id,
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);

View File

@ -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"

View File

@ -824,4 +824,4 @@ int isascii( int c )
{
return ( c >= 0 && c < 128 ) ;
}
#endif
#endif

View File

@ -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;
}

View File

@ -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() );

View File

@ -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;

View File

@ -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);

View File

@ -52,7 +52,7 @@ bool wxMetaFile::SetClipboard(int width, int height)
bool wxMetaFile::Play(wxDC *dc)
{
// 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
* 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);

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)
{
#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());
}

View File

@ -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;
}

View File

@ -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

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,
(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)