summaryrefslogtreecommitdiffstats
path: root/win/tkWinTest.c
diff options
context:
space:
mode:
Diffstat (limited to 'win/tkWinTest.c')
-rw-r--r--win/tkWinTest.c68
1 files changed, 62 insertions, 6 deletions
diff --git a/win/tkWinTest.c b/win/tkWinTest.c
index 78b06f3..5ab725e 100644
--- a/win/tkWinTest.c
+++ b/win/tkWinTest.c
@@ -11,9 +11,15 @@
* See the file "license.terms" for information on usage and redistribution of
* this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * RCS: @(#) $Id: tkWinTest.c,v 1.26 2009/08/10 23:16:28 nijtmans Exp $
+ * RCS: @(#) $Id: tkWinTest.c,v 1.27 2009/11/19 23:45:08 nijtmans Exp $
*/
+#ifndef USE_TCL_STUBS
+# define USE_TCL_STUBS
+#endif
+#ifndef USE_TK_STUBS
+# define USE_TK_STUBS
+#endif
#include "tkWinInt.h"
HWND tkWinCurrentDialog;
@@ -39,6 +45,50 @@ static int TestwinlocaleObjCmd(ClientData clientData,
MODULE_SCOPE int TkplatformtestInit(Tcl_Interp *interp);
static Tk_GetSelProc SetSelectionResult;
+
+static TkWinProcs asciiProcs = {
+ 0,
+
+ (LRESULT (WINAPI *)(WNDPROC lpPrevWndFunc, HWND hWnd, UINT Msg,
+ WPARAM wParam, LPARAM lParam)) CallWindowProcA,
+ (LRESULT (WINAPI *)(HWND hWnd, UINT Msg, WPARAM wParam,
+ LPARAM lParam)) DefWindowProcA,
+ (ATOM (WINAPI *)(const WNDCLASS *lpWndClass)) RegisterClassA,
+ (BOOL (WINAPI *)(HWND hWnd, LPCTSTR lpString)) SetWindowTextA,
+ (HWND (WINAPI *)(DWORD dwExStyle, LPCTSTR lpClassName,
+ LPCTSTR lpWindowName, DWORD dwStyle, int x, int y,
+ int nWidth, int nHeight, HWND hWndParent, HMENU hMenu,
+ HINSTANCE hInstance, LPVOID lpParam)) CreateWindowExA,
+ (BOOL (WINAPI *)(HMENU hMenu, UINT uPosition, UINT uFlags,
+ UINT uIDNewItem, LPCTSTR lpNewItem)) InsertMenuA,
+ (int (WINAPI *)(HWND hWnd, LPCTSTR lpString, int nMaxCount)) GetWindowTextA,
+ (HWND (WINAPI *)(LPCTSTR lpClassName, LPCTSTR lpWindowName)) FindWindowA,
+ (int (WINAPI *)(HWND hwnd, LPTSTR lpClassName, int nMaxCount)) GetClassNameA,
+};
+
+static TkWinProcs unicodeProcs = {
+ 1,
+
+ (LRESULT (WINAPI *)(WNDPROC lpPrevWndFunc, HWND hWnd, UINT Msg,
+ WPARAM wParam, LPARAM lParam)) CallWindowProcW,
+ (LRESULT (WINAPI *)(HWND hWnd, UINT Msg, WPARAM wParam,
+ LPARAM lParam)) DefWindowProcW,
+ (ATOM (WINAPI *)(const WNDCLASS *lpWndClass)) RegisterClassW,
+ (BOOL (WINAPI *)(HWND hWnd, LPCTSTR lpString)) SetWindowTextW,
+ (HWND (WINAPI *)(DWORD dwExStyle, LPCTSTR lpClassName,
+ LPCTSTR lpWindowName, DWORD dwStyle, int x, int y,
+ int nWidth, int nHeight, HWND hWndParent, HMENU hMenu,
+ HINSTANCE hInstance, LPVOID lpParam)) CreateWindowExW,
+ (BOOL (WINAPI *)(HMENU hMenu, UINT uPosition, UINT uFlags,
+ UINT uIDNewItem, LPCTSTR lpNewItem)) InsertMenuW,
+ (int (WINAPI *)(HWND hWnd, LPCTSTR lpString, int nMaxCount)) GetWindowTextW,
+ (HWND (WINAPI *)(LPCTSTR lpClassName, LPCTSTR lpWindowName)) FindWindowW,
+ (int (WINAPI *)(HWND hwnd, LPTSTR lpClassName, int nMaxCount)) GetClassNameW,
+};
+
+static TkWinProcs *tkTestWinProcs = &asciiProcs;
+
+
/*
*----------------------------------------------------------------------
*
@@ -60,6 +110,12 @@ int
TkplatformtestInit(
Tcl_Interp *interp) /* Interpreter to add commands to. */
{
+ int useWide = (TkWinGetPlatformId() != VER_PLATFORM_WIN32_WINDOWS);
+ if (useWide) {
+ tkTestWinProcs = &unicodeProcs;
+ } else {
+ tkTestWinProcs = &asciiProcs;
+ }
/*
* Add commands for platform specific tests on MacOS here.
*/
@@ -401,7 +457,7 @@ TestfindwindowObjCmd(
class = Tcl_WinUtfToTChar(Tcl_GetString(objv[2]), -1, &classString);
}
- hwnd = tkWinProcs->findWindow(class, title);
+ hwnd = tkTestWinProcs->findWindow(class, title);
if (hwnd == NULL) {
Tcl_SetObjResult(interp, Tcl_NewStringObj("failed to find window: ", -1));
@@ -439,7 +495,7 @@ TestgetwindowinfoObjCmd(
Tcl_Obj *dictObj = NULL, *classObj = NULL, *textObj = NULL;
Tcl_Obj *childrenObj = NULL;
char buf[512];
- int cch, cchBuf = tkWinProcs->useWide ? 256 : 512;
+ int cch, cchBuf = tkTestWinProcs->useWide ? 256 : 512;
if (objc != 2) {
Tcl_WrongNumArgs(interp, 1, objv, "hwnd");
@@ -449,7 +505,7 @@ TestgetwindowinfoObjCmd(
if (Tcl_GetLongFromObj(interp, objv[1], &hwnd) != TCL_OK)
return TCL_ERROR;
- cch = tkWinProcs->getClassName((HWND)hwnd, buf, cchBuf);
+ cch = tkTestWinProcs->getClassName((HWND)hwnd, buf, cchBuf);
if (cch == 0) {
Tcl_SetResult(interp, "failed to get class name: ", TCL_STATIC);
AppendSystemError(interp, GetLastError());
@@ -466,8 +522,8 @@ TestgetwindowinfoObjCmd(
Tcl_DictObjPut(interp, dictObj, Tcl_NewStringObj("id", 2),
Tcl_NewLongObj(GetWindowLong((HWND)hwnd, GWL_ID)));
- cch = tkWinProcs->getWindowText((HWND)hwnd, (LPTSTR)buf, cchBuf);
- if (tkWinProcs->useWide) {
+ cch = tkTestWinProcs->getWindowText((HWND)hwnd, (LPTSTR)buf, cchBuf);
+ if (tkTestWinProcs->useWide) {
textObj = Tcl_NewUnicodeObj((LPCWSTR)buf, cch);
} else {
textObj = Tcl_NewStringObj((LPCSTR)buf, cch);