user: GetTitleBarInfo
Kevin Koltzau
kevin at plop.org
Tue Dec 2 20:36:15 CST 2003
This implements GetTitleBarInfo
Index: dlls/user/user32.spec
===================================================================
RCS file: /home/wine/wine/dlls/user/user32.spec,v
retrieving revision 1.81
diff -u -r1.81 user32.spec
--- dlls/user/user32.spec 26 Nov 2003 04:09:00 -0000 1.81
+++ dlls/user/user32.spec 3 Dec 2003 02:06:12 -0000
@@ -304,7 +304,7 @@
@ stdcall GetTabbedTextExtentA(long str long long ptr)
@ stdcall GetTabbedTextExtentW(long wstr long long ptr)
@ stdcall GetThreadDesktop(long)
-# @ stub GetTitleBarInfo
+@ stdcall GetTitleBarInfo(long ptr)
@ stdcall GetTopWindow(long)
@ stdcall GetUpdateRect(long ptr long)
@ stdcall GetUpdateRgn(long long long)
Index: include/winuser.h
===================================================================
RCS file: /home/wine/wine/include/winuser.h,v
retrieving revision 1.175
diff -u -r1.175 winuser.h
--- include/winuser.h 26 Nov 2003 05:22:42 -0000 1.175
+++ include/winuser.h 3 Dec 2003 02:06:14 -0000
@@ -3543,6 +3543,16 @@
WORD wCreatorVersion;
} WINDOWINFO, *PWINDOWINFO, *LPWINDOWINFO;
+/* used for GetTitleBarInfo() */
+
+#define CCHILDREN_TITLEBAR 5
+
+typedef struct tagTITLEBARINFO {
+ DWORD cbSize;
+ RECT rcTitleBar;
+ DWORD rgstate[CCHILDREN_TITLEBAR+1];
+} TITLEBARINFO, *PTITLEBARINFO, *LPTITLEBARINFO;
+
/* SetWinEventHook() flags */
#define WINEVENT_OUTOFCONTEXT 0x0
#define WINEVENT_SKIPOWNTHREAD 0x1
@@ -3662,6 +3672,39 @@
#define ALERT_SYSTEM_CRITICAL 5
#define CALERT_SYSTEM 6
+/* System state flags */
+#define STATE_SYSTEM_UNAVAILABLE 0x00000001
+#define STATE_SYSTEM_SELECTED 0x00000002
+#define STATE_SYSTEM_FOCUSED 0x00000004
+#define STATE_SYSTEM_PRESSED 0x00000008
+#define STATE_SYSTEM_CHECKED 0x00000010
+#define STATE_SYSTEM_MIXED 0x00000020
+#define STATE_SYSTEM_INDETERMINATE STATE_SYSTEM_MIXED
+#define STATE_SYSTEM_READONLY 0x00000040
+#define STATE_SYSTEM_HOTTRACKED 0x00000080
+#define STATE_SYSTEM_DEFAULT 0x00000100
+#define STATE_SYSTEM_EXPANDED 0x00000200
+#define STATE_SYSTEM_COLLAPSED 0x00000400
+#define STATE_SYSTEM_BUSY 0x00000800
+#define STATE_SYSTEM_FLOATING 0x00001000
+#define STATE_SYSTEM_MARQUEED 0x00002000
+#define STATE_SYSTEM_ANIMATED 0x00004000
+#define STATE_SYSTEM_INVISIBLE 0x00008000
+#define STATE_SYSTEM_OFFSCREEN 0x00010000
+#define STATE_SYSTEM_SIZEABLE 0x00020000
+#define STATE_SYSTEM_MOVEABLE 0x00040000
+#define STATE_SYSTEM_SELFVOICING 0x00080000
+#define STATE_SYSTEM_FOCUSABLE 0x00100000
+#define STATE_SYSTEM_SELECTABLE 0x00200000
+#define STATE_SYSTEM_LINKED 0x00400000
+#define STATE_SYSTEM_TRAVERSED 0x00800000
+#define STATE_SYSTEM_MULTISELECTABLE 0x01000000
+#define STATE_SYSTEM_EXTSELECTABLE 0x02000000
+#define STATE_SYSTEM_ALERT_LOW 0x04000000
+#define STATE_SYSTEM_ALERT_MEDIUM 0x08000000
+#define STATE_SYSTEM_ALERT_HIGH 0x10000000
+#define STATE_SYSTEM_PROTECTED 0x20000000
+#define STATE_SYSTEM_VALID 0x3FFFFFFF
#define EnumTaskWindows(handle,proc,lparam) \
EnumThreadWindows(handle,proc,lparam)
@@ -4124,6 +4167,7 @@
DWORD WINAPI GetTabbedTextExtentA(HDC,LPCSTR,INT,INT,const INT*);
DWORD WINAPI GetTabbedTextExtentW(HDC,LPCWSTR,INT,INT,const INT*);
#define GetTabbedTextExtent WINELIB_NAME_AW(GetTabbedTextExtent)
+BOOL WINAPI GetTitleBarInfo(HWND,PTITLEBARINFO);
HWND WINAPI GetTopWindow(HWND);
BOOL WINAPI GetUpdateRect(HWND,LPRECT,BOOL);
INT WINAPI GetUpdateRgn(HWND,HRGN,BOOL);
Index: windows/nonclient.c
===================================================================
RCS file: /home/wine/wine/windows/nonclient.c,v
retrieving revision 1.114
diff -u -r1.114 nonclient.c
--- windows/nonclient.c 26 Nov 2003 05:08:48 -0000 1.114
+++ windows/nonclient.c 3 Dec 2003 02:06:15 -0000
@@ -2259,3 +2259,72 @@
return TRUE;
}
+
+/***********************************************************************
+ * GetTitleBarInfo (USER32.@)
+ * TODO: Handle STATE_SYSTEM_PRESSED
+ */
+BOOL WINAPI GetTitleBarInfo(HWND hwnd, PTITLEBARINFO tbi) {
+ DWORD dwStyle;
+ DWORD dwExStyle;
+ RECT wndRect;
+
+ TRACE("(%p %p)\n", hwnd, tbi);
+
+ if(tbi->cbSize != sizeof(TITLEBARINFO)) {
+ TRACE("Invalid TITLEBARINFO size: %d\n", tbi->cbSize);
+ SetLastError(ERROR_INVALID_PARAMETER);
+ return FALSE;
+ }
+ dwStyle = GetWindowLongW(hwnd, GWL_STYLE);
+ dwExStyle = GetWindowLongW(hwnd, GWL_EXSTYLE);
+ NC_GetInsideRect(hwnd, &tbi->rcTitleBar);
+
+ GetWindowRect(hwnd, &wndRect);
+
+ tbi->rcTitleBar.top += wndRect.top;
+ tbi->rcTitleBar.left += wndRect.left;
+ tbi->rcTitleBar.right += wndRect.left;
+
+ tbi->rcTitleBar.bottom = tbi->rcTitleBar.top;
+ if(dwExStyle & WS_EX_TOOLWINDOW)
+ tbi->rcTitleBar.bottom += GetSystemMetrics(SM_CYSMCAPTION);
+ else {
+ tbi->rcTitleBar.bottom += GetSystemMetrics(SM_CYCAPTION);
+ tbi->rcTitleBar.left += GetSystemMetrics(SM_CXSIZE);
+ }
+
+ ZeroMemory(&tbi->rgstate, sizeof(tbi->rgstate));
+ /* Does the title bar always have STATE_SYSTEM_FOCUSABLE?
+ * Under XP it seems to
+ */
+ tbi->rgstate[0] = STATE_SYSTEM_FOCUSABLE;
+ if(dwStyle & WS_CAPTION) {
+ tbi->rgstate[1] = STATE_SYSTEM_INVISIBLE;
+ if(dwStyle & WS_SYSMENU) {
+ if(!(dwStyle & (WS_MINIMIZEBOX|WS_MAXIMIZEBOX))) {
+ tbi->rgstate[2] = STATE_SYSTEM_INVISIBLE;
+ tbi->rgstate[3] = STATE_SYSTEM_INVISIBLE;
+ }
+ else {
+ if(!(dwStyle & WS_MINIMIZEBOX))
+ tbi->rgstate[2] = STATE_SYSTEM_UNAVAILABLE;
+ if(!(dwStyle & WS_MAXIMIZEBOX))
+ tbi->rgstate[3] = STATE_SYSTEM_UNAVAILABLE;
+ }
+ if(!(dwExStyle & WS_EX_CONTEXTHELP))
+ tbi->rgstate[4] = STATE_SYSTEM_INVISIBLE;
+ if(GetClassLongW(hwnd, GCL_STYLE) & CS_NOCLOSE)
+ tbi->rgstate[5] = STATE_SYSTEM_UNAVAILABLE;
+ }
+ else {
+ tbi->rgstate[2] = STATE_SYSTEM_INVISIBLE;
+ tbi->rgstate[3] = STATE_SYSTEM_INVISIBLE;
+ tbi->rgstate[4] = STATE_SYSTEM_INVISIBLE;
+ tbi->rgstate[5] = STATE_SYSTEM_INVISIBLE;
+ }
+ }
+ else
+ tbi->rgstate[0] |= STATE_SYSTEM_INVISIBLE;
+ return TRUE;
+}
More information about the wine-patches
mailing list