diff --git a/trackview.cpp b/trackview.cpp index 0a0bfc8..17e8fdb 100644 --- a/trackview.cpp +++ b/trackview.cpp @@ -15,24 +15,27 @@ static const int trackWidth = fontWidth * 16; static const int lines = 0x80; static const int tracks = 16; -int TrackView::getScreenY(int line) -{ - return topMarginHeight + (line * fontHeight) - scrollPosY; -} - -void TrackView::onCreate(HWND hwnd) +TrackView::TrackView(HWND hwnd) { scrollPosX = 0; scrollPosY = 0; windowWidth = -1; windowHeight = -1; - editLine = 0; - - setupScrollBars(hwnd); + this->hwnd = hwnd; } -void TrackView::onPaint(HWND hwnd) +int TrackView::getScreenY(int line) +{ + return topMarginHeight + (line * fontHeight) - scrollPosY; +} + +void TrackView::onCreate() +{ + setupScrollBars(); +} + +void TrackView::onPaint() { PAINTSTRUCT ps; HDC hdc = BeginPaint(hwnd, &ps); @@ -208,7 +211,7 @@ void TrackView::paintTracks(HDC hdc, RECT rcTracks) DeleteObject(editBrush); } -void TrackView::setupScrollBars(HWND hwnd) +void TrackView::setupScrollBars() { SCROLLINFO si = { sizeof(si) }; si.fMask = SIF_POS | SIF_PAGE | SIF_RANGE | SIF_DISABLENOSCROLL; @@ -226,7 +229,7 @@ void TrackView::setupScrollBars(HWND hwnd) SetScrollInfo(hwnd, SB_HORZ, &si, TRUE); } -void TrackView::scrollWindow(HWND hwnd, int scrollX, int scrollY) +void TrackView::scrollWindow(int scrollX, int scrollY) { RECT clip; GetClientRect(hwnd, &clip); @@ -246,7 +249,7 @@ void TrackView::scrollWindow(HWND hwnd, int scrollX, int scrollY) ); } -void TrackView::setScrollPos(HWND hwnd, int newScrollPosX, int newScrollPosY) +void TrackView::setScrollPos(int newScrollPosX, int newScrollPosY) { // clamp newscrollPosX newScrollPosX = max(newScrollPosX, 0); @@ -260,12 +263,12 @@ void TrackView::setScrollPos(HWND hwnd, int newScrollPosX, int newScrollPosY) scrollPosX = newScrollPosX; scrollPosY = newScrollPosY; - scrollWindow(hwnd, scrollX, scrollY); - setupScrollBars(hwnd); + scrollWindow(scrollX, scrollY); + setupScrollBars(); } } -void TrackView::setEditLine(HWND hwnd, int newEditLine) +void TrackView::setEditLine(int newEditLine) { int oldEditLine = editLine; editLine = newEditLine; @@ -289,7 +292,7 @@ void TrackView::setEditLine(HWND hwnd, int newEditLine) lineRect.bottom = lineRect.top + fontHeight; InvalidateRect(hwnd, &lineRect, TRUE); - setScrollPos(hwnd, scrollPosX, ((editLine + 1) * fontHeight) - (windowHeight / 2)); + setScrollPos(scrollPosX, ((editLine + 1) * fontHeight) - (windowHeight / 2)); } static int getScrollPos(HWND hwnd, int bar) @@ -299,82 +302,82 @@ static int getScrollPos(HWND hwnd, int bar) return int(si.nTrackPos); } -void TrackView::onVScroll(HWND hwnd, UINT sbCode, int newPos) +void TrackView::onVScroll(UINT sbCode, int newPos) { switch (sbCode) { case SB_TOP: - setEditLine(hwnd, 0); + setEditLine(0); break; case SB_LINEUP: - setEditLine(hwnd, editLine - 1); + setEditLine(editLine - 1); break; case SB_LINEDOWN: - setEditLine(hwnd, editLine + 1); + setEditLine(editLine + 1); break; case SB_PAGEUP: - setEditLine(hwnd, editLine - windowLines / 2); + setEditLine(editLine - windowLines / 2); break; case SB_PAGEDOWN: - setEditLine(hwnd, editLine + windowLines / 2); + setEditLine(editLine + windowLines / 2); break; case SB_THUMBPOSITION: case SB_THUMBTRACK: - setEditLine(hwnd, getScrollPos(hwnd, SB_VERT)); + setEditLine(getScrollPos(hwnd, SB_VERT)); break; } } -void TrackView::onHScroll(HWND hwnd, UINT sbCode, int newPos) +void TrackView::onHScroll(UINT sbCode, int newPos) { switch (sbCode) { case SB_LEFT: - setScrollPos(hwnd, 0, scrollPosY); + setScrollPos(0, scrollPosY); break; // SB_RIGHT currently missing. case SB_LINELEFT: - setScrollPos(hwnd, scrollPosX - fontWidth, scrollPosY); + setScrollPos(scrollPosX - fontWidth, scrollPosY); break; case SB_LINERIGHT: - setScrollPos(hwnd, scrollPosX + fontWidth, scrollPosY); + setScrollPos(scrollPosX + fontWidth, scrollPosY); break; case SB_PAGELEFT: - setScrollPos(hwnd, scrollPosX - 20, scrollPosY); + setScrollPos(scrollPosX - 20, scrollPosY); break; case SB_PAGEDOWN: - setScrollPos(hwnd, scrollPosX + 20, scrollPosY); + setScrollPos(scrollPosX + 20, scrollPosY); break; case SB_THUMBPOSITION: case SB_THUMBTRACK: - setScrollPos(hwnd, getScrollPos(hwnd, SB_HORZ), scrollPosY); + setScrollPos(getScrollPos(hwnd, SB_HORZ), scrollPosY); break; } } -void TrackView::onKeyDown(HWND hwnd, UINT keyCode, UINT flags) +void TrackView::onKeyDown(UINT keyCode, UINT flags) { switch (keyCode) { - case VK_UP: setEditLine(hwnd, editLine - 1); break; - case VK_DOWN: setEditLine(hwnd, editLine + 1); break; + case VK_UP: setEditLine(editLine - 1); break; + case VK_DOWN: setEditLine(editLine + 1); break; - case VK_PRIOR: setEditLine(hwnd, editLine - windowLines / 2); break; - case VK_NEXT: setEditLine(hwnd, editLine + windowLines / 2); break; + case VK_PRIOR: setEditLine(editLine - windowLines / 2); break; + case VK_NEXT: setEditLine(editLine + windowLines / 2); break; } } -void TrackView::onSize(HWND hwnd, int width, int height) +void TrackView::onSize(int width, int height) { const int oldWindowWidth = windowWidth; const int oldWindowHeight = windowHeight; @@ -384,16 +387,18 @@ void TrackView::onSize(HWND hwnd, int width, int height) windowLines = (height - topMarginHeight) / fontHeight; - setEditLine(hwnd, editLine); - setupScrollBars(hwnd); + setEditLine(editLine); + setupScrollBars(); } LRESULT TrackView::windowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { + ASSERT(hwnd == this->hwnd); + switch(msg) { case WM_CREATE: - onCreate(hwnd); + onCreate(); break; case WM_CLOSE: @@ -405,23 +410,23 @@ LRESULT TrackView::windowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) break; case WM_SIZE: - onSize(hwnd, LOWORD(lParam), HIWORD(lParam)); + onSize(LOWORD(lParam), HIWORD(lParam)); break; case WM_VSCROLL: - onVScroll(hwnd, LOWORD(wParam), getScrollPos(hwnd, SB_VERT)); + onVScroll(LOWORD(wParam), getScrollPos(hwnd, SB_VERT)); break; case WM_HSCROLL: - onHScroll(hwnd, LOWORD(wParam), getScrollPos(hwnd, SB_HORZ)); + onHScroll(LOWORD(wParam), getScrollPos(hwnd, SB_HORZ)); break; case WM_PAINT: - onPaint(hwnd); + onPaint(); break; case WM_KEYDOWN: - onKeyDown(hwnd, (UINT)wParam, (UINT)lParam); + onKeyDown((UINT)wParam, (UINT)lParam); break; default: @@ -442,7 +447,7 @@ LRESULT CALLBACK trackViewWindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM ASSERT(NULL == trackView); // allocate a TrackView instance - trackView = new TrackView(); + trackView = new TrackView(hwnd); // Set the TrackView instance #pragma warning(suppress:4244) /* remove a pointless warning */ diff --git a/trackview.h b/trackview.h index f338f71..daefe73 100644 --- a/trackview.h +++ b/trackview.h @@ -3,23 +3,25 @@ class TrackView { public: + TrackView(HWND hwnd); + // events - void onCreate(HWND hwnd); - void onPaint(HWND hwnd); - void onVScroll(HWND hwnd, UINT sbCode, int newPos); - void onHScroll(HWND hwnd, UINT sbCode, int newPos); - void onSize(HWND hwnd, int width, int height); - void onKeyDown(HWND hwnd, UINT keyCode, UINT flags); + void onCreate(); + void onPaint(); + void onVScroll(UINT sbCode, int newPos); + void onHScroll(UINT sbCode, int newPos); + void onSize(int width, int height); + void onKeyDown(UINT keyCode, UINT flags); // the window procedure LRESULT windowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam); void paintTracks(HDC hdc, RECT rcTracks); - void setupScrollBars(HWND hwnd); - void setScrollPos(HWND hwnd, int newScrollPosX, int newScrollPosY); - void setEditLine(HWND hwnd, int newEditLine); - void scrollWindow(HWND hwnd, int newScrollPosX, int newScrollPosY); + void setupScrollBars(); + void setScrollPos(int newScrollPosX, int newScrollPosY); + void setEditLine(int newEditLine); + void scrollWindow(int newScrollPosX, int newScrollPosY); int getScreenY(int line); @@ -27,6 +29,8 @@ public: int scrollPosX, scrollPosY; int windowWidth, windowHeight; int windowLines; + + HWND hwnd; }; ATOM registerTrackViewWindowClass(HINSTANCE hInstance);