Author: tretiakov
Date: Tue Jul 18 15:59:22 2006
New Revision: 23137
URL:
http://svn.reactos.org/svn/reactos?rev=23137&view=rev
Log:
Testapps for NtUserDrawCaption. (I sent the patch to ros-dev for review)
Added:
trunk/reactos/base/applications/testsets/testsets.rbuild
trunk/reactos/base/applications/testsets/user32/
trunk/reactos/base/applications/testsets/user32/drawcaption/
trunk/reactos/base/applications/testsets/user32/drawcaption/capicon.c
trunk/reactos/base/applications/testsets/user32/drawcaption/capicon.rc
trunk/reactos/base/applications/testsets/user32/drawcaption/drawcap.c
trunk/reactos/base/applications/testsets/user32/drawcaption/drawcap.rc
trunk/reactos/base/applications/testsets/user32/drawcaption/drawcaption.rbuild
trunk/reactos/base/applications/testsets/user32/drawcaption/res/
trunk/reactos/base/applications/testsets/user32/drawcaption/res/icon1big.ico (with
props)
trunk/reactos/base/applications/testsets/user32/drawcaption/res/icon1sm.ico (with
props)
trunk/reactos/base/applications/testsets/user32/drawcaption/res/icon2big.ico (with
props)
trunk/reactos/base/applications/testsets/user32/drawcaption/res/icon2sm.ico (with
props)
trunk/reactos/base/applications/testsets/user32/drawcaption/resource.h
trunk/reactos/base/applications/testsets/user32/user32.rbuild
Added: trunk/reactos/base/applications/testsets/testsets.rbuild
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/base/applications/testsets…
==============================================================================
--- trunk/reactos/base/applications/testsets/testsets.rbuild (added)
+++ trunk/reactos/base/applications/testsets/testsets.rbuild Tue Jul 18 15:59:22 2006
@@ -1,0 +1,7 @@
+<?xml version="1.0"?>
+<!DOCTYPE project SYSTEM "tools/rbuild/project.dtd">
+<group>
+<directory name="user32">
+ <xi:include href="user32/user32.rbuild" />
+</directory>
+</group>
Added: trunk/reactos/base/applications/testsets/user32/drawcaption/capicon.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/base/applications/testsets…
==============================================================================
--- trunk/reactos/base/applications/testsets/user32/drawcaption/capicon.c (added)
+++ trunk/reactos/base/applications/testsets/user32/drawcaption/capicon.c Tue Jul 18
15:59:22 2006
@@ -1,0 +1,145 @@
+/*
+ * Copyright 2006 Saveliy Tretiakov
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include "windows.h"
+#include "stdio.h"
+#include "resource.h"
+
+WCHAR WndClass[] = L"capicon_class";
+
+HINSTANCE hInst;
+INT testnum = 0;
+
+
+LRESULT CALLBACK WndProc(HWND hWnd,
+ UINT msg,
+ WPARAM wParam,
+ LPARAM lParam)
+{
+ HICON hIcon;
+
+ switch (msg)
+ {
+ case WM_GETICON:
+ if(testnum>2)
+ {
+ if(wParam == ICON_SMALL)
+ hIcon = LoadIcon(hInst, MAKEINTRESOURCE(ID_ICON2SM));
+ else if(wParam == ICON_BIG)
+ hIcon = LoadIcon(hInst, MAKEINTRESOURCE(ID_ICON2BIG));
+ else hIcon = (HICON)1;
+
+ if(!hIcon)
+ {
+ printf("LoadIcon() failed: %d\n", (INT)GetLastError());
+ break;
+ }
+
+ return (LRESULT)hIcon;
+ }
+ break;
+
+ case WM_DESTROY:
+ PostQuitMessage(0);
+ return 0;
+ }
+
+ return DefWindowProc(hWnd, msg, wParam, lParam);
+}
+
+
+INT main(INT argc, CHAR **argv)
+{
+ HWND hWnd;
+ MSG msg;
+ WNDCLASSEX wcx;
+ UINT result;
+
+ if(argc<2)
+ {
+ printf("DrawCaption icon test.\n");
+ printf("USAGE: drawcap.exe <testnumber>\n\n");
+ printf("Available tests:\n"
+ "1. Class small icon\n"
+ "2. Class big icon\n"
+ "3. Class small icon + WM_GETICON\n"
+ "4. Class big icon + WM_GETICON\n"
+ "5. WM_GETICON only\n\n");
+ return 0;
+ }
+
+ testnum = atoi(argv[1]);
+ if(testnum < 1 || testnum > 5)
+ {
+ printf("Unknown test %d\n", testnum);
+ return 1;
+ }
+
+ hInst = GetModuleHandle(NULL);
+
+ memset(&wcx, 0, sizeof(wcx));
+ wcx.cbSize = sizeof(wcx);
+ wcx.style = CS_HREDRAW | CS_VREDRAW;
+ wcx.lpfnWndProc = (WNDPROC) WndProc;
+ wcx.hInstance = hInst;
+ wcx.hbrBackground = (HBRUSH)COLOR_WINDOW;
+ wcx.lpszClassName = WndClass;
+ if(testnum<5)wcx.hIcon = LoadIcon(hInst, MAKEINTRESOURCE(ID_ICON1BIG));
+ if(testnum == 1 || testnum == 3)
+ wcx.hIconSm = LoadIcon(hInst, MAKEINTRESOURCE(ID_ICON1SM));
+
+ if(!(result = RegisterClassEx(&wcx)))
+ {
+ printf("Shit! RegisterClassEx failed: %d\n",
+ (int)GetLastError());
+ return 1;
+ }
+
+ hWnd = CreateWindowEx(0,
+ WndClass,
+ L"DrawCaption icon test",
+ WS_OVERLAPPED|WS_THICKFRAME|WS_SYSMENU,
+ CW_USEDEFAULT,
+ CW_USEDEFAULT,
+ 250,
+ 100,
+ NULL,
+ 0,
+ hInst,
+ NULL);
+
+ if(!hWnd)
+ {
+ printf("Shit! Can't create wnd!\n");
+ UnregisterClass(WndClass, hInst);
+ return 1;
+ }
+
+
+ ShowWindow(hWnd, SW_SHOW);
+ UpdateWindow(hWnd);
+
+ while(GetMessage(&msg, NULL, 0, 0 ))
+ {
+ TranslateMessage(&msg);
+ DispatchMessage(&msg);
+ }
+
+ UnregisterClass(WndClass, hInst);
+ return 0;
+}
Added: trunk/reactos/base/applications/testsets/user32/drawcaption/capicon.rc
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/base/applications/testsets…
==============================================================================
--- trunk/reactos/base/applications/testsets/user32/drawcaption/capicon.rc (added)
+++ trunk/reactos/base/applications/testsets/user32/drawcaption/capicon.rc Tue Jul 18
15:59:22 2006
@@ -1,0 +1,13 @@
+#include <windows.h>
+#include "resource.h"
+
+#define REACTOS_STR_FILE_DESCRIPTION "ReactOS DrawCaption icon test\0"
+#define REACTOS_STR_INTERNAL_NAME "capicon\0"
+#define REACTOS_STR_ORIGINAL_FILENAME "capicon.exe\0"
+#include <reactos/version.rc>
+
+ID_ICON1BIG ICON res\icon1big.ico
+ID_ICON1SM ICON res\icon1sm.ico
+ID_ICON2BIG ICON res\icon2big.ico
+ID_ICON2SM ICON res\icon2sm.ico
+
Added: trunk/reactos/base/applications/testsets/user32/drawcaption/drawcap.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/base/applications/testsets…
==============================================================================
--- trunk/reactos/base/applications/testsets/user32/drawcaption/drawcap.c (added)
+++ trunk/reactos/base/applications/testsets/user32/drawcaption/drawcap.c Tue Jul 18
15:59:22 2006
@@ -1,0 +1,289 @@
+/*
+ * Copyright 2006 Saveliy Tretiakov
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include "windows.h"
+#include "resource.h"
+#include "stdio.h"
+
+WCHAR CaptWndClass[] = L"captwnd_class";
+
+HINSTANCE hInst;
+INT testnum = 0;
+
+//BOOL STDCALL (*DrawCaptionTemp) (
+// HWND hwnd,
+// HDC hdc,
+// const RECT *rect,
+// HFONT hFont,
+// HICON hIcon,
+// LPCWSTR str,
+// UINT uFlags);
+
+VOID CapTest(HWND hWnd,
+ HDC hDc,
+ LPRECT pR,
+ WCHAR *Text,
+ DWORD Flags,
+ WCHAR *AddonStr,
+ DWORD Addon)
+{
+ WCHAR Buf[512];
+
+ lstrcpy(Buf, AddonStr);
+ if(lstrlen(Buf))lstrcat(Buf, L" | ");
+ lstrcat(Buf, Text);
+
+ DrawText( hDc, Buf, lstrlen(Buf), pR, DT_LEFT );
+
+ pR->top+=20;
+ pR->bottom+=20;
+
+ if(!DrawCaption(hWnd, hDc, pR, Flags | Addon))
+ {
+ printf("PAINT: DrawCaption failed: %d\n", (int)GetLastError());
+ }
+
+ pR->top+=30;
+ pR->bottom+=30;
+}
+
+VOID DrawCaptionTest(HWND hWnd, HDC hDc, WCHAR *AddonStr, DWORD Addon)
+{
+ RECT Rect;
+ GetClientRect(hWnd, &Rect);
+ Rect.bottom = 30;
+ Rect.left = 10;
+ Rect.right-=10;
+ Rect.top = 10;
+
+ CapTest(hWnd, hDc, &Rect, L"DC_TEXT:", DC_TEXT, AddonStr, Addon);
+
+ CapTest(hWnd, hDc, &Rect,
+ L"DC_TEXT | DC_ACTIVE:",
+ DC_TEXT | DC_ACTIVE,
+ AddonStr, Addon);
+
+ CapTest(hWnd, hDc, &Rect,
+ L"DC_TEXT | DC_ICON:" ,
+ DC_TEXT | DC_ICON,
+ AddonStr, Addon);
+
+ CapTest(hWnd, hDc, &Rect,
+ L"DC_TEXT | DC_ACTIVE | DC_ICON:" ,
+ DC_TEXT | DC_ACTIVE | DC_ICON,
+ AddonStr, Addon);
+
+ CapTest(hWnd, hDc, &Rect,
+ L"DC_TEXT | DC_INBUTTON:" ,
+ DC_TEXT | DC_INBUTTON,
+ AddonStr, Addon);
+
+ CapTest(hWnd, hDc, &Rect,
+ L"DC_TEXT | DC_ACTIVE | DC_INBUTTON:" ,
+ DC_TEXT | DC_ACTIVE | DC_INBUTTON,
+ AddonStr, Addon);
+
+ CapTest(hWnd, hDc, &Rect,
+ L"DC_TEXT | DC_ICON | DC_INBUTTON:" ,
+ DC_TEXT | DC_ICON | DC_INBUTTON,
+ AddonStr, Addon);
+
+ CapTest(hWnd, hDc, &Rect,
+ L"DC_TEXT | DC_ACTIVE | DC_ICON | DC_INBUTTON:" ,
+ DC_TEXT | DC_ACTIVE | DC_ICON | DC_INBUTTON,
+ AddonStr, Addon);
+
+}
+
+LRESULT CALLBACK CaptWndProc(HWND hWnd,
+ UINT msg,
+ WPARAM wParam,
+ LPARAM lParam)
+{
+
+
+ switch (msg)
+ {
+
+ case WM_PAINT:
+ {
+ HDC hDc;
+ PAINTSTRUCT Ps;
+
+ hDc = BeginPaint(hWnd, &Ps);
+ SetBkMode( hDc, TRANSPARENT );
+
+ switch(testnum)
+ {
+ case 1:
+ DrawCaptionTest(hWnd, hDc, L"", 0);
+ break;
+ case 2:
+ DrawCaptionTest(hWnd, hDc, L"DC_GRADIENT", DC_GRADIENT);
+ break;
+ case 3:
+ DrawCaptionTest(hWnd, hDc, L"DC_SMALLCAP", DC_SMALLCAP);
+ break;
+ case 4:
+ DrawCaptionTest(hWnd, hDc, L"DC_BUTTONS", DC_BUTTONS);
+ break;
+ case 5:
+ DrawCaptionTest(hWnd, hDc,
+ L"DC_GRADIENT | DC_SMALLCAP",
+ DC_GRADIENT | DC_SMALLCAP);
+ break;
+ case 6:
+ DrawCaptionTest(hWnd, hDc,
+ L"DC_GRADIENT | DC_BUTTONS",
+ DC_GRADIENT | DC_BUTTONS);
+ break;
+ case 7:
+ DrawCaptionTest(hWnd, hDc,
+ L"DC_BUTTONS | DC_SMALLCAP",
+ DC_BUTTONS | DC_SMALLCAP);
+ break;
+ case 8:
+ DrawCaptionTest(hWnd, hDc,
+ L"DC_BUTTONS | DC_SMALLCAP | DC_GRADIENT",
+ DC_BUTTONS | DC_SMALLCAP | DC_GRADIENT);
+ break;
+ }
+
+ EndPaint(hWnd, &Ps);
+
+ return 0;
+ }
+
+ case WM_DESTROY:
+ {
+ PostQuitMessage(0);
+ return 0;
+ }
+ }
+
+ return DefWindowProc(hWnd, msg, wParam, lParam);
+}
+
+
+INT main(INT argc, CHAR **argv)
+{
+ HWND hWnd;
+ MSG msg;
+ WNDCLASSEX wcx;
+ UINT result;
+ HBRUSH hBr;
+ //HMODULE hLib;
+
+ if(argc<2)
+ {
+ printf("DrawCaption testcode.\n");
+ printf("USAGE: drawcap.exe <testnumber> [useicon]\n\n");
+ printf("Available tests:\n"
+ "1. DrawCaption test\n"
+ "2. DrawCaption test + DC_GRADIENT\n"
+ "3. DrawCaption test + DC_SMALLCAP\n"
+ "4. DrawCaption test + DC_BUTTONS\n"
+ "5. DrawCaption test + DC_GRADIENT | DC_SMALLCAP\n"
+ "6. DrawCaption test + DC_GRADIENT | DC_BUTTONS\n"
+ "7. DrawCaption test + DC_BUTTONS | DC_SMALLCAP\n"
+ "8. DrawCaption test + DC_BUTTONS | DC_SMALLCAP | DC_GRADIENT\n\n");
+ return 0;
+ }
+
+ testnum = atoi(argv[1]);
+ if(testnum < 1 || testnum > 8)
+ {
+ printf("Unknown test %d\n", testnum);
+ return 1;
+ }
+
+ hInst = GetModuleHandle(NULL);
+
+ //hLib = LoadLibrary(L"user32");
+ //if(!hLib)
+ //{
+ // printf("Shit! Can't load user32.dll\n");
+ // return 1;
+ //}
+
+ //DrawCaptionTemp = GetProcAddress(hLib, "DrawCaptionTempW");
+ //if(!DrawCaptionTemp)
+ //{
+ // printf("Shit! Can't get DrawCaptionTemp address\n");
+ // return 1;
+ //}
+
+ hBr = CreateSolidBrush(RGB(255, 255, 255));
+ if(!hBr)
+ {
+ printf("Shit! Can't create brush.");
+ return 1;
+ }
+
+ memset(&wcx, 0, sizeof(wcx));
+ wcx.cbSize = sizeof(wcx);
+ wcx.style = CS_HREDRAW | CS_VREDRAW;
+ wcx.lpfnWndProc = (WNDPROC) CaptWndProc;
+ wcx.hInstance = hInst;
+ wcx.hbrBackground = hBr;
+ wcx.lpszClassName = CaptWndClass;
+ if(argc > 2) wcx.hIconSm = LoadIcon(hInst, MAKEINTRESOURCE(ID_ICON1SM));
+
+ if(!(result = RegisterClassEx(&wcx)))
+ {
+ printf("Shit! RegisterClassEx failed: %d\n",
+ (int)GetLastError());
+ DeleteObject(hBr);
+ return 1;
+ }
+
+ hWnd = CreateWindowEx(0,
+ CaptWndClass,
+ L"DrawCaption test",
+ WS_OVERLAPPED|WS_THICKFRAME|WS_SYSMENU,
+ CW_USEDEFAULT,
+ CW_USEDEFAULT,
+ 600,
+ 470,
+ NULL,
+ 0,
+ hInst,
+ NULL);
+
+ if(!hWnd)
+ {
+ printf("Shit! Can't create wnd!\n");
+ UnregisterClass(CaptWndClass, hInst);
+ DeleteObject(hBr);
+ return 1;
+ }
+
+
+ ShowWindow(hWnd, SW_SHOW);
+ UpdateWindow(hWnd);
+
+ while(GetMessage(&msg, NULL, 0, 0 ))
+ {
+ TranslateMessage(&msg);
+ DispatchMessage(&msg);
+ }
+
+ DeleteObject(hBr);
+ UnregisterClass(CaptWndClass, hInst);
+ return 0;
+}
Added: trunk/reactos/base/applications/testsets/user32/drawcaption/drawcap.rc
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/base/applications/testsets…
==============================================================================
--- trunk/reactos/base/applications/testsets/user32/drawcaption/drawcap.rc (added)
+++ trunk/reactos/base/applications/testsets/user32/drawcaption/drawcap.rc Tue Jul 18
15:59:22 2006
@@ -1,0 +1,11 @@
+#include <windows.h>
+#include "resource.h"
+
+#define REACTOS_STR_FILE_DESCRIPTION "ReactOS DrawCaption test\0"
+#define REACTOS_STR_INTERNAL_NAME "drawcap\0"
+#define REACTOS_STR_ORIGINAL_FILENAME "drawcap.exe\0"
+#include <reactos/version.rc>
+
+ID_ICON1SM ICON res\icon1sm.ico
+
+
Added: trunk/reactos/base/applications/testsets/user32/drawcaption/drawcaption.rbuild
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/base/applications/testsets…
==============================================================================
--- trunk/reactos/base/applications/testsets/user32/drawcaption/drawcaption.rbuild
(added)
+++ trunk/reactos/base/applications/testsets/user32/drawcaption/drawcaption.rbuild Tue Jul
18 15:59:22 2006
@@ -1,0 +1,29 @@
+<module name="drawcap" type="win32cui"
installbase="system32" installname="drawcap.exe">
+ <include base="drawcap">.</include>
+ <define name="__USE_W32API" />
+ <define name="UNICODE" />
+ <define name="_UNICODE" />
+ <define name="_WIN32_IE">0x0500</define>
+ <define name="_WIN32_WINNT">0x0600</define>
+ <define name="WINVER">0x0600</define>
+ <library>kernel32</library>
+ <library>user32</library>
+ <library>gdi32</library>
+ <file>drawcap.c</file>
+ <file>drawcap.rc</file>
+</module>
+
+<module name="capicon" type="win32cui"
installbase="system32" installname="capicon.exe">
+ <include base="capicon">.</include>
+ <define name="__USE_W32API" />
+ <define name="UNICODE" />
+ <define name="_UNICODE" />
+ <define name="_WIN32_IE">0x0500</define>
+ <define name="_WIN32_WINNT">0x0600</define>
+ <define name="WINVER">0x0600</define>
+ <library>kernel32</library>
+ <library>user32</library>
+ <library>gdi32</library>
+ <file>capicon.c</file>
+ <file>capicon.rc</file>
+</module>
Added: trunk/reactos/base/applications/testsets/user32/drawcaption/res/icon1big.ico
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/base/applications/testsets…
==============================================================================
Binary file - no diff available.
Propchange: trunk/reactos/base/applications/testsets/user32/drawcaption/res/icon1big.ico
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream
Added: trunk/reactos/base/applications/testsets/user32/drawcaption/res/icon1sm.ico
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/base/applications/testsets…
==============================================================================
Binary file - no diff available.
Propchange: trunk/reactos/base/applications/testsets/user32/drawcaption/res/icon1sm.ico
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream
Added: trunk/reactos/base/applications/testsets/user32/drawcaption/res/icon2big.ico
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/base/applications/testsets…
==============================================================================
Binary file - no diff available.
Propchange: trunk/reactos/base/applications/testsets/user32/drawcaption/res/icon2big.ico
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream
Added: trunk/reactos/base/applications/testsets/user32/drawcaption/res/icon2sm.ico
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/base/applications/testsets…
==============================================================================
Binary file - no diff available.
Propchange: trunk/reactos/base/applications/testsets/user32/drawcaption/res/icon2sm.ico
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream
Added: trunk/reactos/base/applications/testsets/user32/drawcaption/resource.h
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/base/applications/testsets…
==============================================================================
--- trunk/reactos/base/applications/testsets/user32/drawcaption/resource.h (added)
+++ trunk/reactos/base/applications/testsets/user32/drawcaption/resource.h Tue Jul 18
15:59:22 2006
@@ -1,0 +1,10 @@
+#ifndef _CAPICON_RESOURCE_H
+#define _CAPICON_RESOURCE_H
+
+#define ID_ICON1BIG 101
+#define ID_ICON1SM 102
+#define ID_ICON2BIG 103
+#define ID_ICON2SM 104
+
+
+#endif /* _CAPICON_RESOURCE_H */
Added: trunk/reactos/base/applications/testsets/user32/user32.rbuild
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/base/applications/testsets…
==============================================================================
--- trunk/reactos/base/applications/testsets/user32/user32.rbuild (added)
+++ trunk/reactos/base/applications/testsets/user32/user32.rbuild Tue Jul 18 15:59:22
2006
@@ -1,0 +1,7 @@
+<?xml version="1.0"?>
+<!DOCTYPE project SYSTEM "tools/rbuild/project.dtd">
+<group>
+<directory name="drawcaption">
+ <xi:include href="drawcaption/drawcaption.rbuild" />
+</directory>
+</group>