C:/Users/thebigMuh/Documents/Visual Studio 2005/Projects/Volumizer/Volumizer/SplitterWnd.cpp

Go to the documentation of this file.
00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 #include "Volumizer.h"
00009 
00010 extern HWND wnd_main, wnd_3d, wnd_front, wnd_left, wnd_top;
00011 
00012 ATOM RegisterSplitterClass(HINSTANCE hInstance)
00013 {
00014         WNDCLASSEX wcex;
00015 
00016         wcex.cbSize = sizeof(WNDCLASSEX);
00017 
00018         wcex.style                      = CS_HREDRAW | CS_VREDRAW;
00019         wcex.lpfnWndProc        = SplitterProc;
00020         wcex.cbClsExtra         = 0;
00021         wcex.cbWndExtra         = 0;
00022         wcex.hInstance          = hInstance;
00023         wcex.hIcon                      = NULL;
00024         wcex.hCursor            = LoadCursor(NULL, IDC_SIZEWE);
00025         wcex.hbrBackground      = (HBRUSH)(COLOR_3DFACE+1);
00026         wcex.lpszMenuName       = NULL;
00027         wcex.lpszClassName      = L"SplitterWnd";
00028         wcex.hIconSm            = NULL;
00029 
00030         return RegisterClassEx(&wcex);
00031 }
00032 
00036 LRESULT CALLBACK SplitterProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
00037 {
00038         PAINTSTRUCT ps;
00039         HDC hdc;
00040         POINT mpos;
00041 
00042         switch (message)
00043         {
00044         case WM_LBUTTONDOWN:
00045                 //grab the bar
00046                 SetCapture(hWnd);
00047                 break;
00048         case WM_LBUTTONUP:
00049                 ReleaseCapture();
00050                 break;
00051         case WM_MOUSEMOVE:
00052                 // take care of shoving the client windows around
00053                 if (GetCapture() == hWnd)
00054                 {
00055                         GetCursorPos(&mpos);
00056                         RECT rect;
00057                         GetClientRect(wnd_main, &rect);
00058 
00059                         ScreenToClient(wnd_main, &mpos);
00060 
00061                         if (mpos.x < 20)
00062                                 mpos.x = 20;
00063 
00064                         if (mpos.x > rect.right - 20)
00065                                 mpos.x = rect.right - 20;
00066 
00067                         SetWindowPos(hWnd, NULL, mpos.x, TOOL_HEIGHT, 0, 0, SWP_NOSIZE);
00068                         SetWindowPos(wnd_3d, NULL, mpos.x + SPLITTER_WIDTH, TOOL_HEIGHT, rect.right - (mpos.x + SPLITTER_WIDTH), rect.bottom - TOOL_HEIGHT - HISTOGRAM_HEIGHT, NULL);
00069 
00070                         SetWindowPos(wnd_histogram, NULL, mpos.x + SPLITTER_WIDTH, rect.bottom - HISTOGRAM_HEIGHT, rect.right - (mpos.x + SPLITTER_WIDTH), HISTOGRAM_HEIGHT, NULL);
00071 
00072                         SetWindowPos(wnd_front, NULL, 0, TOOL_HEIGHT, mpos.x, (rect.bottom - TOOL_HEIGHT)/3, NULL);
00073                         SetWindowPos(wnd_left, NULL, 0, (rect.bottom - TOOL_HEIGHT)/3 + TOOL_HEIGHT, mpos.x, (rect.bottom - TOOL_HEIGHT)/3, NULL);
00074                         SetWindowPos(wnd_top, NULL, 0, (rect.bottom - TOOL_HEIGHT)*2/3 + TOOL_HEIGHT, mpos.x, (rect.bottom - TOOL_HEIGHT)/3, NULL);
00075 
00076                         UpdateWindow(hWnd);
00077                         UpdateWindow(wnd_3d);
00078 
00079                         UpdateWindow(wnd_front);
00080                         UpdateWindow(wnd_left);
00081                         UpdateWindow(wnd_top);
00082                 }
00083                 break;
00084         case WM_SIZE:
00085                 // resize all client windows
00086                 RECT rect;
00087                 GetClientRect(wnd_main, &rect);
00088 
00089                 RECT splitterrect;
00090                 GetWindowRect(hWnd, &splitterrect);
00091                 POINT splitterpos;
00092                 splitterpos.x = splitterrect.left;
00093 
00094                 ScreenToClient(wnd_main, &splitterpos);
00095 
00096                 SetWindowPos(hWnd, NULL, 0, 0, SPLITTER_WIDTH, rect.bottom - TOOL_HEIGHT, SWP_NOMOVE);
00097                 SetWindowPos(wnd_3d, NULL, splitterpos.x + SPLITTER_WIDTH, TOOL_HEIGHT, rect.right - (splitterpos.x + SPLITTER_WIDTH), rect.bottom - TOOL_HEIGHT - HISTOGRAM_HEIGHT, NULL);
00098 
00099                 SetWindowPos(wnd_histogram, NULL, splitterpos.x + SPLITTER_WIDTH, rect.bottom - HISTOGRAM_HEIGHT, rect.right - (splitterpos.x + SPLITTER_WIDTH), HISTOGRAM_HEIGHT, NULL);
00100 
00101                 SetWindowPos(wnd_front, NULL, 0, TOOL_HEIGHT, splitterpos.x, (rect.bottom - TOOL_HEIGHT)/3, SWP_NOMOVE);
00102                 SetWindowPos(wnd_left, NULL, 0, (rect.bottom - TOOL_HEIGHT)/3 + TOOL_HEIGHT, splitterpos.x, (rect.bottom - TOOL_HEIGHT)/3, NULL);
00103                 SetWindowPos(wnd_top, NULL, 0, (rect.bottom - TOOL_HEIGHT)*2/3 + TOOL_HEIGHT, splitterpos.x, (rect.bottom - TOOL_HEIGHT)/3, NULL);
00104                 break;
00105         case WM_PAINT:
00106                 hdc = BeginPaint(hWnd, &ps);
00107                 // TODO: Add any drawing code here...
00108                 EndPaint(hWnd, &ps);
00109                 break;
00110         case WM_DESTROY:
00111                 PostQuitMessage(0);
00112                 break;
00113         default:
00114                 return DefWindowProc(hWnd, message, wParam, lParam);
00115         }
00116         return 0;
00117 }

Generated on Wed Dec 5 12:07:30 2007 for Volumizer by  doxygen 1.5.4