|
|
1.1 ! root 1: /************************************************************************\ ! 2: * ! 3: * PROGRAM: MAIN.C ! 4: * ! 5: * PURPOSE: To test the resource-only DLL "THE_DLL.DLL". ! 6: * ! 7: * FUNCTIONS: WinMain() - initialization, create window, msg loop ! 8: * MainWndProc() - processes main window msgs ! 9: * DrawBitmap() - draw a specified bitmap in a specified DC ! 10: * ! 11: * COMMENTS: Loads the bitmap, the cursor, and the icon from ! 12: * THE_DLL.DLL. Uses the first two ni registering the ! 13: * app's window class. Uses the bitmap when painting ! 14: * the client area. ! 15: * ! 16: \************************************************************************/ ! 17: ! 18: #include <windows.h> ! 19: #include "Main.h" ! 20: #include "the_dll.h" ! 21: ! 22: ! 23: ! 24: /************************************************************************\ ! 25: * ! 26: * FUNCTION: WinMain (standard WinMain INPUTS/RETURNS) ! 27: * ! 28: * GLOBAL VARS: hLib - library instance handle ! 29: * ! 30: * LOCAL VARS: hwnd - handle of the main standard window ! 31: * msg - msg to get/dispatch ! 32: * ! 33: \************************************************************************/ ! 34: ! 35: int APIENTRY WinMain (HANDLE hInstance,HANDLE hPrevInstance, ! 36: LPSTR lpCmdLine, int nCmdShow) { ! 37: HWND hwnd; ! 38: MSG msg; ! 39: ! 40: ! 41: if ((hLib = LoadLibrary ((LPTSTR)"the_dll.dll")) == NULL) ! 42: { MessageBox (NULL, "WinMain(): LoadLibrary() failed", ! 43: "Err! - RESDLL", MB_OK | MB_ICONHAND); ! 44: return 0; ! 45: } ! 46: ! 47: if (!hPrevInstance) ! 48: { ! 49: WNDCLASS wc; ! 50: ! 51: wc.style = CS_HREDRAW | CS_VREDRAW;; ! 52: wc.lpfnWndProc = (WNDPROC)MainWndProc; ! 53: wc.cbClsExtra = 0; ! 54: wc.cbWndExtra = 0; ! 55: wc.hInstance = hInstance; ! 56: wc.hIcon = LoadIcon (hLib, "dllicon"); ! 57: wc.hCursor = LoadCursor (hLib, "dllcursor"); ! 58: wc.hbrBackground = GetStockObject (WHITE_BRUSH); ! 59: wc.lpszMenuName = NULL; ! 60: wc.lpszClassName = (LPSTR) "RESDLL"; ! 61: ! 62: if (!RegisterClass (&wc)) ! 63: { MessageBox (NULL, "WinMain(): RegisterClass() failed", ! 64: "Err! - MAIN", MB_OK | MB_ICONHAND); ! 65: return(FALSE); ! 66: } ! 67: } ! 68: ! 69: if (!(hwnd = CreateWindow ("RESDLL", "RESDLL Sample Application", ! 70: WS_OVERLAPPEDWINDOW, ! 71: CW_USEDEFAULT, CW_USEDEFAULT, ! 72: CW_USEDEFAULT, CW_USEDEFAULT, ! 73: NULL, NULL, hInstance, NULL))) ! 74: return (NULL); ! 75: ! 76: ShowWindow(hwnd, nCmdShow); ! 77: ! 78: while (GetMessage(&msg, NULL, NULL, NULL)) ! 79: { TranslateMessage(&msg); ! 80: DispatchMessage(&msg); ! 81: } ! 82: FreeLibrary (hLib); ! 83: return (msg.wParam); ! 84: UNREFERENCED_PARAMETER(lpCmdLine); ! 85: } ! 86: ! 87: ! 88: ! 89: /************************************************************************\ ! 90: * ! 91: * FUNCTION: MainWndProc (standard window procedure INPUTS/RETURNS) ! 92: * ! 93: * GLOBAL VARS: hLib - library instance handle ! 94: * ! 95: * LOCAL VARS: hbm - handle of bitmap in THE_DLL.DLL ! 96: * ! 97: \************************************************************************/ ! 98: ! 99: LONG APIENTRY MainWndProc (HWND hwnd, UINT message, UINT wParam, ! 100: LONG lParam) ! 101: { static HBITMAP hbm; ! 102: ! 103: switch (message) ! 104: { case WM_CREATE: ! 105: hbm = LoadBitmap (hLib, "dllbitmap"); ! 106: break; ! 107: case WM_PAINT: ! 108: { RECT rect; ! 109: PAINTSTRUCT ps; ! 110: ! 111: GetClientRect (hwnd, &rect); ! 112: BeginPaint (hwnd, &ps); ! 113: /******************************************************************\ ! 114: * draw the dllbitmap centered in middle of our client rect ! 115: \******************************************************************/ ! 116: DrawBitmap (ps.hdc, hbm, ! 117: rect.right/2 - DLLBITMAP_WIDTH/2, ! 118: rect.bottom/2 - DLLBITMAP_HEIGHT/2); ! 119: EndPaint (hwnd, &ps); ! 120: return 0; ! 121: } ! 122: case WM_DESTROY: ! 123: DeleteObject ((HANDLE) hbm); ! 124: PostQuitMessage(NULL); ! 125: break; ! 126: default: ! 127: return (DefWindowProc(hwnd, message, wParam, lParam)); ! 128: } ! 129: return (NULL); ! 130: } ! 131: ! 132: ! 133: ! 134: /************************************************************************\ ! 135: * ! 136: * FUNCTION: DrawBitmap ! 137: * ! 138: * INPUTS: hdc - device context in which to draw bitmap ! 139: * hbm - handle of bitmap to draw ! 140: * xStart - x-coordinate of upper-left corner of destination ! 141: * rectangle ! 142: * yStart - y-coordinate of upper-left corner of destination ! 143: * rectangle ! 144: * ! 145: * LOCAL VARS: bm - BITMAP info of "hbm" ! 146: * hdcMem - a memory DC used for blt-ing ! 147: * ! 148: * COMMENTS: Draws a bitmap "hbm" in a DC "hdc" given the upper-left ! 149: * corner "xStart,yStart" of a destination rectangle. ! 150: * ! 151: \************************************************************************/ ! 152: ! 153: void DrawBitmap (HDC hdc, HBITMAP hbm, int xStart, int yStart) ! 154: { ! 155: BITMAP bm; ! 156: HDC hdcMem; ! 157: ! 158: hdcMem = CreateCompatibleDC (hdc); ! 159: SelectObject (hdcMem, hbm); ! 160: SetMapMode (hdcMem, GetMapMode(hdc)); ! 161: ! 162: GetObject (hbm, sizeof(BITMAP), (LPSTR)&bm); ! 163: BitBlt (hdc, xStart, yStart, bm.bmWidth, bm.bmHeight, ! 164: hdcMem, 0, 0, SRCCOPY); ! 165: ! 166: DeleteDC(hdcMem); ! 167: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.