From 5f7a7263c3d574c6a936d58df23687d1934c928a Mon Sep 17 00:00:00 2001 From: Julian Smart Date: Tue, 17 Dec 2002 10:52:10 +0000 Subject: [PATCH] MFC sample now works properly; WinMain not defined in wxMSW if wxUSE_MFC is defined. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/branches/WX_2_4_BRANCH@18294 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- samples/mfc/mfctest.cpp | 174 ++++++++++++++++++++-------------------- src/msw/main.cpp | 6 ++ 2 files changed, 93 insertions(+), 87 deletions(-) diff --git a/samples/mfc/mfctest.cpp b/samples/mfc/mfctest.cpp index 7121cc136c..39b749641c 100644 --- a/samples/mfc/mfctest.cpp +++ b/samples/mfc/mfctest.cpp @@ -89,31 +89,31 @@ CTheApp theApp; // Define a new application type class MyApp: public wxApp { public: - bool OnInit(void); - wxFrame *CreateFrame(void); - }; +bool OnInit(void); +wxFrame *CreateFrame(void); +}; class MyCanvas: public wxScrolledWindow { - public: +public: MyCanvas(wxWindow *parent, const wxPoint& pos, const wxSize& size); void OnPaint(wxPaintEvent& event); void OnMouseEvent(wxMouseEvent& event); -DECLARE_EVENT_TABLE() + DECLARE_EVENT_TABLE() }; class MyChild: public wxFrame { - public: +public: MyCanvas *canvas; MyChild(wxFrame *frame, const wxString& title, const wxPoint& pos, const wxSize& size, const long style); ~MyChild(void); - + void OnQuit(wxCommandEvent& event); void OnNew(wxCommandEvent& event); void OnActivate(wxActivateEvent& event); - -DECLARE_EVENT_TABLE() + + DECLARE_EVENT_TABLE() }; // For drawing lines in a canvas @@ -151,13 +151,13 @@ void CMainWindow::OnPaint() CString s = "Hello, Windows!"; CPaintDC dc( this ); CRect rect; - + GetClientRect( rect ); dc.SetTextAlign( TA_BASELINE | TA_CENTER ); dc.SetTextColor( ::GetSysColor( COLOR_WINDOWTEXT ) ); dc.SetBkMode(TRANSPARENT); dc.TextOut( ( rect.right / 2 ), ( rect.bottom / 2 ), - s, s.GetLength() ); + s, s.GetLength() ); } // OnAbout: @@ -176,8 +176,8 @@ void CMainWindow::OnAbout() void CMainWindow::OnTest() { - wxMessageBox("This is a wxWindows message box.\nWe're about to create a new wxWindows frame.", "wxWindows", wxOK); - wxGetApp().CreateFrame(); + wxMessageBox("This is a wxWindows message box.\nWe're about to create a new wxWindows frame.", "wxWindows", wxOK); + wxGetApp().CreateFrame(); } // CMainWindow message map: @@ -190,11 +190,11 @@ void CMainWindow::OnTest() // receive no arguments and are void of return type, e.g., "void OnAbout()". // BEGIN_MESSAGE_MAP( CMainWindow, CFrameWnd ) - //{{AFX_MSG_MAP( CMainWindow ) - ON_WM_PAINT() - ON_COMMAND( IDM_ABOUT, OnAbout ) - ON_COMMAND( IDM_TEST, OnTest ) - //}}AFX_MSG_MAP +//{{AFX_MSG_MAP( CMainWindow ) +ON_WM_PAINT() +ON_COMMAND( IDM_ABOUT, OnAbout ) +ON_COMMAND( IDM_TEST, OnTest ) +//}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// @@ -210,32 +210,32 @@ END_MESSAGE_MAP() BOOL CTheApp::InitInstance() { TRACE( "HELLO WORLD\n" ); - + SetDialogBkColor(); // hook gray dialogs (was default in MFC V1) - + wxEntry((WXHINSTANCE) m_hInstance, (WXHINSTANCE) m_hPrevInstance, m_lpCmdLine, m_nCmdShow, FALSE); - -/* + + /* m_pMainWnd = new CMainWindow(); m_pMainWnd->ShowWindow( m_nCmdShow ); m_pMainWnd->UpdateWindow(); -*/ - + */ + if (wxTheApp && wxTheApp->GetTopWindow()) { m_pMainWnd = new CDummyWindow((HWND) wxTheApp->GetTopWindow()->GetHWND()); } - + return TRUE; } int CTheApp::ExitInstance() { - // OnExit isn't called by CleanUp so must be called explicitly. - wxTheApp->OnExit(); - wxApp::CleanUp(); - - return CWinApp::ExitInstance(); + // OnExit isn't called by CleanUp so must be called explicitly. + wxTheApp->OnExit(); + wxApp::CleanUp(); + + return CWinApp::ExitInstance(); } // Override this to provide wxWindows message loop @@ -243,10 +243,10 @@ int CTheApp::ExitInstance() BOOL CTheApp::PreTranslateMessage(MSG *msg) { - if (wxTheApp && wxTheApp->ProcessMessage((WXMSG*) msg)) - return TRUE; - else - return CWinApp::PreTranslateMessage(msg); + if (wxTheApp && wxTheApp->ProcessMessage((WXMSG*) msg)) + return TRUE; + else + return CWinApp::PreTranslateMessage(msg); } BOOL CTheApp::OnIdle(LONG lCount) @@ -258,54 +258,54 @@ BOOL CTheApp::OnIdle(LONG lCount) } /********************************************************************* - * wxWindows elements - ********************************************************************/ - +* wxWindows elements +********************************************************************/ + bool MyApp::OnInit(void) { - // Don't exit app when the top level frame is deleted -// SetExitOnFrameDelete(FALSE); - - wxFrame* frame = CreateFrame(); - return TRUE; + // Exit app when the top level frame is deleted + SetExitOnFrameDelete(TRUE); + + (void) CreateFrame(); + return TRUE; } wxFrame *MyApp::CreateFrame(void) { - MyChild *subframe = new MyChild(NULL, "Canvas Frame", wxPoint(10, 10), wxSize(300, 300), - wxDEFAULT_FRAME_STYLE); - - subframe->SetTitle("wxWindows canvas frame"); - - // Give it a status line - subframe->CreateStatusBar(); - - // Make a menubar - wxMenu *file_menu = new wxMenu; - - file_menu->Append(HELLO_NEW, "&New MFC Window"); - file_menu->Append(HELLO_QUIT, "&Close"); - - wxMenuBar *menu_bar = new wxMenuBar; - - menu_bar->Append(file_menu, "&File"); - - // Associate the menu bar with the frame - subframe->SetMenuBar(menu_bar); - - int width, height; - subframe->GetClientSize(&width, &height); - - MyCanvas *canvas = new MyCanvas(subframe, wxPoint(0, 0), wxSize(width, height)); - canvas->SetCursor(wxCursor(wxCURSOR_PENCIL)); - subframe->canvas = canvas; - - // Give it scrollbars -// canvas->SetScrollbars(20, 20, 50, 50, 4, 4); - - subframe->Show(TRUE); - // Return the main frame window - return subframe; + MyChild *subframe = new MyChild(NULL, "Canvas Frame", wxPoint(10, 10), wxSize(300, 300), + wxDEFAULT_FRAME_STYLE); + + subframe->SetTitle("wxWindows canvas frame"); + + // Give it a status line + subframe->CreateStatusBar(); + + // Make a menubar + wxMenu *file_menu = new wxMenu; + + file_menu->Append(HELLO_NEW, "&New MFC Window"); + file_menu->Append(HELLO_QUIT, "&Close"); + + wxMenuBar *menu_bar = new wxMenuBar; + + menu_bar->Append(file_menu, "&File"); + + // Associate the menu bar with the frame + subframe->SetMenuBar(menu_bar); + + int width, height; + subframe->GetClientSize(&width, &height); + + MyCanvas *canvas = new MyCanvas(subframe, wxPoint(0, 0), wxSize(width, height)); + canvas->SetCursor(wxCursor(wxCURSOR_PENCIL)); + subframe->canvas = canvas; + + // Give it scrollbars + // canvas->SetScrollbars(20, 20, 50, 50, 4, 4); + + subframe->Show(TRUE); + // Return the main frame window + return subframe; } BEGIN_EVENT_TABLE(MyCanvas, wxScrolledWindow) @@ -315,7 +315,7 @@ END_EVENT_TABLE() // Define a constructor for my canvas MyCanvas::MyCanvas(wxWindow *parent, const wxPoint& pos, const wxSize& size): - wxScrolledWindow(parent, -1, pos, size) +wxScrolledWindow(parent, -1, pos, size) { } @@ -323,17 +323,17 @@ MyCanvas::MyCanvas(wxWindow *parent, const wxPoint& pos, const wxSize& size): void MyCanvas::OnPaint(wxPaintEvent& event) { wxPaintDC dc(this); - + dc.SetFont(* wxSWISS_FONT); dc.SetPen(* wxGREEN_PEN); dc.DrawLine(0, 0, 200, 200); dc.DrawLine(200, 0, 0, 200); - + dc.SetBrush(* wxCYAN_BRUSH); dc.SetPen(* wxRED_PEN); dc.DrawRectangle(100, 100, 100, 50); dc.DrawRoundedRectangle(150, 150, 100, 50, 20); - + dc.DrawEllipse(250, 250, 100, 50); dc.DrawSpline(50, 200, 50, 100, 200, 10); dc.DrawLine(50, 230, 200, 230); @@ -362,9 +362,9 @@ BEGIN_EVENT_TABLE(MyChild, wxFrame) END_EVENT_TABLE() MyChild::MyChild(wxFrame *frame, const wxString& title, const wxPoint& pos, const wxSize& size, const long style): - wxFrame(frame, -1, title, pos, size, style) +wxFrame(frame, -1, title, pos, size, style) { - canvas = NULL; + canvas = NULL; } MyChild::~MyChild(void) @@ -382,23 +382,23 @@ void MyChild::OnNew(wxCommandEvent& event) mainWin->ShowWindow( TRUE ); mainWin->UpdateWindow(); } - + void MyChild::OnActivate(wxActivateEvent& event) { - if (event.GetActive() && canvas) - canvas->SetFocus(); + if (event.GetActive() && canvas) + canvas->SetFocus(); } // Dummy MFC window for specifying a valid main window to MFC, using // a wxWindows HWND. CDummyWindow::CDummyWindow(HWND hWnd):CWnd() { - Attach(hWnd); + Attach(hWnd); } // Don't let the CWnd destructor delete the HWND CDummyWindow::~CDummyWindow(void) { - Detach(); + Detach(); } diff --git a/src/msw/main.cpp b/src/msw/main.cpp index 6803110d50..00736a1394 100644 --- a/src/msw/main.cpp +++ b/src/msw/main.cpp @@ -33,6 +33,12 @@ #include "wx/msw/private.h" +// Don't implement WinMain if we're building an MFC/wxWindows +// hybrid app. +#if wxUSE_MFC && !defined(NOMAIN) +#define NOMAIN 1 +#endif + // from src/msw/app.cpp extern void WXDLLEXPORT wxEntryCleanup();