mirror of
https://github.com/reactos/reactos.git
synced 2025-04-27 09:00:27 +00:00
The start of a GUI to make running the Wine API tests a pleasure rather than a pain.
This will plug into the new testing framework for the Wine tests, which will also publish it's results on a live website (if I can get Colin to help me with the web stuff ;) ) This is the time to pester me with requests / ideas anyone may have. svn path=/trunk/; revision=34016
This commit is contained in:
parent
d73e9e4231
commit
cda095c0fe
9 changed files with 773 additions and 0 deletions
11
rostests/winetests/GUI/WinetestsGUI.rc
Normal file
11
rostests/winetests/GUI/WinetestsGUI.rc
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
#include <windows.h>
|
||||||
|
#include <commctrl.h>
|
||||||
|
#include "resource.h"
|
||||||
|
|
||||||
|
|
||||||
|
#define REACTOS_STR_FILE_DESCRIPTION "ReactOS Character Map\0"
|
||||||
|
#define REACTOS_STR_INTERNAL_NAME "charmap\0"
|
||||||
|
#define REACTOS_STR_ORIGINAL_FILENAME "charmap.exe\0"
|
||||||
|
//#include <reactos/version.rc>
|
||||||
|
|
||||||
|
#include "rsrc.rc"
|
224
rostests/winetests/GUI/browsewnd.c
Normal file
224
rostests/winetests/GUI/browsewnd.c
Normal file
|
@ -0,0 +1,224 @@
|
||||||
|
/*
|
||||||
|
* PROJECT: ReactOS Character Map
|
||||||
|
* LICENSE: GPL - See COPYING in the top level directory
|
||||||
|
* FILE:
|
||||||
|
* PURPOSE: browse dialog implementation
|
||||||
|
* COPYRIGHT: Copyright 2008 Ged Murphy <gedmurphy@reactos.org>
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <precomp.h>
|
||||||
|
|
||||||
|
#define DLL_SEARCH_DIR L"\\Debug\\testlibs\\*"
|
||||||
|
|
||||||
|
static INT
|
||||||
|
GetNumberOfDllsInFolder(LPWSTR lpFolder)
|
||||||
|
{
|
||||||
|
HANDLE hFind;
|
||||||
|
WIN32_FIND_DATAW findFileData;
|
||||||
|
INT numFiles = 0;
|
||||||
|
|
||||||
|
hFind = FindFirstFileW(lpFolder,
|
||||||
|
&findFileData);
|
||||||
|
if (hFind == INVALID_HANDLE_VALUE)
|
||||||
|
{
|
||||||
|
DisplayError(GetLastError());
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
do
|
||||||
|
{
|
||||||
|
if (!(findFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
|
||||||
|
{
|
||||||
|
numFiles++;
|
||||||
|
}
|
||||||
|
} while (FindNextFile(hFind, &findFileData) != 0);
|
||||||
|
|
||||||
|
return numFiles;
|
||||||
|
}
|
||||||
|
|
||||||
|
static INT
|
||||||
|
GetListOfTestDlls(PMAIN_WND_INFO pInfo)
|
||||||
|
{
|
||||||
|
HANDLE hFind;
|
||||||
|
WIN32_FIND_DATAW findFileData;
|
||||||
|
WCHAR szDllPath[MAX_PATH];
|
||||||
|
LPWSTR ptr;
|
||||||
|
INT numFiles = 0;
|
||||||
|
INT len;
|
||||||
|
|
||||||
|
len = GetCurrentDirectory(MAX_PATH, szDllPath);
|
||||||
|
if (!len) return 0;
|
||||||
|
|
||||||
|
wcsncat(szDllPath, DLL_SEARCH_DIR, MAX_PATH - (len + 1));
|
||||||
|
|
||||||
|
numFiles = GetNumberOfDllsInFolder(szDllPath);
|
||||||
|
if (!numFiles) return 0;
|
||||||
|
|
||||||
|
pInfo->lpDllList = HeapAlloc(GetProcessHeap(), 0, numFiles * (MAX_PATH * sizeof(WCHAR)));
|
||||||
|
if (!pInfo->lpDllList)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
hFind = FindFirstFileW(szDllPath,
|
||||||
|
&findFileData);
|
||||||
|
if (hFind == INVALID_HANDLE_VALUE)
|
||||||
|
{
|
||||||
|
DisplayError(GetLastError());
|
||||||
|
HeapFree(GetProcessHeap(), 0, pInfo->lpDllList);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* remove the glob */
|
||||||
|
ptr = wcschr(szDllPath, L'*');
|
||||||
|
if (ptr)
|
||||||
|
*ptr = L'\0';
|
||||||
|
|
||||||
|
/* don't mod our base pointer */
|
||||||
|
ptr = pInfo->lpDllList;
|
||||||
|
|
||||||
|
do
|
||||||
|
{
|
||||||
|
if (!(findFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
|
||||||
|
{
|
||||||
|
//MessageBoxW(NULL, findFileData.cFileName, NULL, 0);
|
||||||
|
|
||||||
|
/* set the path */
|
||||||
|
wcscpy(ptr, szDllPath);
|
||||||
|
|
||||||
|
/* tag the file onto the path */
|
||||||
|
len = MAX_PATH - (wcslen(ptr) + 1);
|
||||||
|
wcsncat(ptr, findFileData.cFileName, len);
|
||||||
|
|
||||||
|
/* move the pointer along by MAX_PATH */
|
||||||
|
ptr += MAX_PATH;
|
||||||
|
}
|
||||||
|
} while (FindNextFile(hFind, &findFileData) != 0);
|
||||||
|
|
||||||
|
return numFiles;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HTREEITEM
|
||||||
|
InsertIntoTreeView(HWND hTreeView,
|
||||||
|
HTREEITEM hRoot,
|
||||||
|
LPWSTR lpLabel,
|
||||||
|
LPWSTR lpDllPath,
|
||||||
|
INT Image)
|
||||||
|
{
|
||||||
|
TV_ITEM tvi;
|
||||||
|
TV_INSERTSTRUCT tvins;
|
||||||
|
|
||||||
|
ZeroMemory(&tvi, sizeof(tvi));
|
||||||
|
ZeroMemory(&tvins, sizeof(tvins));
|
||||||
|
|
||||||
|
tvi.mask = TVIF_TEXT | TVIF_PARAM | TVIF_IMAGE | TVIF_SELECTEDIMAGE;
|
||||||
|
tvi.pszText = lpLabel;
|
||||||
|
tvi.cchTextMax = lstrlen(lpLabel);
|
||||||
|
tvi.lParam = (LPARAM)lpDllPath;
|
||||||
|
tvi.iImage = Image;
|
||||||
|
tvi.iSelectedImage = Image;
|
||||||
|
|
||||||
|
//tvi.stateMask = TVIS_OVERLAYMASK;
|
||||||
|
|
||||||
|
tvins.item = tvi;
|
||||||
|
tvins.hParent = hRoot;
|
||||||
|
|
||||||
|
return TreeView_InsertItem(hTreeView, &tvins);
|
||||||
|
}
|
||||||
|
|
||||||
|
static VOID
|
||||||
|
PopulateTreeView(PMAIN_WND_INFO pInfo)
|
||||||
|
{
|
||||||
|
HWND hTreeView;
|
||||||
|
HTREEITEM hRoot;
|
||||||
|
HBITMAP hComp;
|
||||||
|
TCHAR ComputerName[MAX_PATH];
|
||||||
|
DWORD dwSize = MAX_PATH;
|
||||||
|
INT RootImage;
|
||||||
|
|
||||||
|
hTreeView = GetDlgItem(pInfo->hBrowseDlg, IDC_TREEVIEW);
|
||||||
|
|
||||||
|
(void)TreeView_DeleteAllItems(hTreeView);
|
||||||
|
|
||||||
|
/* insert the root item into the tree */
|
||||||
|
hRoot = InsertIntoTreeView(hTreeView,
|
||||||
|
NULL,
|
||||||
|
ComputerName,
|
||||||
|
NULL,
|
||||||
|
0);//RootImage);
|
||||||
|
}
|
||||||
|
|
||||||
|
static VOID
|
||||||
|
PopulateTestList(PMAIN_WND_INFO pInfo)
|
||||||
|
{
|
||||||
|
INT numFiles;
|
||||||
|
|
||||||
|
if ((numFiles = GetListOfTestDlls(pInfo)))
|
||||||
|
{
|
||||||
|
PopulateTreeView(pInfo);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static BOOL
|
||||||
|
OnInitBrowseDialog(HWND hDlg,
|
||||||
|
LPARAM lParam)
|
||||||
|
{
|
||||||
|
PMAIN_WND_INFO pInfo;
|
||||||
|
|
||||||
|
pInfo = (PMAIN_WND_INFO)lParam;
|
||||||
|
|
||||||
|
pInfo->hBrowseDlg = hDlg;
|
||||||
|
|
||||||
|
SetWindowLongPtr(hDlg,
|
||||||
|
GWLP_USERDATA,
|
||||||
|
(LONG_PTR)pInfo);
|
||||||
|
|
||||||
|
PopulateTestList(pInfo);
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
BOOL CALLBACK
|
||||||
|
BrowseDlgProc(HWND hDlg,
|
||||||
|
UINT Message,
|
||||||
|
WPARAM wParam,
|
||||||
|
LPARAM lParam)
|
||||||
|
{
|
||||||
|
PMAIN_WND_INFO pInfo;
|
||||||
|
|
||||||
|
/* Get the window context */
|
||||||
|
pInfo = (PMAIN_WND_INFO)GetWindowLongPtr(hDlg,
|
||||||
|
GWLP_USERDATA);
|
||||||
|
if (pInfo == NULL && Message != WM_INITDIALOG)
|
||||||
|
{
|
||||||
|
goto HandleDefaultMessage;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch(Message)
|
||||||
|
{
|
||||||
|
case WM_INITDIALOG:
|
||||||
|
return OnInitBrowseDialog(hDlg, lParam);
|
||||||
|
|
||||||
|
case WM_COMMAND:
|
||||||
|
{
|
||||||
|
if ((LOWORD(wParam) == IDOK) || (LOWORD(wParam) == IDCANCEL))
|
||||||
|
{
|
||||||
|
HeapFree(GetProcessHeap(), 0, pInfo->lpDllList);
|
||||||
|
pInfo->lpDllList = NULL;
|
||||||
|
|
||||||
|
EndDialog(hDlg,
|
||||||
|
LOWORD(wParam));
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
HandleDefaultMessage:
|
||||||
|
default:
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
return FALSE;
|
||||||
|
}
|
35
rostests/winetests/GUI/lang/en-US.rc
Normal file
35
rostests/winetests/GUI/lang/en-US.rc
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
|
||||||
|
|
||||||
|
IDD_WINETESTGUI DIALOGEX 0, 0, 293, 262
|
||||||
|
STYLE DS_SETFONT | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME
|
||||||
|
CAPTION "Winetest GUI"
|
||||||
|
FONT 8, "MS Shell Dlg", 0, 0, 0x1
|
||||||
|
BEGIN
|
||||||
|
DEFPUSHBUTTON "OK",IDOK,236,241,50,14,WS_GROUP
|
||||||
|
CONTROL "",IDC_LIST,"SysListView32",LVS_ALIGNLEFT | WS_BORDER | WS_TABSTOP,7,69,279,103
|
||||||
|
EDITTEXT IDC_OUTPUT,7,175,279,62,ES_MULTILINE | ES_AUTOHSCROLL | ES_READONLY
|
||||||
|
COMBOBOX IDC_TESTSELECTION,27,12,205,30,CBS_DROPDOWN | CBS_SORT | WS_VSCROLL | WS_TABSTOP
|
||||||
|
LTEXT "Test:",IDC_STATIC,6,14,18,8
|
||||||
|
PUSHBUTTON "Browse...",IDC_BROWSE,236,11,50,14
|
||||||
|
PUSHBUTTON "Run",IDC_RUN,236,30,50,14
|
||||||
|
CONTROL "",IDC_PROGRESS,"msctls_progress32",PBS_SMOOTH | WS_BORDER,28,30,204,14
|
||||||
|
LTEXT "Runs:",IDC_STATIC,8,53,20,8
|
||||||
|
LTEXT "?",IDC_NUMRUNS,33,53,8,8
|
||||||
|
LTEXT "Errors:",IDC_STATIC,55,53,23,8
|
||||||
|
LTEXT "?",IDC_NUMERRORS,85,53,8,8
|
||||||
|
LTEXT "Failures:",IDC_STATIC,107,53,28,8
|
||||||
|
LTEXT "?",IDC_NUMFAILURES,141,53,8,8
|
||||||
|
PUSHBUTTON "Stop",IDC_STOP,236,49,50,14
|
||||||
|
CONTROL "Run on start",IDC_RUNONSTART,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,174,52,56,10
|
||||||
|
LTEXT "status bar",IDC_STATUS,7,244,210,8
|
||||||
|
END
|
||||||
|
|
||||||
|
IDD_TESTBROWSER DIALOGEX 0, 0, 259, 250
|
||||||
|
STYLE DS_SHELLFONT | WS_BORDER | WS_DLGFRAME | WS_SYSMENU | DS_MODALFRAME
|
||||||
|
CAPTION "Test hierarchy"
|
||||||
|
FONT 8, "MS Shell Dlg", 0, 0, 0x1
|
||||||
|
BEGIN
|
||||||
|
PUSHBUTTON "Select", IDC_SELECT, 202, 7, 50, 14
|
||||||
|
CONTROL "", IDC_TREEVIEW, "SysTreeView32", WS_BORDER | TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT, 7, 7, 189, 236
|
||||||
|
PUSHBUTTON "Close", IDOK, 202, 34, 50, 14
|
||||||
|
END
|
155
rostests/winetests/GUI/mainwnd.c
Normal file
155
rostests/winetests/GUI/mainwnd.c
Normal file
|
@ -0,0 +1,155 @@
|
||||||
|
/*
|
||||||
|
* PROJECT: ReactOS Character Map
|
||||||
|
* LICENSE: GPL - See COPYING in the top level directory
|
||||||
|
* FILE:
|
||||||
|
* PURPOSE: main dialog implementation
|
||||||
|
* COPYRIGHT: Copyright 2008 Ged Murphy <gedmurphy@reactos.org>
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <precomp.h>
|
||||||
|
|
||||||
|
HINSTANCE hInstance;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
static BOOL
|
||||||
|
OnInitMainDialog(HWND hDlg,
|
||||||
|
LPARAM lParam)
|
||||||
|
{
|
||||||
|
PMAIN_WND_INFO pInfo;
|
||||||
|
//HMENU hSysMenu;
|
||||||
|
LPWSTR lpAboutText;
|
||||||
|
|
||||||
|
pInfo = (PMAIN_WND_INFO)lParam;
|
||||||
|
|
||||||
|
/* Initialize the main window context */
|
||||||
|
pInfo->hMainWnd = hDlg;
|
||||||
|
|
||||||
|
SetWindowLongPtr(hDlg,
|
||||||
|
GWLP_USERDATA,
|
||||||
|
(LONG_PTR)pInfo);
|
||||||
|
|
||||||
|
pInfo->hSmIcon = LoadImageW(hInstance,
|
||||||
|
MAKEINTRESOURCEW(IDI_ICON),
|
||||||
|
IMAGE_ICON,
|
||||||
|
16,
|
||||||
|
16,
|
||||||
|
0);
|
||||||
|
if (pInfo->hSmIcon)
|
||||||
|
{
|
||||||
|
SendMessageW(hDlg,
|
||||||
|
WM_SETICON,
|
||||||
|
ICON_SMALL,
|
||||||
|
(LPARAM)pInfo->hSmIcon);
|
||||||
|
}
|
||||||
|
|
||||||
|
pInfo->hBgIcon = LoadImageW(hInstance,
|
||||||
|
MAKEINTRESOURCEW(IDI_ICON),
|
||||||
|
IMAGE_ICON,
|
||||||
|
32,
|
||||||
|
32,
|
||||||
|
0);
|
||||||
|
if (pInfo->hBgIcon)
|
||||||
|
{
|
||||||
|
SendMessageW(hDlg,
|
||||||
|
WM_SETICON,
|
||||||
|
ICON_BIG,
|
||||||
|
(LPARAM)pInfo->hBgIcon);
|
||||||
|
}
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static BOOL CALLBACK
|
||||||
|
MainDlgProc(HWND hDlg,
|
||||||
|
UINT Message,
|
||||||
|
WPARAM wParam,
|
||||||
|
LPARAM lParam)
|
||||||
|
{
|
||||||
|
PMAIN_WND_INFO pInfo;
|
||||||
|
|
||||||
|
/* Get the window context */
|
||||||
|
pInfo = (PMAIN_WND_INFO)GetWindowLongPtr(hDlg,
|
||||||
|
GWLP_USERDATA);
|
||||||
|
if (pInfo == NULL && Message != WM_INITDIALOG)
|
||||||
|
{
|
||||||
|
goto HandleDefaultMessage;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch(Message)
|
||||||
|
{
|
||||||
|
case WM_INITDIALOG:
|
||||||
|
return OnInitMainDialog(hDlg, lParam);
|
||||||
|
|
||||||
|
case WM_COMMAND:
|
||||||
|
{
|
||||||
|
switch(LOWORD(wParam))
|
||||||
|
{
|
||||||
|
case IDC_BROWSE:
|
||||||
|
DialogBoxParamW(hInstance,
|
||||||
|
MAKEINTRESOURCEW(IDD_TESTBROWSER),
|
||||||
|
hDlg,
|
||||||
|
(DLGPROC)BrowseDlgProc,
|
||||||
|
(LPARAM)pInfo);
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case IDOK:
|
||||||
|
EndDialog(hDlg, 0);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case WM_CLOSE:
|
||||||
|
if (pInfo->hSmIcon)
|
||||||
|
DestroyIcon(pInfo->hSmIcon);
|
||||||
|
if (pInfo->hBgIcon)
|
||||||
|
DestroyIcon(pInfo->hBgIcon);
|
||||||
|
EndDialog(hDlg, 0);
|
||||||
|
break;
|
||||||
|
|
||||||
|
HandleDefaultMessage:
|
||||||
|
default:
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
INT WINAPI
|
||||||
|
wWinMain(HINSTANCE hInst,
|
||||||
|
HINSTANCE hPrev,
|
||||||
|
LPWSTR Cmd,
|
||||||
|
int iCmd)
|
||||||
|
{
|
||||||
|
INITCOMMONCONTROLSEX iccx;
|
||||||
|
PMAIN_WND_INFO pInfo;
|
||||||
|
INT Ret = 1;
|
||||||
|
|
||||||
|
hInstance = hInst;
|
||||||
|
|
||||||
|
ZeroMemory(&iccx, sizeof(INITCOMMONCONTROLSEX));
|
||||||
|
iccx.dwSize = sizeof(INITCOMMONCONTROLSEX);
|
||||||
|
iccx.dwICC = ICC_TAB_CLASSES;
|
||||||
|
InitCommonControlsEx(&iccx);
|
||||||
|
|
||||||
|
pInfo = HeapAlloc(GetProcessHeap(), 0, sizeof(MAIN_WND_INFO));
|
||||||
|
if (pInfo)
|
||||||
|
{
|
||||||
|
Ret = (DialogBoxParamW(hInstance,
|
||||||
|
MAKEINTRESOURCEW(IDD_WINETESTGUI),
|
||||||
|
NULL,
|
||||||
|
(DLGPROC)MainDlgProc,
|
||||||
|
(LPARAM)pInfo) == IDOK);
|
||||||
|
|
||||||
|
HeapFree(GetProcessHeap(), 0, pInfo);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return Ret;
|
||||||
|
}
|
260
rostests/winetests/GUI/misc.c
Normal file
260
rostests/winetests/GUI/misc.c
Normal file
|
@ -0,0 +1,260 @@
|
||||||
|
/*
|
||||||
|
* PROJECT: ReactOS Services
|
||||||
|
* LICENSE: GPL - See COPYING in the top level directory
|
||||||
|
* FILE:
|
||||||
|
* PURPOSE: miscallanous functions
|
||||||
|
* COPYRIGHT: Copyright 2005 Thomas Weidenmueller <w3seek@reactos.org>
|
||||||
|
* Copyright 2006 - 2008 Ged Murphy <gedmurphy@gmail.com>
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <precomp.h>
|
||||||
|
|
||||||
|
static INT
|
||||||
|
LengthOfStrResource(IN HINSTANCE hInst,
|
||||||
|
IN UINT uID)
|
||||||
|
{
|
||||||
|
HRSRC hrSrc;
|
||||||
|
HGLOBAL hRes;
|
||||||
|
LPWSTR lpName, lpStr;
|
||||||
|
|
||||||
|
if (hInst == NULL)
|
||||||
|
{
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* There are always blocks of 16 strings */
|
||||||
|
lpName = (LPWSTR)MAKEINTRESOURCE((uID >> 4) + 1);
|
||||||
|
|
||||||
|
/* Find the string table block */
|
||||||
|
if ((hrSrc = FindResourceW(hInst, lpName, (LPWSTR)RT_STRING)) &&
|
||||||
|
(hRes = LoadResource(hInst, hrSrc)) &&
|
||||||
|
(lpStr = (WCHAR*) LockResource(hRes)))
|
||||||
|
{
|
||||||
|
UINT x;
|
||||||
|
|
||||||
|
/* Find the string we're looking for */
|
||||||
|
uID &= 0xF; /* position in the block, same as % 16 */
|
||||||
|
for (x = 0; x < uID; x++)
|
||||||
|
{
|
||||||
|
lpStr += (*lpStr) + 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Found the string */
|
||||||
|
return (int)(*lpStr);
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
INT
|
||||||
|
AllocAndLoadString(OUT LPWSTR *lpTarget,
|
||||||
|
IN HINSTANCE hInst,
|
||||||
|
IN UINT uID)
|
||||||
|
{
|
||||||
|
INT ln;
|
||||||
|
|
||||||
|
ln = LengthOfStrResource(hInst,
|
||||||
|
uID);
|
||||||
|
if (ln++ > 0)
|
||||||
|
{
|
||||||
|
(*lpTarget) = (LPTSTR)LocalAlloc(LMEM_FIXED,
|
||||||
|
ln * sizeof(TCHAR));
|
||||||
|
if ((*lpTarget) != NULL)
|
||||||
|
{
|
||||||
|
INT Ret;
|
||||||
|
if (!(Ret = LoadStringW(hInst, uID, *lpTarget, ln)))
|
||||||
|
{
|
||||||
|
LocalFree((HLOCAL)(*lpTarget));
|
||||||
|
}
|
||||||
|
return Ret;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
DWORD
|
||||||
|
LoadAndFormatString(IN HINSTANCE hInstance,
|
||||||
|
IN UINT uID,
|
||||||
|
OUT LPWSTR *lpTarget,
|
||||||
|
...)
|
||||||
|
{
|
||||||
|
DWORD Ret = 0;
|
||||||
|
LPTSTR lpFormat;
|
||||||
|
va_list lArgs;
|
||||||
|
|
||||||
|
if (AllocAndLoadString(&lpFormat,
|
||||||
|
hInstance,
|
||||||
|
uID) > 0)
|
||||||
|
{
|
||||||
|
va_start(lArgs, lpTarget);
|
||||||
|
/* let's use Format to format it because it has the ability to allocate
|
||||||
|
memory automatically */
|
||||||
|
Ret = FormatMessageW(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_STRING,
|
||||||
|
lpFormat,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
(LPTSTR)lpTarget,
|
||||||
|
0,
|
||||||
|
&lArgs);
|
||||||
|
va_end(lArgs);
|
||||||
|
|
||||||
|
LocalFree((HLOCAL)lpFormat);
|
||||||
|
}
|
||||||
|
|
||||||
|
return Ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL
|
||||||
|
StatusBarLoadAndFormatString(IN HWND hStatusBar,
|
||||||
|
IN INT PartId,
|
||||||
|
IN HINSTANCE hInstance,
|
||||||
|
IN UINT uID,
|
||||||
|
...)
|
||||||
|
{
|
||||||
|
BOOL Ret = FALSE;
|
||||||
|
LPWSTR lpFormat, lpStr;
|
||||||
|
va_list lArgs;
|
||||||
|
|
||||||
|
if (AllocAndLoadString(&lpFormat,
|
||||||
|
hInstance,
|
||||||
|
uID) > 0)
|
||||||
|
{
|
||||||
|
va_start(lArgs, uID);
|
||||||
|
/* let's use FormatMessage to format it because it has the ability to allocate
|
||||||
|
memory automatically */
|
||||||
|
Ret = FormatMessageW(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_STRING,
|
||||||
|
lpFormat,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
(VOID*)&lpStr,
|
||||||
|
0,
|
||||||
|
&lArgs);
|
||||||
|
va_end(lArgs);
|
||||||
|
|
||||||
|
if (lpStr != NULL)
|
||||||
|
{
|
||||||
|
Ret = (BOOL)SendMessageW(hStatusBar,
|
||||||
|
SB_SETTEXT,
|
||||||
|
(WPARAM)PartId,
|
||||||
|
(LPARAM)lpStr);
|
||||||
|
LocalFree((HLOCAL)lpStr);
|
||||||
|
}
|
||||||
|
|
||||||
|
LocalFree((HLOCAL)lpFormat);
|
||||||
|
}
|
||||||
|
|
||||||
|
return Ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL
|
||||||
|
StatusBarLoadString(IN HWND hStatusBar,
|
||||||
|
IN INT PartId,
|
||||||
|
IN HINSTANCE hInstance,
|
||||||
|
IN UINT uID)
|
||||||
|
{
|
||||||
|
BOOL Ret = FALSE;
|
||||||
|
LPWSTR lpStr;
|
||||||
|
|
||||||
|
if (AllocAndLoadString(&lpStr,
|
||||||
|
hInstance,
|
||||||
|
uID) > 0)
|
||||||
|
{
|
||||||
|
Ret = (BOOL)SendMessageW(hStatusBar,
|
||||||
|
SB_SETTEXT,
|
||||||
|
(WPARAM)PartId,
|
||||||
|
(LPARAM)lpStr);
|
||||||
|
LocalFree((HLOCAL)lpStr);
|
||||||
|
}
|
||||||
|
|
||||||
|
return Ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
INT
|
||||||
|
GetTextFromEdit(OUT LPWSTR lpString,
|
||||||
|
IN HWND hDlg,
|
||||||
|
IN UINT Res)
|
||||||
|
{
|
||||||
|
INT len = GetWindowTextLengthW(GetDlgItem(hDlg, Res));
|
||||||
|
if(len > 0)
|
||||||
|
{
|
||||||
|
GetDlgItemTextW(hDlg,
|
||||||
|
Res,
|
||||||
|
lpString,
|
||||||
|
len + 1);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
lpString = NULL;
|
||||||
|
|
||||||
|
return len;
|
||||||
|
}
|
||||||
|
|
||||||
|
VOID DisplayError(INT err)
|
||||||
|
{
|
||||||
|
LPWSTR lpMsgBuf = NULL;
|
||||||
|
|
||||||
|
FormatMessageW(FORMAT_MESSAGE_ALLOCATE_BUFFER |
|
||||||
|
FORMAT_MESSAGE_FROM_SYSTEM |
|
||||||
|
FORMAT_MESSAGE_IGNORE_INSERTS,
|
||||||
|
NULL,
|
||||||
|
err,
|
||||||
|
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
|
||||||
|
(VOID*)&lpMsgBuf,
|
||||||
|
0,
|
||||||
|
NULL );
|
||||||
|
|
||||||
|
MessageBoxW(NULL, lpMsgBuf, L"Error!", MB_OK | MB_ICONERROR);
|
||||||
|
|
||||||
|
LocalFree(lpMsgBuf);
|
||||||
|
}
|
||||||
|
|
||||||
|
VOID DisplayString(LPWSTR lpMsg)
|
||||||
|
{
|
||||||
|
MessageBoxW(NULL, lpMsg, L"Note!", MB_ICONEXCLAMATION|MB_OK);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
HIMAGELIST
|
||||||
|
InitImageList(UINT StartResource,
|
||||||
|
UINT EndResource,
|
||||||
|
UINT Width,
|
||||||
|
UINT Height)
|
||||||
|
{
|
||||||
|
HBITMAP hBitmap;
|
||||||
|
HIMAGELIST hImageList;
|
||||||
|
UINT i;
|
||||||
|
INT Ret;
|
||||||
|
|
||||||
|
/* Create the toolbar icon image list */
|
||||||
|
hImageList = ImageList_Create(Width,
|
||||||
|
Height,
|
||||||
|
ILC_MASK | ILC_COLOR24,
|
||||||
|
EndResource - StartResource,
|
||||||
|
0);
|
||||||
|
if (hImageList == NULL)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
/* Add all icons to the image list */
|
||||||
|
for (i = StartResource; i <= EndResource; i++)
|
||||||
|
{
|
||||||
|
hBitmap = (HBITMAP)LoadImage(hInstance,
|
||||||
|
MAKEINTRESOURCE(i),
|
||||||
|
IMAGE_BITMAP,
|
||||||
|
Width,
|
||||||
|
Height,
|
||||||
|
LR_LOADTRANSPARENT);
|
||||||
|
if (hBitmap == NULL)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
Ret = ImageList_AddMasked(hImageList,
|
||||||
|
hBitmap,
|
||||||
|
RGB(255, 0, 128));
|
||||||
|
if (Ret == -1)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
DeleteObject(hBitmap);
|
||||||
|
}
|
||||||
|
|
||||||
|
return hImageList;
|
||||||
|
}
|
39
rostests/winetests/GUI/precomp.h
Normal file
39
rostests/winetests/GUI/precomp.h
Normal file
|
@ -0,0 +1,39 @@
|
||||||
|
#ifndef __WINETESTGUI_PRECOMP_H
|
||||||
|
#define __WINETESTGUI_PRECOMP_H
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <windows.h>
|
||||||
|
#include <commctrl.h>
|
||||||
|
#include "resource.h"
|
||||||
|
|
||||||
|
extern HINSTANCE hInstance;
|
||||||
|
|
||||||
|
typedef struct _MAIN_WND_INFO
|
||||||
|
{
|
||||||
|
HWND hMainWnd;
|
||||||
|
HWND hBrowseDlg;
|
||||||
|
HWND hStatus;
|
||||||
|
int nCmdShow;
|
||||||
|
|
||||||
|
HICON hSmIcon;
|
||||||
|
HICON hBgIcon;
|
||||||
|
|
||||||
|
INT SelectedItem;/* selection number in the list view */
|
||||||
|
BOOL bDlgOpen;
|
||||||
|
BOOL bInMenuLoop;
|
||||||
|
BOOL bIsUserAnAdmin;
|
||||||
|
|
||||||
|
LPWSTR lpDllList;
|
||||||
|
|
||||||
|
} MAIN_WND_INFO, *PMAIN_WND_INFO;
|
||||||
|
|
||||||
|
|
||||||
|
/* browsewnd.c */
|
||||||
|
BOOL CALLBACK BrowseDlgProc(HWND hDlg, UINT Message, WPARAM wParam, LPARAM lParam);
|
||||||
|
|
||||||
|
/* misc.c */
|
||||||
|
VOID DisplayString(LPWSTR lpMsg);
|
||||||
|
VOID DisplayError(INT err);
|
||||||
|
|
||||||
|
#endif /* __WINETESTGUI_PRECOMP_H */
|
0
rostests/winetests/GUI/res/.gitignore
vendored
Normal file
0
rostests/winetests/GUI/res/.gitignore
vendored
Normal file
24
rostests/winetests/GUI/resource.h
Normal file
24
rostests/winetests/GUI/resource.h
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
#define IDD_WINETESTGUI 102
|
||||||
|
#define IDD_TESTBROWSER 103
|
||||||
|
#define IDM_ABOUT 104
|
||||||
|
#define IDM_EXIT 105
|
||||||
|
#define IDI_ICON 107
|
||||||
|
#define IDI_SMALL 108
|
||||||
|
#define IDC_DELETE 109
|
||||||
|
#define IDR_MAINFRAME 128
|
||||||
|
#define IDC_LIST 1000
|
||||||
|
#define IDC_OUTPUT 1001
|
||||||
|
#define IDC_TESTSELECTION 1002
|
||||||
|
#define IDC_BROWSE 1003
|
||||||
|
#define IDC_RUN 1004
|
||||||
|
#define IDC_PROGRESS 1005
|
||||||
|
#define IDC_NUMRUNS 1006
|
||||||
|
#define IDC_NUMERRORS 1007
|
||||||
|
#define IDC_NUMFAILURES 1008
|
||||||
|
#define IDC_STOP 1010
|
||||||
|
#define IDC_CHECK2 1011
|
||||||
|
#define IDC_RUNONSTART 1011
|
||||||
|
#define IDC_STATUS 1012
|
||||||
|
#define IDC_SELECT 1020
|
||||||
|
#define IDC_TREEVIEW 1021
|
||||||
|
#define IDC_STATIC -1
|
25
rostests/winetests/GUI/rsrc.rc
Normal file
25
rostests/winetests/GUI/rsrc.rc
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
#include <windows.h>
|
||||||
|
#include "resource.h"
|
||||||
|
|
||||||
|
LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
|
||||||
|
|
||||||
|
IDI_ICON ICON "res/charmap.ico"
|
||||||
|
|
||||||
|
//#include "lang/bg-BG.rc"
|
||||||
|
//#include "lang/ca-ES.rc"
|
||||||
|
//#include "lang/cs-CZ.rc"
|
||||||
|
#include "lang/en-US.rc"
|
||||||
|
//#include "lang/de-DE.rc"
|
||||||
|
//#include "lang/es-ES.rc"
|
||||||
|
//#include "lang/fr-FR.rc"
|
||||||
|
//#include "lang/id-ID.rc"
|
||||||
|
//#include "lang/it-IT.rc"
|
||||||
|
//#include "lang/ko-KO.rc"
|
||||||
|
//#include "lang/lt-LT.rc"
|
||||||
|
//#include "lang/nl-NL.rc"
|
||||||
|
//#include "lang/pl-PL.rc"
|
||||||
|
//#include "lang/pt-BR.rc"
|
||||||
|
//#include "lang/sk-SK.rc"
|
||||||
|
//#include "lang/uk-UA.rc"
|
||||||
|
//#include "lang/ru-RU.rc"
|
||||||
|
//#include "lang/el-GR.rc"
|
Loading…
Reference in a new issue