commit 1b91475b6ca335331c8a1fd5f4463284f78c62ba Author: Erik Faye-Lund Date: Sun Feb 17 12:56:01 2008 +0000 initial commit diff --git a/stdafx.cpp b/stdafx.cpp new file mode 100644 index 0000000..ea985e8 --- /dev/null +++ b/stdafx.cpp @@ -0,0 +1,8 @@ +// stdafx.cpp : source file that includes just the standard includes +// synctracker2.pch will be the pre-compiled header +// stdafx.obj will contain the pre-compiled type information + +#include "stdafx.h" + +// TODO: reference any additional headers you need in STDAFX.H +// and not in this file diff --git a/stdafx.h b/stdafx.h new file mode 100644 index 0000000..ddacb46 --- /dev/null +++ b/stdafx.h @@ -0,0 +1,15 @@ +// stdafx.h : include file for standard system include files, +// or project specific include files that are used frequently, but +// are changed infrequently +// + +#pragma once + + +#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers +#include +#include + + + +// TODO: reference additional headers your program requires here diff --git a/synctracker2.cpp b/synctracker2.cpp new file mode 100644 index 0000000..1f73d6f --- /dev/null +++ b/synctracker2.cpp @@ -0,0 +1,248 @@ +// synctracker2.cpp : Defines the entry point for the console application. +// + +#include "stdafx.h" +#include + +const _TCHAR g_szClassName[] = _T("myWindowClass"); + +const int fontHeight = 16; +const int fontWidth = 12; +int scrollPosX; +int scrollPosY; + +int windowWidth; +int windowHeight; +int windowLines; + +void setupScrollBars(HWND hwnd) +{ + SCROLLINFO si = { sizeof(si) }; + si.fMask = SIF_POS | SIF_PAGE | SIF_RANGE | SIF_DISABLENOSCROLL; + si.nPos = scrollPosY; + si.nPage = windowLines; + si.nMin = 0; + si.nMax = 0x80; + SetScrollInfo(hwnd, SB_VERT, &si, TRUE); +} + +void scroll(HWND hwnd, int dx, int dy) +{ + const int oldScrollPosX = scrollPosX; + const int oldScrollPosY = scrollPosY; + + // update scrollPos + scrollPosX += dx; + scrollPosY += dy; + + // clamp scrollPos + scrollPosX = max(scrollPosX, 0); + scrollPosY = max(scrollPosY, 0); + + if (oldScrollPosX != scrollPosX || oldScrollPosY != scrollPosY) + { + ScrollWindowEx( + hwnd, + oldScrollPosX - scrollPosX, + (oldScrollPosY - scrollPosY) * fontHeight, + NULL, + NULL, + NULL, + NULL, + SW_INVALIDATE + ); + setupScrollBars(hwnd); + } +} + +void paintWindow(HWND hwnd) +{ + PAINTSTRUCT ps; + HDC hdc = BeginPaint(hwnd, &ps); + + SetBkMode(hdc, OPAQUE); +// SetBkColor(hdc, RGB(255, 0, 0)); + + int firstLine = scrollPosY + ps.rcPaint.top / fontHeight; + int lastLine = scrollPosY + (ps.rcPaint.bottom + fontHeight - 1) / fontHeight; + for (int x = 0; x < 10; ++x) + { + for (int y = firstLine; y < lastLine; ++y) + { + int val = y | (x << 8); + + /* format the text */ + char temp[256]; + _snprintf_s(temp, 256, "%04X ", val); + + TextOut(hdc, x * fontWidth * 5 - scrollPosX, (y - scrollPosY) * fontHeight, temp, int(strlen(temp))); + } + } + EndPaint(hwnd, &ps); +} + +void onCreate(HWND hwnd) +{ + scrollPosX = 0; + scrollPosY = 0; + windowWidth = -1; + windowHeight = -1; + setupScrollBars(hwnd); +} + +void onScroll(HWND hwnd, UINT sbCode, int newPos) +{ + switch (sbCode) + { + case SB_LINEUP: + scroll(hwnd, 0, -1); + break; + + case SB_LINEDOWN: + scroll(hwnd, 0, 1); + break; + + case SB_PAGEUP: + scroll(hwnd, 0, -windowLines); + break; + + case SB_PAGEDOWN: + scroll(hwnd, 0, windowLines); + break; + } +} + +void onSize(HWND hwnd, int width, int height) +{ + const int oldWindowWidth = windowWidth; + const int oldWindowHeight = windowHeight; + + windowWidth = width; + windowHeight = height; + + windowLines = height / fontHeight; + setupScrollBars(hwnd); +/* + if (oldWindowWidth < windowWidth) + { + RECT rightRect; + rightRect.left = oldWindowWidth; + rightRect.right = windowWidth; + InvalidateRect(hwnd, &rightRect, FALSE); + } +*/ +/* + if (oldWindowHeight < windowHeight) + { + RECT bottomRect; + bottomRect.left = 0; + bottomRect.right = width; + bottomRect.top = oldWindowHeight; + bottomRect.bottom = windowHeight; + printf("extending downwards! %d %d\n", bottomRect.top, bottomRect.bottom); + InvalidateRect(hwnd, &bottomRect, FALSE); + } +*/ +} + +void onPaint(HWND hwnd) +{ + paintWindow(hwnd); +} + +int getScrollPos(HWND hwnd, int bar) +{ + SCROLLINFO si = { sizeof(si), SIF_TRACKPOS }; + GetScrollInfo(hwnd, bar, &si); + return int(si.nTrackPos); +} + +LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) +{ + switch(msg) + { + case WM_CREATE: + onCreate(hwnd); + break; + + case WM_SIZE: + onSize(hwnd, LOWORD(lParam), HIWORD(lParam)); + break; + + case WM_CLOSE: + DestroyWindow(hwnd); + break; + + case WM_DESTROY: + PostQuitMessage(0); + break; + + case WM_VSCROLL: + onScroll(hwnd, LOWORD(wParam), getScrollPos(hwnd, SB_VERT)); + break; + + case WM_PAINT: + onPaint(hwnd); + break; + + default: + return DefWindowProc(hwnd, msg, wParam, lParam); + } + return 0; +} + +int _tmain(int argc, _TCHAR* argv[]) +{ + WNDCLASSEX wc; + HWND hwnd; + MSG Msg; + HINSTANCE hInstance = GetModuleHandle(NULL); + + //Step 1: Registering the Window Class + wc.cbSize = sizeof(WNDCLASSEX); + wc.style = 0; + wc.lpfnWndProc = WndProc; + wc.cbClsExtra = 0; + wc.cbWndExtra = 0; + wc.hInstance = hInstance; + wc.hIcon = LoadIcon(NULL, IDI_APPLICATION); + wc.hCursor = LoadCursor(NULL, IDC_ARROW); + wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); + wc.lpszMenuName = NULL; + wc.lpszClassName = g_szClassName; + wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION); + + if(!RegisterClassEx(&wc)) + { + MessageBox(NULL, _T("Window Registration Failed!"), _T("Error!"), MB_ICONEXCLAMATION | MB_OK); + return 0; + } + + // Step 2: Creating the Window + hwnd = CreateWindowEx( + WS_EX_CLIENTEDGE, + g_szClassName, + _T("The title of my window"), + WS_VSCROLL | WS_HSCROLL | WS_OVERLAPPEDWINDOW, + CW_USEDEFAULT, CW_USEDEFAULT, 240, 120, + NULL, NULL, hInstance, NULL + ); + + if(hwnd == NULL) + { + MessageBox(NULL, _T("Window Creation Failed!"), _T("Error!"), MB_ICONEXCLAMATION | MB_OK); + return 0; + } + + ShowWindow(hwnd, TRUE); + UpdateWindow(hwnd); + + // Step 3: The Message Loop + while(GetMessage(&Msg, NULL, 0, 0) > 0) + { + TranslateMessage(&Msg); + DispatchMessage(&Msg); + } + + return int(Msg.wParam); +} \ No newline at end of file diff --git a/synctracker2.sln b/synctracker2.sln new file mode 100644 index 0000000..43c2b9e --- /dev/null +++ b/synctracker2.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual Studio 2005 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "synctracker2", "synctracker2.vcproj", "{76B44BC8-8BB4-4B6E-B2FA-7738C9E7F80B}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Release|Win32 = Release|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {76B44BC8-8BB4-4B6E-B2FA-7738C9E7F80B}.Debug|Win32.ActiveCfg = Debug|Win32 + {76B44BC8-8BB4-4B6E-B2FA-7738C9E7F80B}.Debug|Win32.Build.0 = Debug|Win32 + {76B44BC8-8BB4-4B6E-B2FA-7738C9E7F80B}.Release|Win32.ActiveCfg = Release|Win32 + {76B44BC8-8BB4-4B6E-B2FA-7738C9E7F80B}.Release|Win32.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/synctracker2.vcproj b/synctracker2.vcproj new file mode 100644 index 0000000..12466f8 --- /dev/null +++ b/synctracker2.vcproj @@ -0,0 +1,205 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +