summaryrefslogtreecommitdiff
path: root/win
diff options
context:
space:
mode:
authorleo2001-01-29 23:40:20 +0000
committerleo2001-01-29 23:40:20 +0000
commit284ee630366231f6a0c893c9b3d3ce1d62b925d6 (patch)
tree73474cfa4884260b75d942c9e3847c4663dbde28 /win
parent07636fc79aa7bcc76746e742925593ff085f076e (diff)
Minifig Wizard fixes
git-svn-id: http://svn.leocad.org/trunk@235 c7d43263-9d01-0410-8a33-9dba5d9f93d6
Diffstat (limited to 'win')
-rw-r--r--win/Figdlg.cpp28
-rw-r--r--win/Leocad.clw4
-rw-r--r--win/Mainfrm.cpp47
-rw-r--r--win/glwindow.cpp39
4 files changed, 72 insertions, 46 deletions
diff --git a/win/Figdlg.cpp b/win/Figdlg.cpp
index d40c1ca..60e4298 100644
--- a/win/Figdlg.cpp
+++ b/win/Figdlg.cpp
@@ -70,9 +70,33 @@ BOOL CMinifigDlg::OnInitDialog()
::GetWindowRect (::GetDlgItem(m_hWnd, IDC_PREVIEWSTATIC), &r);
ScreenToClient (&r);
+ HINSTANCE hInst = AfxGetInstanceHandle();
+ WNDCLASS wndcls;
+LRESULT CALLBACK GLWindowProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
+
+#define OPENGL_CLASSNAME _T("LeoCADOpenGLClass")
+#define MINIFIG_CLASSNAME _T("LeoCADMinifigOpenGLClass")
+
+ // check if our class is registered
+ if(!(GetClassInfo (hInst, MINIFIG_CLASSNAME, &wndcls)))
+ {
+ if (GetClassInfo (hInst, OPENGL_CLASSNAME, &wndcls))
+ {
+ // set our class name
+ wndcls.lpszClassName = MINIFIG_CLASSNAME;
+ wndcls.lpfnWndProc = GLWindowProc;
+
+ // register class
+ if (!AfxRegisterClass (&wndcls))
+ AfxThrowResourceException();
+ }
+ else
+ AfxThrowResourceException();
+ }
+
m_pMinifigWnd = new CWnd;
- m_pMinifigWnd->Create (NULL, NULL, WS_BORDER | WS_CHILD | WS_VISIBLE, r, this, 501);
- m_pMinifig->Create (m_pMinifigWnd);
+ m_pMinifigWnd->CreateEx (0, MINIFIG_CLASSNAME, "LeoCAD",
+ WS_BORDER | WS_CHILD | WS_VISIBLE, r, this, 0, m_pMinifig);
for (int i = 0; i < LC_MFW_NUMITEMS; i++)
((CColorPicker*)GetDlgItem (IDC_MF_HATCOLOR+i))->SetColorIndex (m_pMinifig->m_Colors[i]);
diff --git a/win/Leocad.clw b/win/Leocad.clw
index 07d379e..3852d08 100644
--- a/win/Leocad.clw
+++ b/win/Leocad.clw
@@ -2,7 +2,7 @@
[General Info]
Version=1
-LastClass=CMainFrame
+LastClass=CCADView
LastTemplate=CHeaderCtrl
NewFileInclude1=#include "stdafx.h"
NewFileInclude2=#include "leocad.h"
@@ -130,7 +130,7 @@ HeaderFile=Cadview.h
ImplementationFile=Cadview.cpp
Filter=C
VirtualFilter=VWC
-LastObject=CCADView
+LastObject=ID_FILE_PRINT_PREVIEW
[CLS:CColorPicker]
Type=0
diff --git a/win/Mainfrm.cpp b/win/Mainfrm.cpp
index d6819d1..f25fa78 100644
--- a/win/Mainfrm.cpp
+++ b/win/Mainfrm.cpp
@@ -933,51 +933,13 @@ void CMainFrame::OnActivateApp(BOOL bActive, HTASK hTask)
project->HandleNotify(LC_ACTIVATE, bActive ? 1 : 0);
}
-#include "glwindow.h"
#include "view.h"
-
-BOOL GLWindowPreTranslateMessage (GLWindow *wnd, MSG *pMsg);
-
-static LRESULT CALLBACK GLWindowProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
-{
- static CMapPtrToPtr WindowMap;
- GLWindow *wnd;
-
- if (uMsg == WM_CREATE)
- {
- View *view = new View (project, NULL);
- view->Create (hwnd);
-
- WindowMap.SetAt (hwnd, view);
- }
-
- wnd = (GLWindow*)WindowMap[hwnd];
-
- if (wnd)
- {
- MSG msg;
- msg.hwnd = hwnd;
- msg.message = uMsg;
- msg.wParam = wParam;
- msg.lParam = lParam;
-
- GLWindowPreTranslateMessage (wnd, &msg);
-
- if (uMsg == WM_DESTROY)
- {
- WindowMap.RemoveKey (hwnd);
- delete wnd;
- }
- }
-
- return DefWindowProc (hwnd, uMsg, wParam, lParam);
-}
+LRESULT CALLBACK GLWindowProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
void CMainFrame::OnViewNewView()
{
HINSTANCE hInst = AfxGetInstanceHandle();
WNDCLASS wndcls;
- CWnd *pWnd;
#define OPENGL_CLASSNAME _T("LeoCADOpenGLClass")
#define FLOATING_CLASSNAME _T("LeoCADFloatingOpenGLClass")
@@ -1000,9 +962,10 @@ void CMainFrame::OnViewNewView()
AfxThrowResourceException();
}
- pWnd = new CWnd ();
- pWnd->CreateEx (0, FLOATING_CLASSNAME, "LeoCAD",
+ View *view = new View (project, NULL);
+
+ CreateWindowEx (0, FLOATING_CLASSNAME, "LeoCAD",
WS_VISIBLE | WS_POPUPWINDOW | WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT, 200, 100,
- m_hWnd, (HMENU)0, NULL);
+ m_hWnd, (HMENU)0, hInst, view);
}
diff --git a/win/glwindow.cpp b/win/glwindow.cpp
index 91103ec..6ddf1df 100644
--- a/win/glwindow.cpp
+++ b/win/glwindow.cpp
@@ -81,11 +81,50 @@ BOOL GLWindowPreTranslateMessage (GLWindow *wnd, MSG *pMsg)
return FALSE;
}
+LRESULT CALLBACK GLWindowProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
+{
+ static CMapPtrToPtr WindowMap;
+ GLWindow *wnd;
+
+ if (uMsg == WM_CREATE)
+ {
+ LPCREATESTRUCT cs = (LPCREATESTRUCT)lParam;
+
+ wnd = (GLWindow*)cs->lpCreateParams;
+ wnd->Create (hwnd);
+ wnd->IncRef ();
+
+ WindowMap.SetAt (hwnd, wnd);
+ }
+
+ wnd = (GLWindow*)WindowMap[hwnd];
+
+ if (wnd)
+ {
+ MSG msg;
+ msg.hwnd = hwnd;
+ msg.message = uMsg;
+ msg.wParam = wParam;
+ msg.lParam = lParam;
+
+ GLWindowPreTranslateMessage (wnd, &msg);
+
+ if (uMsg == WM_DESTROY)
+ {
+ WindowMap.RemoveKey (hwnd);
+ wnd->DecRef ();
+ }
+ }
+
+ return DefWindowProc (hwnd, uMsg, wParam, lParam);
+}
+
// ============================================================================
// GLWindow class
GLWindow::GLWindow (GLWindow *share)
{
+ m_nRef = 0;
m_pShare = share;
m_pData = (GLWindowPrivate*) malloc (sizeof (GLWindowPrivate));
memset (m_pData, 0, sizeof (GLWindowPrivate));