diff --git a/synctracker2.cpp b/synctracker2.cpp index 8d59f4f..6e986ec 100644 --- a/synctracker2.cpp +++ b/synctracker2.cpp @@ -8,13 +8,15 @@ const TCHAR *mainWindowClassName = _T("MainWindow"); +TrackView trackView; HWND trackViewWin; + LRESULT CALLBACK mainWindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { switch(msg) { case WM_CREATE: - trackViewWin = createTrackViewWindow(GetModuleHandle(NULL), hwnd); + trackViewWin = trackView.create(GetModuleHandle(NULL), hwnd); break; case WM_SIZE: diff --git a/trackview.cpp b/trackview.cpp index 462b992..93bfcd6 100644 --- a/trackview.cpp +++ b/trackview.cpp @@ -15,7 +15,7 @@ static const int trackWidth = fontWidth * 16; static const int lines = 0x80; static const int tracks = 32; -TrackView::TrackView(HWND hwnd) +TrackView::TrackView() { scrollPosX = 0; scrollPosY = 0; @@ -25,7 +25,7 @@ TrackView::TrackView(HWND hwnd) editLine = 0; editTrack = 0; - this->hwnd = hwnd; + this->hwnd = NULL; editBrush = CreateSolidBrush(RGB(255, 255, 0)); } @@ -523,10 +523,9 @@ static LRESULT CALLBACK trackViewWindowProc(HWND hwnd, UINT msg, WPARAM wParam, switch(msg) { case WM_NCCREATE: - ASSERT(NULL == trackView); - - // allocate a TrackView instance - trackView = new TrackView(hwnd); + // Get TrackView from createstruct + trackView = (TrackView*)((CREATESTRUCT*)lParam)->lpCreateParams; + trackView->hwnd = hwnd; // Set the TrackView instance #pragma warning(suppress:4244) /* remove a pointless warning */ @@ -543,8 +542,7 @@ static LRESULT CALLBACK trackViewWindowProc(HWND hwnd, UINT msg, WPARAM wParam, // call the window proc and store away the return code LRESULT res = trackView->windowProc(hwnd, msg, wParam, lParam); - // free the TrackView instance - delete trackView; + // get rid of the TrackView instance trackView = NULL; SetWindowLongPtr(hwnd, 0, (LONG_PTR)NULL); @@ -580,7 +578,7 @@ ATOM registerTrackViewWindowClass(HINSTANCE hInstance) return RegisterClassEx(&wc); } -HWND createTrackViewWindow(HINSTANCE hInstance, HWND hwndParent) +HWND TrackView::create(HINSTANCE hInstance, HWND hwndParent) { HWND hwnd = CreateWindowEx( WS_EX_CLIENTEDGE, @@ -588,7 +586,7 @@ HWND createTrackViewWindow(HINSTANCE hInstance, HWND hwndParent) WS_VSCROLL | WS_HSCROLL | WS_CHILD | WS_VISIBLE, CW_USEDEFAULT, CW_USEDEFAULT, // x, y CW_USEDEFAULT, CW_USEDEFAULT, // width, height - hwndParent, NULL, GetModuleHandle(NULL), NULL + hwndParent, NULL, GetModuleHandle(NULL), (void*)this ); return hwnd; } diff --git a/trackview.h b/trackview.h index 2032713..292d86b 100644 --- a/trackview.h +++ b/trackview.h @@ -5,9 +5,12 @@ class TrackView { public: - TrackView(HWND hwnd); + TrackView(); ~TrackView(); + HWND create(HINSTANCE hInstance, HWND hwndParent); + HWND getWin(){ return hwnd; } + private: // some nasty hackery to forward the window messages friend static LRESULT CALLBACK trackViewWindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam); @@ -48,4 +51,3 @@ private: }; ATOM registerTrackViewWindowClass(HINSTANCE hInstance); -HWND createTrackViewWindow(HINSTANCE hInstance, HWND hwndParent);