This commit was manufactured by cvs2svn to create branch 'captive'.
[reactos.git] / apps / tests / icontest / icontest.c
diff --git a/apps/tests/icontest/icontest.c b/apps/tests/icontest/icontest.c
new file mode 100644 (file)
index 0000000..32ad1f7
--- /dev/null
@@ -0,0 +1,145 @@
+#include <windows.h>
+#include "resource.h"
+
+const char titleDrwIco[] = "DrawIcon Output";
+const char titleMask[] = "Mask(AND image)";
+const char titleXor[] = "XOR(color image)";
+const char file[] = "Icon from file:";
+const char res[] = "Icon from Resorce:";
+
+HFONT tf;
+HINSTANCE hInst;
+
+LRESULT WINAPI MainWndProc(HWND, UINT, WPARAM, LPARAM);
+
+int WINAPI 
+WinMain(HINSTANCE hInstance,
+    HINSTANCE hPrevInstance,
+    LPSTR lpszCmdLine,
+    int nCmdShow)
+{
+  WNDCLASS wc;
+  MSG msg;
+  HWND hWnd;
+
+  hInst = hInstance;
+
+  wc.lpszClassName = "IconTestClass";
+  wc.lpfnWndProc = MainWndProc;
+  wc.style = CS_VREDRAW | CS_HREDRAW;
+  wc.hInstance = hInstance;
+  wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
+  wc.hCursor = LoadCursor(NULL, IDC_ARROW);
+  wc.hbrBackground = (HBRUSH)GetStockObject(GRAY_BRUSH);
+  wc.lpszMenuName = NULL;
+  wc.cbClsExtra = 0;
+  wc.cbWndExtra = 0;
+  if (RegisterClass(&wc) == 0)
+  {
+    DbgPrint("RegisterClass failed (last error 0x%X)\n", GetLastError());
+    return(1);
+  }
+
+  hWnd = CreateWindow("IconTestClass",
+              "Icon Test",
+              WS_OVERLAPPEDWINDOW|WS_HSCROLL|WS_VSCROLL,
+              CW_USEDEFAULT,
+              CW_USEDEFAULT,
+              455,
+              320,
+              NULL,
+              NULL,
+              hInstance,
+              NULL);
+  if (hWnd == NULL)
+  {
+    DbgPrint("CreateWindow failed (last error 0x%X)\n", GetLastError());
+    return(1);
+  }
+    
+  tf = CreateFontA(14,0, 0, TA_BASELINE, FW_NORMAL, FALSE, FALSE, FALSE,
+                   ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS,
+                   DEFAULT_QUALITY, FIXED_PITCH|FF_DONTCARE, "Timmons");
+
+  ShowWindow(hWnd, nCmdShow);
+
+  while(GetMessage(&msg, NULL, 0, 0))
+  {
+    TranslateMessage(&msg);
+    DispatchMessage(&msg);
+  }
+
+  return msg.wParam;
+}
+
+LRESULT CALLBACK MainWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
+{
+    PAINTSTRUCT ps;
+    HDC hDC;
+    HICON hIcon;
+    HGDIOBJ hOld;
+    HDC hMemDC;
+    ICONINFO iconinfo;
+    HBITMAP hMaskBitmap;
+    HBITMAP hColorBitmap;    
+        
+    switch(msg)
+    {
+    case WM_PAINT:
+      hDC = BeginPaint(hWnd, &ps);
+      SelectObject(hDC, tf);
+      SetBkMode(hDC, TRANSPARENT);
+      
+      TextOut(hDC, 160, 10, file, strlen(file));
+      TextOut(hDC, 15, 85, titleDrwIco, strlen(titleDrwIco));
+      TextOut(hDC, 160, 85, titleMask, strlen(titleMask));
+      TextOut(hDC, 300, 85, titleXor, strlen(titleXor));
+      
+      hIcon = LoadImage(NULL, "icon.ICO", IMAGE_ICON, 0, 0, LR_DEFAULTSIZE|LR_LOADFROMFILE);
+      DrawIcon(hDC,50,50,hIcon);
+
+      hMemDC = CreateCompatibleDC(hDC);
+      GetIconInfo(hIcon, &iconinfo);
+      DestroyIcon(hIcon);
+
+      hOld = SelectObject(hMemDC, iconinfo.hbmMask);
+      BitBlt(hDC, 200, 50, 32, 32, hMemDC, 0, 0, SRCCOPY);
+      SelectObject(hMemDC, iconinfo.hbmColor);
+      BitBlt(hDC, 350, 50, 32, 32, hMemDC, 0, 0, SRCCOPY);
+
+      DeleteObject(iconinfo.hbmMask);
+      DeleteObject(iconinfo.hbmColor);
+
+      SelectObject(hMemDC, hOld);
+      
+      TextOut(hDC, 145, 150, res, strlen(res));
+      TextOut(hDC, 15, 225, titleDrwIco, strlen(titleDrwIco));
+      TextOut(hDC, 160, 225, titleMask, strlen(titleMask));
+      TextOut(hDC, 300, 225, titleXor, strlen(titleXor));
+          
+      hIcon = LoadImage(hInst, MAKEINTRESOURCE(IDI_ICON), IMAGE_ICON, 0, 0, LR_DEFAULTSIZE);          
+      DrawIcon(hDC,50,190,hIcon);
+          
+      GetIconInfo(hIcon, &iconinfo);
+      DestroyIcon(hIcon);          
+          
+      hOld = SelectObject(hMemDC, iconinfo.hbmMask);
+      BitBlt(hDC, 200, 190, 32, 32, hMemDC, 0, 0, SRCCOPY);
+      SelectObject(hMemDC, iconinfo.hbmColor);
+      BitBlt(hDC, 350, 190, 32, 32, hMemDC, 0, 0, SRCCOPY);
+
+      DeleteObject(iconinfo.hbmMask);
+      DeleteObject(iconinfo.hbmColor);
+      DeleteObject(hMemDC);          
+      EndPaint(hWnd, &ps);
+    break;
+
+    case WM_DESTROY:
+      PostQuitMessage(0);
+    break;
+
+    default:
+      return DefWindowProc(hWnd, msg, wParam, lParam);
+    }
+    return 0;
+}