SPINTEST.C
资源名称:MSDN_VC98.zip [点击查看]
上传用户:bangxh
上传日期:2007-01-31
资源大小:42235k
文件大小:8k
源码类别:
Windows编程
开发平台:
Visual C++
- /******************************************************************************
- *
- * PROGRAM: SPINTEST.C
- *
- * PURPOSE: Demonstrates the use of the SPINCUBE custom control.
- *
- * FUNCTIONS: WinMain - standard stuff; also loads the
- * SPINCUBE.DLL and creates a couple
- * of spincube controls.
- * MainWndProc - generic window procedure.
- * SpintestDlgProc- generic dialog procedure.
- * AboutDlgProc - processes about dialog messages
- *
- * Microsoft Developer Support
- * Copyright (c) 1992-1997 Microsoft Corporation
- *
- ******************************************************************************/
- #include <windows.h>
- #include <stdio.h>
- #include "spintest.h"
- //
- // The exported variables from SPINCUBE.C.
- //
- // Although pointers to these vars are actually exported,
- // the compiler will take care of that for us.
- //
- extern int __declspec(dllimport) giNumSpincubesThisProcess;
- extern int __declspec(dllimport) giNumSpincubesAllProcesses;
- //
- // function prototype for looking up string resources
- //
- LPTSTR GetStringRes (int);
- /******************************************************************************
- *
- * FUNCTION: WinMain (standard WinMain INPUTS/RETURNS)
- *
- ******************************************************************************/
- int WINAPI WinMain (HINSTANCE hInstance,HINSTANCE hPrevInstance, LPSTR lpCmdLine,
- int nCmdShow)
- {
- WNDCLASS wc;
- HWND hwnd;
- MSG msg;
- RECT rect;
- WORD i;
- wc.style = 0;
- wc.lpfnWndProc = (WNDPROC) MainWndProc;
- wc.cbClsExtra = 0;
- wc.cbWndExtra = 0;
- wc.hInstance = hInstance;
- wc.hIcon = LoadIcon (hInstance, "spintesticon");
- wc.hCursor = LoadCursor (NULL, IDC_ARROW);
- wc.hbrBackground = GetStockObject (WHITE_BRUSH);
- wc.lpszMenuName = (LPSTR) "Menu";
- wc.lpszClassName = (LPSTR) "Main";
- if (!RegisterClass (&wc))
- {
- MessageBox (NULL,
- GetStringRes (IDS_REGCLASSFAIL),
- "SPINTEST", MB_OK | MB_ICONEXCLAMATION);
- return(FALSE);
- }
- ghInst = hInstance;
- if (!(hwnd = CreateWindow ("Main",
- GetStringRes (IDS_WINDOWTITLE),
- WS_OVERLAPPEDWINDOW,
- CW_USEDEFAULT, CW_USEDEFAULT,
- CW_USEDEFAULT, CW_USEDEFAULT,
- NULL, NULL, ghInst, NULL)))
- return 0;
- //
- // Create a couple of SpinCube custom controls, we'll size them later in
- // the WM_SIZE message handler
- //
- for (i = 0; i < 4; i++)
- gahwndSpin[i] = CreateWindow ("Spincube", "",
- WS_VISIBLE | WS_CHILD |
- SS_INMOTION | SS_ERASE,
- 0, 0, 0, 0, hwnd, NULL, NULL, NULL);
- //
- // Delete the SS_ERASE to the 1st & 4th controls so we get the
- // trailing cubes effect.
- //
- SetWindowLong (gahwndSpin[0], GWL_STYLE,
- GetWindowLong (gahwndSpin[0], GWL_STYLE) & ~ SS_ERASE);
- SetWindowLong (gahwndSpin[3], GWL_STYLE,
- GetWindowLong (gahwndSpin[3], GWL_STYLE) & ~ SS_ERASE);
- //
- // Send ourself a WM_SIZE so the controls will get sized appropriately
- //
- GetClientRect (hwnd, &rect);
- SendMessage (hwnd, WM_SIZE, 0,
- MAKELONG((WORD)rect.right,(WORD)rect.bottom));
- ShowWindow (hwnd, nCmdShow);
- while (GetMessage (&msg, NULL, 0, 0))
- {
- TranslateMessage (&msg);
- DispatchMessage (&msg);
- }
- return (msg.wParam);
- }
- /******************************************************************************
- *
- * FUNCTION: MainWndProc (standard window procedure INPUTS/RETURNS)
- *
- ******************************************************************************/
- LRESULT CALLBACK MainWndProc (HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
- {
- switch (msg)
- {
- case WM_COMMAND:
- switch (LOWORD(wParam))
- {
- case IDM_DLGEDITDIALOG:
- DialogBox (ghInst, (LPCTSTR) "SpintestDlg", hwnd, (DLGPROC) DlgProc);
- break;
- case IDM_SPINTESTSTATS:
- DialogBox (ghInst, (LPCTSTR) "Stats", hwnd, (DLGPROC) DlgProc);
- break;
- case IDM_ABOUT:
- DialogBox (ghInst, (LPCTSTR)"About", hwnd, (DLGPROC) DlgProc);
- break;
- }
- break;
- case WM_SIZE:
- {
- //
- // Resize the controls such that each cover half the client area
- // (plus a little border).
- //
- int width = (int) LOWORD(lParam);
- int height = (int) HIWORD(lParam);
- SetWindowPos (gahwndSpin[0], NULL,
- BORDER, BORDER,
- width/2 - BORDER, height/2 - BORDER,
- SWP_SHOWWINDOW);
- SetWindowPos (gahwndSpin[1], NULL,
- width/2 + BORDER, BORDER,
- width/2 - 2*BORDER, height/2 - BORDER,
- SWP_SHOWWINDOW);
- SetWindowPos (gahwndSpin[2], NULL,
- BORDER, height/2 + BORDER,
- width/2 - BORDER, height/2 - 2*BORDER,
- SWP_SHOWWINDOW);
- SetWindowPos (gahwndSpin[3], NULL,
- width/2 + BORDER, height/2 + BORDER,
- width/2 - 2*BORDER, height/2 - 2*BORDER,
- SWP_SHOWWINDOW);
- break;
- }
- case WM_DESTROY:
- PostQuitMessage (0);
- break;
- default:
- return (DefWindowProc (hwnd, msg, wParam, lParam));
- }
- return 0;
- }
- /******************************************************************************
- *
- * FUNCTION: DlgProc (standard dialog procedure INPUTS/RETURNS)
- *
- * COMMENTS: Our common dlg proc (why have 3 that do the same thing???)
- *
- ******************************************************************************/
- LRESULT CALLBACK DlgProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
- {
- switch (message)
- {
- case WM_INITDIALOG:
- //
- // If this dlg the "Stats" dlg fill in the appropriate fields.
- // If not these calls will just fail.
- //
- // If the references to the giNum* vars are commented out &
- // the program gets rebuilt don't be surprised if no spincubes
- // appear- since no references to spincube.lib the linker will
- // infer that it is not needed, & will not cause it to get
- // loaded. You'll need to make a call to LoadLibrary ("SPINCUBE.DLL")
- // prior to calling CreateWindow ("SPINCUBE"...).
- //
- SetDlgItemInt (hwnd, 500, giNumSpincubesThisProcess, TRUE);
- SetDlgItemInt (hwnd, 501, giNumSpincubesAllProcesses, TRUE);
- return (TRUE);
- case WM_COMMAND:
- if (LOWORD(wParam) == IDOK)
- EndDialog (hwnd, TRUE);
- return (TRUE);
- }
- return (FALSE);
- }
- /******************************************************************************
- *
- * FUNCTION: GetStringRes (int id INPUT ONLY)
- *
- * COMMENTS: Load the resource string with the ID given, and return a
- * pointer to it. Notice that the buffer is common memory so
- * the string must be used before this call is made a second time.
- *
- ******************************************************************************/
- LPTSTR GetStringRes (int id)
- {
- static TCHAR buffer[MAX_PATH];
- buffer[0]=0;
- LoadString (GetModuleHandle (NULL), id, buffer, MAX_PATH);
- return buffer;
- }