Sync to Wine-20040913:

Robert Shearman <rob@codeweavers.com>
- Add 16x16 error, info and warning icons.
- Replace GetWindowLong by GetWindowLongPtr.
- Implement insert marks.
- Rearrange TOOLBAR_INFO.
- Clear data structure after dragging.
- WM_SETCURSOR does not need to be handled as it is not sent whilst
  the window is captured.
- Make uDragListMessage non-static so that we can re-use it
  elsewhere.
- Set class hbrBackground and style to the same as native.
- Set hbrBackground class property to same value as native.
- Use Unicode window functions instead of ANSI.
- Always redraw dialog on changing between pages.
- Set hbrBackground class property to same value as native.
- Remove no longer needed WM_ERASEBKGND handler.
- Use Unicode window functions instead of ANSI.
- Make customization list boxes into drag list boxes.
- Order available buttons in the same way as the native version.
- Obey TBCDRF_NOOFFSET for the button text.
- Make anchor highlighting behave more like native version.
- Don't recalculate toolbar in TOOLBAR_Unkwn460.
- Obey WM_SETREDRAW for the WM_ERASEBKGND message as well as
  WM_PAINT.
- TB_MARKITEM should redraw button.
- Send NM_LDOWN notification.
- NM_RDBLCLK only needs to send a NMHDR structure.
- On mouse notifications returning 0 DefWndProc should be called.
- Fix regression with IE's Menu Bar.
- Implement insert marks.
- Rearrange TOOLBAR_INFO.
- Fix anchor highlighting.
- Remove redundant test in TOOLBAR_DrawButton.
- Status update.
- Remove no longer valid comment.
- Minor coding style cleanups.
- Implement titles.
Hans Leidekker <hans@it.vu.nl>
- Fix signed/unsigned comparison warnings.
Ulrich Czekalla <ulrich@codeweavers.com>
- Forward focus to combobox, otherwise edit control won't get focus.
- The rectangle passed in DRAWITEMSTRUCT is slightly too large as
  compared with Windows.
- Clear tooltip when text is set to NULL.
- Repaint tooltip when item info changes.
Kevin Koltzau <kevin@plop.org>
- Fix bug with chained messages.
- Make SetWindowSubclass behave with SetWindowLong subclasses.
- Allow unlimited number of subclasses.
- Correct issue when SendMessage is called from within a subclass proc.
- Add regression test.
Huw Davies <huw@codeweavers.com>
- Change dialogs to use MS Shell Dlg rather than Helv or MS Sans Serif.
David Kredba <kredba@ibot.cas.cz>
- Added Czech resources.
Vitaliy Margolen <wine-patch@kievinfo.com>
- Send correct tracing notification messages.
Michael Stefaniuc <mstefani@redhat.de>
- Fix hotspot handling
- Remove unused flag from the InternalDrag struct.
Filip Navara <xnavara@volny.cz>
- Status update.
- Fix resizing of wizards.
- Fill the area next to watermark bitmap with window color and subclass
  exterior wizard pages to suppress drawing background.
- Correct displaying of wizard subtitle.
- Do not distinguish exterior wizard pages by their position, but
  instead expect that every page in wizard that doesn't have header is
  exterior.
- Move the property sheet resizing code from PROPSHEET_CreatePage to
  PROPSHEET_SetCurSel. It needs to be executed on every page change
  because the application can modify it during the notifications.
- Draw the Wizard97 header bitmaps before drawing the header strings.
- Center the header bitmap of the new Wizard97 correctly.
- Display the correct wizard title for any wizard type and do not
  change it for reqular property sheets.
- Fix loading wizard title and subtitle from resources.
Mike McCormack <mike@codeweavers.com>
- Calculate the correct size of dialog templates in the propsheet
  control.
Zach Gorman <zach@archetypeauction.com>
- OK button should be default in non-wizard property sheets.
- Propsheet pages need WS_EX_CONTROLPARENT style.
Jon Griffiths <jon_p_griffiths@yahoo.com>
- CreateDCA -> CreateDCW
Vitaliy Margolen <wine-patch@kievinfo.com>
- Make sure TreeView gets redrawn after calling EnsureVisible.

svn path=/trunk/; revision=10902
This commit is contained in:
Gé van Geldorp 2004-09-19 09:50:06 +00:00
parent 4319f1c249
commit a795a4185c
45 changed files with 1681 additions and 972 deletions

View file

@ -18,5 +18,8 @@ idc_divider.cur
idc_divideropen.cur idc_divideropen.cur
idc_movebutton.cur idc_movebutton.cur
idi_dragarrow.ico idi_dragarrow.ico
idi_tt_error_sm.ico
idi_tt_info_sm.ico
idi_tt_warn_sm.ico
idt_check.bmp idt_check.bmp
comctl32.spec.def comctl32.spec.def

View file

@ -52,6 +52,9 @@ RC_BINARIES = \
idc_divideropen.cur \ idc_divideropen.cur \
idc_movebutton.cur \ idc_movebutton.cur \
idi_dragarrow.ico \ idi_dragarrow.ico \
idi_tt_error_sm.ico \
idi_tt_info_sm.ico \
idi_tt_warn_sm.ico \
idt_check.bmp idt_check.bmp
SUBDIRS = tests SUBDIRS = tests

View file

@ -85,7 +85,7 @@ typedef struct
HBITMAP hbmPrevFrame; HBITMAP hbmPrevFrame;
} ANIMATE_INFO; } ANIMATE_INFO;
#define ANIMATE_GetInfoPtr(hWnd) ((ANIMATE_INFO *)GetWindowLongA(hWnd, 0)) #define ANIMATE_GetInfoPtr(hWnd) ((ANIMATE_INFO *)GetWindowLongPtrW(hWnd, 0))
#define ANIMATE_COLOR_NONE 0xffffffff #define ANIMATE_COLOR_NONE 0xffffffff
static void ANIMATE_Notify(ANIMATE_INFO* infoPtr, UINT notif) static void ANIMATE_Notify(ANIMATE_INFO* infoPtr, UINT notif)
@ -704,7 +704,7 @@ static LRESULT ANIMATE_OpenA(HWND hWnd, WPARAM wParam, LPARAM lParam)
} }
if (!hInstance) if (!hInstance)
hInstance = (HINSTANCE)GetWindowLongA(hWnd, GWL_HINSTANCE); hInstance = (HINSTANCE)GetWindowLongPtrW(hWnd, GWLP_HINSTANCE);
if (HIWORD(lParam)) { if (HIWORD(lParam)) {
TRACE("(\"%s\");\n", (LPSTR)lParam); TRACE("(\"%s\");\n", (LPSTR)lParam);
@ -794,13 +794,13 @@ static LRESULT ANIMATE_Create(HWND hWnd, WPARAM wParam, LPARAM lParam)
} }
/* store crossref hWnd <-> info structure */ /* store crossref hWnd <-> info structure */
SetWindowLongA(hWnd, 0, (DWORD)infoPtr); SetWindowLongPtrW(hWnd, 0, (DWORD_PTR)infoPtr);
infoPtr->hwndSelf = hWnd; infoPtr->hwndSelf = hWnd;
infoPtr->hwndNotify = ((LPCREATESTRUCTA)lParam)->hwndParent; infoPtr->hwndNotify = ((LPCREATESTRUCTA)lParam)->hwndParent;
infoPtr->transparentColor = ANIMATE_COLOR_NONE; infoPtr->transparentColor = ANIMATE_COLOR_NONE;
infoPtr->hbmPrevFrame = 0; infoPtr->hbmPrevFrame = 0;
TRACE("Animate style=0x%08lx, parent=%08lx\n", GetWindowLongA(hWnd, GWL_STYLE), (DWORD)infoPtr->hwndNotify); TRACE("Animate style=0x%08lx, parent=%p\n", GetWindowLongA(hWnd, GWL_STYLE), infoPtr->hwndNotify);
InitializeCriticalSection(&infoPtr->cs); InitializeCriticalSection(&infoPtr->cs);
@ -818,7 +818,7 @@ static LRESULT ANIMATE_Destroy(HWND hWnd, WPARAM wParam, LPARAM lParam)
/* free animate info data */ /* free animate info data */
Free(infoPtr); Free(infoPtr);
SetWindowLongA(hWnd, 0, 0); SetWindowLongPtrW(hWnd, 0, 0);
return 0; return 0;
} }

View file

@ -122,7 +122,7 @@ typedef struct
#define CBE_SEP 4 #define CBE_SEP 4
#define COMBOEX_SUBCLASS_PROP "CCComboEx32SubclassInfo" #define COMBOEX_SUBCLASS_PROP "CCComboEx32SubclassInfo"
#define COMBOEX_GetInfoPtr(hwnd) ((COMBOEX_INFO *)GetWindowLongW (hwnd, 0)) #define COMBOEX_GetInfoPtr(hwnd) ((COMBOEX_INFO *)GetWindowLongPtrW (hwnd, 0))
/* Things common to the entire DLL */ /* Things common to the entire DLL */
@ -400,14 +400,14 @@ static void COMBOEX_AdjustEditPos (COMBOEX_INFO *infoPtr)
static void COMBOEX_ReSize (COMBOEX_INFO *infoPtr) static void COMBOEX_ReSize (COMBOEX_INFO *infoPtr)
{ {
SIZE mysize; SIZE mysize;
UINT cy; LONG cy;
IMAGEINFO iinfo; IMAGEINFO iinfo;
COMBOEX_GetComboFontSize (infoPtr, &mysize); COMBOEX_GetComboFontSize (infoPtr, &mysize);
cy = mysize.cy + CBE_EXTRA; cy = mysize.cy + CBE_EXTRA;
if (infoPtr->himl && ImageList_GetImageInfo(infoPtr->himl, 0, &iinfo)) { if (infoPtr->himl && ImageList_GetImageInfo(infoPtr->himl, 0, &iinfo)) {
cy = max (iinfo.rcImage.bottom - iinfo.rcImage.top, cy); cy = max (iinfo.rcImage.bottom - iinfo.rcImage.top, cy);
TRACE("upgraded height due to image: height=%d\n", cy); TRACE("upgraded height due to image: height=%ld\n", cy);
} }
SendMessageW (infoPtr->hwndSelf, CB_SETITEMHEIGHT, (WPARAM)-1, (LPARAM)cy); SendMessageW (infoPtr->hwndSelf, CB_SETITEMHEIGHT, (WPARAM)-1, (LPARAM)cy);
if (infoPtr->hwndCombo) { if (infoPtr->hwndCombo) {
@ -943,7 +943,7 @@ static LRESULT COMBOEX_Create (HWND hwnd, LPCREATESTRUCTA cs)
} }
infoPtr->NtfUnicode = (i == NFR_UNICODE); infoPtr->NtfUnicode = (i == NFR_UNICODE);
SetWindowLongW (hwnd, 0, (DWORD)infoPtr); SetWindowLongPtrW (hwnd, 0, (DWORD_PTR)infoPtr);
/* create combo box */ /* create combo box */
GetWindowRect(hwnd, &wnrc1); GetWindowRect(hwnd, &wnrc1);
@ -967,8 +967,8 @@ static LRESULT COMBOEX_Create (HWND hwnd, LPCREATESTRUCTA cs)
WS_CHILD | WS_VISIBLE | CBS_OWNERDRAWFIXED | WS_CHILD | WS_VISIBLE | CBS_OWNERDRAWFIXED |
GetWindowLongW (hwnd, GWL_STYLE), GetWindowLongW (hwnd, GWL_STYLE),
cs->y, cs->x, cs->cx, cs->cy, hwnd, cs->y, cs->x, cs->cx, cs->cy, hwnd,
(HMENU) GetWindowLongW (hwnd, GWL_ID), (HMENU) GetWindowLongPtrW (hwnd, GWLP_ID),
(HINSTANCE)GetWindowLongW (hwnd, GWL_HINSTANCE), NULL); (HINSTANCE)GetWindowLongPtrW (hwnd, GWLP_HINSTANCE), NULL);
/* /*
* native does the following at this point according to trace: * native does the following at this point according to trace:
@ -983,8 +983,8 @@ static LRESULT COMBOEX_Create (HWND hwnd, LPCREATESTRUCTA cs)
* data structure. * data structure.
*/ */
SetPropA(infoPtr->hwndCombo, COMBOEX_SUBCLASS_PROP, hwnd); SetPropA(infoPtr->hwndCombo, COMBOEX_SUBCLASS_PROP, hwnd);
infoPtr->prevComboWndProc = (WNDPROC)SetWindowLongW(infoPtr->hwndCombo, infoPtr->prevComboWndProc = (WNDPROC)SetWindowLongPtrW(infoPtr->hwndCombo,
GWL_WNDPROC, (LONG)COMBOEX_ComboWndProc); GWLP_WNDPROC, (DWORD_PTR)COMBOEX_ComboWndProc);
infoPtr->font = (HFONT)SendMessageW (infoPtr->hwndCombo, WM_GETFONT, 0, 0); infoPtr->font = (HFONT)SendMessageW (infoPtr->hwndCombo, WM_GETFONT, 0, 0);
@ -997,8 +997,8 @@ static LRESULT COMBOEX_Create (HWND hwnd, LPCREATESTRUCTA cs)
WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | ES_AUTOHSCROLL, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | ES_AUTOHSCROLL,
0, 0, 0, 0, /* will set later */ 0, 0, 0, 0, /* will set later */
infoPtr->hwndCombo, infoPtr->hwndCombo,
(HMENU) GetWindowLongW (hwnd, GWL_ID), (HMENU) GetWindowLongPtrW (hwnd, GWLP_ID),
(HINSTANCE)GetWindowLongW (hwnd, GWL_HINSTANCE), NULL); (HINSTANCE)GetWindowLongPtrW (hwnd, GWLP_HINSTANCE), NULL);
/* native does the following at this point according to trace: /* native does the following at this point according to trace:
* GetWindowThreadProcessId(hwndEdit,0) * GetWindowThreadProcessId(hwndEdit,0)
@ -1012,8 +1012,8 @@ static LRESULT COMBOEX_Create (HWND hwnd, LPCREATESTRUCTA cs)
* data structure. * data structure.
*/ */
SetPropA(infoPtr->hwndEdit, COMBOEX_SUBCLASS_PROP, hwnd); SetPropA(infoPtr->hwndEdit, COMBOEX_SUBCLASS_PROP, hwnd);
infoPtr->prevEditWndProc = (WNDPROC)SetWindowLongW(infoPtr->hwndEdit, infoPtr->prevEditWndProc = (WNDPROC)SetWindowLongPtrW(infoPtr->hwndEdit,
GWL_WNDPROC, (LONG)COMBOEX_EditWndProc); GWLP_WNDPROC, (DWORD_PTR)COMBOEX_EditWndProc);
infoPtr->font = (HFONT)SendMessageW(infoPtr->hwndCombo, WM_GETFONT, 0, 0); infoPtr->font = (HFONT)SendMessageW(infoPtr->hwndCombo, WM_GETFONT, 0, 0);
} }
@ -1546,7 +1546,7 @@ static LRESULT COMBOEX_Destroy (COMBOEX_INFO *infoPtr)
/* free comboex info data */ /* free comboex info data */
Free (infoPtr); Free (infoPtr);
SetWindowLongW (infoPtr->hwndSelf, 0, 0); SetWindowLongPtrW (infoPtr->hwndSelf, 0, 0);
return 0; return 0;
} }
@ -1610,7 +1610,7 @@ static LRESULT COMBOEX_Size (COMBOEX_INFO *infoPtr, INT width, INT height)
static LRESULT COMBOEX_WindowPosChanging (COMBOEX_INFO *infoPtr, WINDOWPOS *wp) static LRESULT COMBOEX_WindowPosChanging (COMBOEX_INFO *infoPtr, WINDOWPOS *wp)
{ {
RECT cbx_wrect, cbx_crect, cb_wrect; RECT cbx_wrect, cbx_crect, cb_wrect;
UINT width, height; INT width, height;
GetWindowRect (infoPtr->hwndSelf, &cbx_wrect); GetWindowRect (infoPtr->hwndSelf, &cbx_wrect);
GetClientRect (infoPtr->hwndSelf, &cbx_crect); GetClientRect (infoPtr->hwndSelf, &cbx_crect);
@ -2263,6 +2263,10 @@ COMBOEX_WindowProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
case WM_WINDOWPOSCHANGING: case WM_WINDOWPOSCHANGING:
return COMBOEX_WindowPosChanging (infoPtr, (WINDOWPOS *)lParam); return COMBOEX_WindowPosChanging (infoPtr, (WINDOWPOS *)lParam);
case WM_SETFOCUS:
SetFocus(infoPtr->hwndCombo);
return 0;
default: default:
if ((uMsg >= WM_USER) && (uMsg < WM_APP)) if ((uMsg >= WM_USER) && (uMsg < WM_APP))
ERR("unknown msg %04x wp=%08x lp=%08lx\n",uMsg,wParam,lParam); ERR("unknown msg %04x wp=%08x lp=%08lx\n",uMsg,wParam,lParam);

View file

@ -112,6 +112,11 @@ extern HBRUSH COMCTL32_hPattern55AABrush;
/* HOTKEY internal strings */ /* HOTKEY internal strings */
#define HKY_NONE 2048 #define HKY_NONE 2048
/* Tooltip icons */
#define IDI_TT_INFO_SM 22
#define IDI_TT_WARN_SM 25
#define IDI_TT_ERROR_SM 28
typedef struct typedef struct
{ {
COLORREF clrBtnHighlight; /* COLOR_BTNHIGHLIGHT */ COLORREF clrBtnHighlight; /* COLOR_BTNHIGHLIGHT */
@ -137,6 +142,7 @@ extern COMCTL32_SysColor comctl32_color;
/* Internal function */ /* Internal function */
HWND COMCTL32_CreateToolTip (HWND); HWND COMCTL32_CreateToolTip (HWND);
VOID COMCTL32_RefreshSysColors(void); VOID COMCTL32_RefreshSysColors(void);
void COMCTL32_DrawInsertMark(HDC hDC, const RECT *lpRect, COLORREF clrInsertMark, BOOL bHorizontal);
INT Str_GetPtrWtoA (LPCWSTR lpSrc, LPSTR lpDest, INT nMaxLen); INT Str_GetPtrWtoA (LPCWSTR lpSrc, LPSTR lpDest, INT nMaxLen);
BOOL Str_SetPtrAtoW (LPWSTR *lppDest, LPCSTR lpSrc); BOOL Str_SetPtrAtoW (LPWSTR *lppDest, LPCSTR lpSrc);
@ -145,17 +151,19 @@ BOOL Str_SetPtrAtoW (LPWSTR *lppDest, LPCSTR lpSrc);
#define WINE_FILEVERSIONSTR "5.80" #define WINE_FILEVERSIONSTR "5.80"
/* Our internal stack structure of the window procedures to subclass */ /* Our internal stack structure of the window procedures to subclass */
typedef struct _SUBCLASSPROCS {
SUBCLASSPROC subproc;
UINT_PTR id;
DWORD_PTR ref;
struct _SUBCLASSPROCS *next;
} SUBCLASSPROCS, *LPSUBCLASSPROCS;
typedef struct typedef struct
{ {
struct { SUBCLASSPROCS *SubclassProcs;
SUBCLASSPROC subproc; SUBCLASSPROCS *stackpos;
UINT_PTR id;
DWORD_PTR ref;
} SubclassProcs[31];
int stackpos;
int stacknum;
int wndprocrecursion;
WNDPROC origproc; WNDPROC origproc;
int running;
} SUBCLASS_INFO, *LPSUBCLASS_INFO; } SUBCLASS_INFO, *LPSUBCLASS_INFO;
/* undocumented functions */ /* undocumented functions */

View file

@ -631,7 +631,8 @@ INT WINAPI
FindMRUData (HANDLE hList, LPCVOID lpData, DWORD cbData, LPINT lpRegNum) FindMRUData (HANDLE hList, LPCVOID lpData, DWORD cbData, LPINT lpRegNum)
{ {
LPWINEMRULIST mp = (LPWINEMRULIST)hList; LPWINEMRULIST mp = (LPWINEMRULIST)hList;
UINT i, ret; INT ret;
UINT i;
LPSTR dataA = NULL; LPSTR dataA = NULL;
if (!mp->extview.lpfnCompare) { if (!mp->extview.lpfnCompare) {

View file

@ -22,7 +22,7 @@ LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED
IDD_PROPSHEET DIALOG DISCARDABLE 0, 0, 220, 140 IDD_PROPSHEET DIALOG DISCARDABLE 0, 0, 220, 140
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE
CAPTION "属性 " CAPTION "属性 "
FONT 8, "MS Sans Serif" FONT 8, "MS Shell Dlg"
BEGIN BEGIN
DEFPUSHBUTTON "确定", IDOK,4,122,50,14, WS_TABSTOP | WS_GROUP DEFPUSHBUTTON "确定", IDOK,4,122,50,14, WS_TABSTOP | WS_GROUP
PUSHBUTTON "取消", IDCANCEL,58,122,50,14 PUSHBUTTON "取消", IDCANCEL,58,122,50,14
@ -35,7 +35,7 @@ END
IDD_WIZARD DIALOG DISCARDABLE 0, 0, 290, 159 IDD_WIZARD DIALOG DISCARDABLE 0, 0, 290, 159
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE
CAPTION "Wizard" CAPTION "Wizard"
FONT 8, "MS Sans Serif" FONT 8, "MS Shell Dlg"
BEGIN BEGIN
DEFPUSHBUTTON "结束", IDC_FINISH_BUTTON,121,138,50,14 DEFPUSHBUTTON "结束", IDC_FINISH_BUTTON,121,138,50,14
DEFPUSHBUTTON "下一步(&N) >", IDC_NEXT_BUTTON,121,138,50,14 DEFPUSHBUTTON "下一步(&N) >", IDC_NEXT_BUTTON,121,138,50,14
@ -51,7 +51,7 @@ END
IDD_TBCUSTOMIZE DIALOG DISCARDABLE 10, 20, 357, 125 IDD_TBCUSTOMIZE DIALOG DISCARDABLE 10, 20, 357, 125
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "自定义工具栏" CAPTION "自定义工具栏"
FONT 8, "MS Sans Serif" FONT 8, "MS Shell Dlg"
BEGIN BEGIN
DEFPUSHBUTTON "关闭(&C)", IDCANCEL,308,6,44,14 DEFPUSHBUTTON "关闭(&C)", IDCANCEL,308,6,44,14
PUSHBUTTON "重置(&e)", IDC_RESET_BTN,308,23,44,14 PUSHBUTTON "重置(&e)", IDC_RESET_BTN,308,23,44,14

View file

@ -0,0 +1,90 @@
/*
* Copyright 1999 Eric Kohl
*
* Czech resources for comctl32
* Copyright 2004 David Kredba
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library 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
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
LANGUAGE LANG_CZECH, SUBLANG_DEFAULT
IDD_PROPSHEET DIALOG DISCARDABLE 0, 0, 220, 140
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE
CAPTION "Vlastnosti "
FONT 8, "MS Shell Dlg"
BEGIN
DEFPUSHBUTTON "OK", IDOK,4,122,50,14, WS_TABSTOP | WS_GROUP
PUSHBUTTON "Storno", IDCANCEL,58,122,50,14
PUSHBUTTON "&Pou¾ít", IDC_APPLY_BUTTON,112,122,50,14,WS_DISABLED
PUSHBUTTON "Nápovìda", IDHELP,166,122,50,14,WS_TABSTOP|WS_GROUP
CONTROL "Tab", IDC_TABCONTROL,"SysTabControl32",WS_CLIPSIBLINGS|WS_GROUP|WS_TABSTOP|TCS_MULTILINE,4,4,212,114
END
IDD_WIZARD DIALOG DISCARDABLE 0, 0, 290, 159
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE
CAPTION "Prùvodce"
FONT 8, "MS Shell Dlg"
BEGIN
DEFPUSHBUTTON "Dokonèit", IDC_FINISH_BUTTON,121,138,50,14
DEFPUSHBUTTON "&Dal¹í >", IDC_NEXT_BUTTON,121,138,50,14
PUSHBUTTON "< &Zpìt", IDC_BACK_BUTTON,71,138,50,14
PUSHBUTTON "Storno", IDCANCEL,178,138,50,14
PUSHBUTTON "Nápovìda", IDHELP,235,138,50,14,WS_GROUP
LTEXT "", IDC_SUNKEN_LINE,7,129,278,1,SS_SUNKEN
CONTROL "Tab", IDC_TABCONTROL,"SysTabControl32",WS_CLIPSIBLINGS | WS_DISABLED,7,7,258,5
LTEXT "", IDC_SUNKEN_LINEHEADER,0,35,290,1,SS_LEFT | SS_SUNKEN | WS_CHILD | WS_VISIBLE
END
IDD_TBCUSTOMIZE DIALOG DISCARDABLE 10, 20, 357, 125
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "Nastavení panelu"
FONT 8, "MS Shell Dlg"
BEGIN
DEFPUSHBUTTON "&Zavøít", IDCANCEL,308,6,44,14
PUSHBUTTON "&Výchozí", IDC_RESET_BTN,308,23,44,14
PUSHBUTTON "&Nápovìda", IDC_HELP_BTN,308,40,44,14
PUSHBUTTON "Nahor&u", IDC_MOVEUP_BTN,308,74,44,14
PUSHBUTTON "&Dolù", IDC_MOVEDN_BTN,308,91,44,14
LTEXT "D&ostupná tlaèítka:", -1,4,5,84,10
LISTBOX IDC_AVAILBTN_LBOX,4,17,120,100, LBS_NOTIFY | LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT | LBS_DISABLENOSCROLL | WS_BORDER | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP
PUSHBUTTON "Pøid&at ->", IDOK, 131, 42, 44, 14
PUSHBUTTON "<- Odeb&rat", IDC_REMOVE_BTN,131,62,44,14
LTEXT "&Tlaèítka panelu:", -1,182,5,78,10
LISTBOX IDC_TOOLBARBTN_LBOX, 182,17,120,100,LBS_NOTIFY | LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT | LBS_DISABLENOSCROLL | WS_BORDER | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP
END
STRINGTABLE DISCARDABLE
{
IDS_CLOSE "Zavøít"
}
STRINGTABLE DISCARDABLE
{
IDM_TODAY "Dnes:"
IDM_GOTODAY "Jdi na dne¹ek"
}
STRINGTABLE DISCARDABLE
{
IDS_SEPARATOR "Oddìlovaè"
}
STRINGTABLE DISCARDABLE
{
HKY_NONE "®ádný"
}

View file

@ -42,7 +42,7 @@ STRINGTABLE DISCARDABLE
IDD_PROPSHEET DIALOG DISCARDABLE 0, 0, 220, 140 IDD_PROPSHEET DIALOG DISCARDABLE 0, 0, 220, 140
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE
CAPTION "Eigenschaften für " CAPTION "Eigenschaften für "
FONT 8, "MS Sans Serif" FONT 8, "MS Shell Dlg"
BEGIN BEGIN
DEFPUSHBUTTON "&OK", IDOK,4,122,50,14, WS_TABSTOP | WS_GROUP DEFPUSHBUTTON "&OK", IDOK,4,122,50,14, WS_TABSTOP | WS_GROUP
PUSHBUTTON "A&bbrechen", IDCANCEL,58,122,50,14 PUSHBUTTON "A&bbrechen", IDCANCEL,58,122,50,14
@ -55,7 +55,7 @@ END
IDD_WIZARD DIALOG DISCARDABLE 0, 0, 290, 159 IDD_WIZARD DIALOG DISCARDABLE 0, 0, 290, 159
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE
CAPTION "Wizard" CAPTION "Wizard"
FONT 8, "MS Sans Serif" FONT 8, "MS Shell Dlg"
BEGIN BEGIN
DEFPUSHBUTTON "&Beenden", IDC_FINISH_BUTTON,121,138,50,14 DEFPUSHBUTTON "&Beenden", IDC_FINISH_BUTTON,121,138,50,14
DEFPUSHBUTTON "&Weiter >", IDC_NEXT_BUTTON,121,138,50,14 DEFPUSHBUTTON "&Weiter >", IDC_NEXT_BUTTON,121,138,50,14
@ -71,7 +71,7 @@ END
IDD_TBCUSTOMIZE DIALOG DISCARDABLE 10, 20, 357, 125 IDD_TBCUSTOMIZE DIALOG DISCARDABLE 10, 20, 357, 125
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "Toolbar einrichten" CAPTION "Toolbar einrichten"
FONT 8, "MS Sans Serif" FONT 8, "MS Shell Dlg"
BEGIN BEGIN
DEFPUSHBUTTON "&Schließen", IDCANCEL,308,6,44,14 DEFPUSHBUTTON "&Schließen", IDCANCEL,308,6,44,14
PUSHBUTTON "&Zurücksetzen", IDC_RESET_BTN,308,23,44,14 PUSHBUTTON "&Zurücksetzen", IDC_RESET_BTN,308,23,44,14

View file

@ -21,7 +21,7 @@ LANGUAGE LANG_ENGLISH, SUBLANG_DEFAULT
IDD_PROPSHEET DIALOG DISCARDABLE 0, 0, 220, 140 IDD_PROPSHEET DIALOG DISCARDABLE 0, 0, 220, 140
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE
CAPTION "Properties for " CAPTION "Properties for "
FONT 8, "MS Sans Serif" FONT 8, "MS Shell Dlg"
BEGIN BEGIN
DEFPUSHBUTTON "OK", IDOK,4,122,50,14, WS_TABSTOP | WS_GROUP DEFPUSHBUTTON "OK", IDOK,4,122,50,14, WS_TABSTOP | WS_GROUP
PUSHBUTTON "Cancel", IDCANCEL,58,122,50,14 PUSHBUTTON "Cancel", IDCANCEL,58,122,50,14
@ -34,7 +34,7 @@ END
IDD_WIZARD DIALOG DISCARDABLE 0, 0, 290, 159 IDD_WIZARD DIALOG DISCARDABLE 0, 0, 290, 159
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE
CAPTION "Wizard" CAPTION "Wizard"
FONT 8, "MS Sans Serif" FONT 8, "MS Shell Dlg"
BEGIN BEGIN
DEFPUSHBUTTON "Finish", IDC_FINISH_BUTTON,121,138,50,14 DEFPUSHBUTTON "Finish", IDC_FINISH_BUTTON,121,138,50,14
DEFPUSHBUTTON "&Next >", IDC_NEXT_BUTTON,121,138,50,14 DEFPUSHBUTTON "&Next >", IDC_NEXT_BUTTON,121,138,50,14
@ -50,7 +50,7 @@ END
IDD_TBCUSTOMIZE DIALOG DISCARDABLE 10, 20, 357, 125 IDD_TBCUSTOMIZE DIALOG DISCARDABLE 10, 20, 357, 125
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "Customize Toolbar" CAPTION "Customize Toolbar"
FONT 8, "MS Sans Serif" FONT 8, "MS Shell Dlg"
BEGIN BEGIN
DEFPUSHBUTTON "&Close", IDCANCEL,308,6,44,14 DEFPUSHBUTTON "&Close", IDCANCEL,308,6,44,14
PUSHBUTTON "R&eset", IDC_RESET_BTN,308,23,44,14 PUSHBUTTON "R&eset", IDC_RESET_BTN,308,23,44,14

View file

@ -21,7 +21,7 @@ LANGUAGE LANG_SPANISH, SUBLANG_DEFAULT
IDD_PROPSHEET DIALOG DISCARDABLE 0, 0, 220, 140 IDD_PROPSHEET DIALOG DISCARDABLE 0, 0, 220, 140
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE
CAPTION "Propiedades de " CAPTION "Propiedades de "
FONT 8, "MS Sans Serif" FONT 8, "MS Shell Dlg"
BEGIN BEGIN
DEFPUSHBUTTON "Aceptar", IDOK,4,122,50,14, WS_TABSTOP | WS_GROUP DEFPUSHBUTTON "Aceptar", IDOK,4,122,50,14, WS_TABSTOP | WS_GROUP
PUSHBUTTON "Cancelar", IDCANCEL,58,122,50,14 PUSHBUTTON "Cancelar", IDCANCEL,58,122,50,14
@ -34,7 +34,7 @@ END
IDD_WIZARD DIALOG DISCARDABLE 0, 0, 290, 159 IDD_WIZARD DIALOG DISCARDABLE 0, 0, 290, 159
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE
CAPTION "Ayudante" CAPTION "Ayudante"
FONT 8, "MS Sans Serif" FONT 8, "MS Shell Dlg"
BEGIN BEGIN
DEFPUSHBUTTON "Terminar", IDC_FINISH_BUTTON,121,138,50,14 DEFPUSHBUTTON "Terminar", IDC_FINISH_BUTTON,121,138,50,14
DEFPUSHBUTTON "&Siguiente >", IDC_NEXT_BUTTON,121,138,50,14 DEFPUSHBUTTON "&Siguiente >", IDC_NEXT_BUTTON,121,138,50,14
@ -50,7 +50,7 @@ END
IDD_TBCUSTOMIZE DIALOG DISCARDABLE 10, 20, 357, 125 IDD_TBCUSTOMIZE DIALOG DISCARDABLE 10, 20, 357, 125
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "Personalizar barra de herramientas" CAPTION "Personalizar barra de herramientas"
FONT 8, "MS Sans Serif" FONT 8, "MS Shell Dlg"
BEGIN BEGIN
DEFPUSHBUTTON "&Cerrar", IDCANCEL,308,6,44,14 DEFPUSHBUTTON "&Cerrar", IDCANCEL,308,6,44,14
PUSHBUTTON "R&estaurar", IDC_RESET_BTN,308,23,44,14 PUSHBUTTON "R&estaurar", IDC_RESET_BTN,308,23,44,14

View file

@ -25,7 +25,7 @@ LANGUAGE LANG_FRENCH, SUBLANG_NEUTRAL
IDD_PROPSHEET DIALOG DISCARDABLE 0, 0, 220, 140 IDD_PROPSHEET DIALOG DISCARDABLE 0, 0, 220, 140
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE
CAPTION "Propriétés pour " CAPTION "Propriétés pour "
FONT 8, "MS Sans Serif" FONT 8, "MS Shell Dlg"
BEGIN BEGIN
DEFPUSHBUTTON "OK", IDOK,4,122,50,14, WS_TABSTOP | WS_GROUP DEFPUSHBUTTON "OK", IDOK,4,122,50,14, WS_TABSTOP | WS_GROUP
PUSHBUTTON "Annuler", IDCANCEL,58,122,50,14 PUSHBUTTON "Annuler", IDCANCEL,58,122,50,14
@ -38,7 +38,7 @@ END
IDD_WIZARD DIALOG DISCARDABLE 0, 0, 290, 159 IDD_WIZARD DIALOG DISCARDABLE 0, 0, 290, 159
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE
CAPTION "Assistant" CAPTION "Assistant"
FONT 8, "MS Sans Serif" FONT 8, "MS Shell Dlg"
BEGIN BEGIN
DEFPUSHBUTTON "Terminer", IDC_FINISH_BUTTON,121,138,50,14 DEFPUSHBUTTON "Terminer", IDC_FINISH_BUTTON,121,138,50,14
DEFPUSHBUTTON "&Suivant >", IDC_NEXT_BUTTON,121,138,50,14 DEFPUSHBUTTON "&Suivant >", IDC_NEXT_BUTTON,121,138,50,14
@ -54,7 +54,7 @@ END
IDD_TBCUSTOMIZE DIALOG DISCARDABLE 10, 20, 357, 125 IDD_TBCUSTOMIZE DIALOG DISCARDABLE 10, 20, 357, 125
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "Personnaliser la barre d'outils" CAPTION "Personnaliser la barre d'outils"
FONT 8, "MS Sans Serif" FONT 8, "MS Shell Dlg"
BEGIN BEGIN
DEFPUSHBUTTON "&Fermer", IDCANCEL,308,6,44,14 DEFPUSHBUTTON "&Fermer", IDCANCEL,308,6,44,14
PUSHBUTTON "&Réinitialiser", IDC_RESET_BTN,308,23,44,14 PUSHBUTTON "&Réinitialiser", IDC_RESET_BTN,308,23,44,14

View file

@ -22,7 +22,7 @@ LANGUAGE LANG_ITALIAN, SUBLANG_DEFAULT
IDD_PROPSHEET DIALOG DISCARDABLE 0, 0, 220, 140 IDD_PROPSHEET DIALOG DISCARDABLE 0, 0, 220, 140
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE
CAPTION "Proprietà per " CAPTION "Proprietà per "
FONT 8, "MS Sans Serif" FONT 8, "MS Shell Dlg"
BEGIN BEGIN
DEFPUSHBUTTON "OK", IDOK,4,122,50,14, WS_TABSTOP | WS_GROUP DEFPUSHBUTTON "OK", IDOK,4,122,50,14, WS_TABSTOP | WS_GROUP
PUSHBUTTON "Annulla", IDCANCEL,58,122,50,14 PUSHBUTTON "Annulla", IDCANCEL,58,122,50,14
@ -35,7 +35,7 @@ END
IDD_WIZARD DIALOG DISCARDABLE 0, 0, 290, 159 IDD_WIZARD DIALOG DISCARDABLE 0, 0, 290, 159
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE
CAPTION "Wizard" CAPTION "Wizard"
FONT 8, "MS Sans Serif" FONT 8, "MS Shell Dlg"
BEGIN BEGIN
DEFPUSHBUTTON "Fine", IDC_FINISH_BUTTON,121,138,50,14 DEFPUSHBUTTON "Fine", IDC_FINISH_BUTTON,121,138,50,14
DEFPUSHBUTTON "&Avanti >", IDC_NEXT_BUTTON,121,138,50,14 DEFPUSHBUTTON "&Avanti >", IDC_NEXT_BUTTON,121,138,50,14
@ -51,7 +51,7 @@ END
IDD_TBCUSTOMIZE DIALOG DISCARDABLE 10, 20, 357, 125 IDD_TBCUSTOMIZE DIALOG DISCARDABLE 10, 20, 357, 125
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "Personalitta la barra degli strumenti" CAPTION "Personalitta la barra degli strumenti"
FONT 8, "MS Sans Serif" FONT 8, "MS Shell Dlg"
BEGIN BEGIN
DEFPUSHBUTTON "&Chiudi", IDCANCEL,308,6,44,14 DEFPUSHBUTTON "&Chiudi", IDCANCEL,308,6,44,14
PUSHBUTTON "R&eimpostare", IDC_RESET_BTN,308,23,44,14 PUSHBUTTON "R&eimpostare", IDC_RESET_BTN,308,23,44,14

View file

@ -21,7 +21,7 @@ LANGUAGE LANG_KOREAN, SUBLANG_DEFAULT
IDD_PROPSHEET DIALOG DISCARDABLE 0, 0, 220, 140 IDD_PROPSHEET DIALOG DISCARDABLE 0, 0, 220, 140
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE
CAPTION "Properties for " CAPTION "Properties for "
FONT 9, "MS Sans Serif" FONT 9, "MS Shell Dlg"
BEGIN BEGIN
DEFPUSHBUTTON "확인", IDOK,4,122,50,14, WS_TABSTOP | WS_GROUP DEFPUSHBUTTON "확인", IDOK,4,122,50,14, WS_TABSTOP | WS_GROUP
PUSHBUTTON "취소", IDCANCEL,58,122,50,14 PUSHBUTTON "취소", IDCANCEL,58,122,50,14
@ -34,7 +34,7 @@ END
IDD_WIZARD DIALOG DISCARDABLE 0, 0, 290, 159 IDD_WIZARD DIALOG DISCARDABLE 0, 0, 290, 159
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE
CAPTION "Wizard" CAPTION "Wizard"
FONT 9, "MS Sans Serif" FONT 9, "MS Shell Dlg"
BEGIN BEGIN
DEFPUSHBUTTON "종료", IDC_FINISH_BUTTON,121,138,50,14 DEFPUSHBUTTON "종료", IDC_FINISH_BUTTON,121,138,50,14
DEFPUSHBUTTON "다음(&N) >", IDC_NEXT_BUTTON,121,138,50,14 DEFPUSHBUTTON "다음(&N) >", IDC_NEXT_BUTTON,121,138,50,14
@ -50,7 +50,7 @@ END
IDD_TBCUSTOMIZE DIALOG DISCARDABLE 10, 20, 357, 125 IDD_TBCUSTOMIZE DIALOG DISCARDABLE 10, 20, 357, 125
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "Customize Toolbar" CAPTION "Customize Toolbar"
FONT 9, "MS Sans Serif" FONT 9, "MS Shell Dlg"
BEGIN BEGIN
DEFPUSHBUTTON "닫기(&C)", IDCANCEL,308,6,44,14 DEFPUSHBUTTON "닫기(&C)", IDCANCEL,308,6,44,14
PUSHBUTTON "다시(&e)", IDC_RESET_BTN,308,23,44,14 PUSHBUTTON "다시(&e)", IDC_RESET_BTN,308,23,44,14

View file

@ -23,7 +23,7 @@ LANGUAGE LANG_DUTCH, SUBLANG_DEFAULT
IDD_PROPSHEET DIALOG DISCARDABLE 0, 0, 220, 140 IDD_PROPSHEET DIALOG DISCARDABLE 0, 0, 220, 140
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE
CAPTION "Eigenschappen van " CAPTION "Eigenschappen van "
FONT 8, "MS Sans Serif" FONT 8, "MS Shell Dlg"
BEGIN BEGIN
DEFPUSHBUTTON "OK", IDOK,4,122,50,14, WS_TABSTOP | WS_GROUP DEFPUSHBUTTON "OK", IDOK,4,122,50,14, WS_TABSTOP | WS_GROUP
PUSHBUTTON "Annuleren", IDCANCEL,58,122,50,14 PUSHBUTTON "Annuleren", IDCANCEL,58,122,50,14
@ -36,7 +36,7 @@ END
IDD_WIZARD DIALOG DISCARDABLE 0, 0, 290, 159 IDD_WIZARD DIALOG DISCARDABLE 0, 0, 290, 159
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE
CAPTION "Assistent" CAPTION "Assistent"
FONT 8, "MS Sans Serif" FONT 8, "MS Shell Dlg"
BEGIN BEGIN
DEFPUSHBUTTON "Beëindigen", IDC_FINISH_BUTTON,121,138,50,14 DEFPUSHBUTTON "Beëindigen", IDC_FINISH_BUTTON,121,138,50,14
DEFPUSHBUTTON "&Volgende >", IDC_NEXT_BUTTON,121,138,50,14 DEFPUSHBUTTON "&Volgende >", IDC_NEXT_BUTTON,121,138,50,14
@ -52,7 +52,7 @@ END
IDD_TBCUSTOMIZE DIALOG DISCARDABLE 10, 20, 357, 125 IDD_TBCUSTOMIZE DIALOG DISCARDABLE 10, 20, 357, 125
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "Gereedschappenbalk aanpassen" CAPTION "Gereedschappenbalk aanpassen"
FONT 8, "MS Sans Serif" FONT 8, "MS Shell Dlg"
BEGIN BEGIN
DEFPUSHBUTTON "&Afsluiten", IDCANCEL,308,6,44,14 DEFPUSHBUTTON "&Afsluiten", IDCANCEL,308,6,44,14
PUSHBUTTON "&Reset", IDC_RESET_BTN,308,23,44,14 PUSHBUTTON "&Reset", IDC_RESET_BTN,308,23,44,14

View file

@ -22,7 +22,7 @@ LANGUAGE LANG_POLISH, SUBLANG_DEFAULT
IDD_PROPSHEET DIALOG DISCARDABLE 0, 0, 220, 140 IDD_PROPSHEET DIALOG DISCARDABLE 0, 0, 220, 140
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE
CAPTION "W³aœciwoœci " CAPTION "W³aœciwoœci "
FONT 8, "MS Sans Serif" FONT 8, "MS Shell Dlg"
BEGIN BEGIN
DEFPUSHBUTTON "OK", IDOK,4,122,50,14, WS_TABSTOP | WS_GROUP DEFPUSHBUTTON "OK", IDOK,4,122,50,14, WS_TABSTOP | WS_GROUP
PUSHBUTTON "Anuluj", IDCANCEL,58,122,50,14 PUSHBUTTON "Anuluj", IDCANCEL,58,122,50,14
@ -35,7 +35,7 @@ END
IDD_WIZARD DIALOG DISCARDABLE 0, 0, 290, 159 IDD_WIZARD DIALOG DISCARDABLE 0, 0, 290, 159
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE
CAPTION "Kreator" CAPTION "Kreator"
FONT 8, "MS Sans Serif" FONT 8, "MS Shell Dlg"
BEGIN BEGIN
DEFPUSHBUTTON "Zakoñcz", IDC_FINISH_BUTTON,121,138,50,14 DEFPUSHBUTTON "Zakoñcz", IDC_FINISH_BUTTON,121,138,50,14
DEFPUSHBUTTON "&Dalej >", IDC_NEXT_BUTTON,121,138,50,14 DEFPUSHBUTTON "&Dalej >", IDC_NEXT_BUTTON,121,138,50,14
@ -51,7 +51,7 @@ END
IDD_TBCUSTOMIZE DIALOG DISCARDABLE 10, 20, 357, 125 IDD_TBCUSTOMIZE DIALOG DISCARDABLE 10, 20, 357, 125
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "Dostosowywanie paska narzêdzi" CAPTION "Dostosowywanie paska narzêdzi"
FONT 8, "MS Sans Serif" FONT 8, "MS Shell Dlg"
BEGIN BEGIN
DEFPUSHBUTTON "&Zamknij", IDCANCEL,308,6,44,14 DEFPUSHBUTTON "&Zamknij", IDCANCEL,308,6,44,14
PUSHBUTTON "Z&resetuj", IDC_RESET_BTN,308,23,44,14 PUSHBUTTON "Z&resetuj", IDC_RESET_BTN,308,23,44,14

View file

@ -21,7 +21,7 @@ LANGUAGE LANG_PORTUGUESE, SUBLANG_DEFAULT
IDD_PROPSHEET DIALOG DISCARDABLE 0, 0, 220, 140 IDD_PROPSHEET DIALOG DISCARDABLE 0, 0, 220, 140
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE
CAPTION "Propriedades para " CAPTION "Propriedades para "
FONT 8, "MS Sans Serif" FONT 8, "MS Shell Dlg"
BEGIN BEGIN
DEFPUSHBUTTON "OK", IDOK,4,122,50,14, WS_TABSTOP | WS_GROUP DEFPUSHBUTTON "OK", IDOK,4,122,50,14, WS_TABSTOP | WS_GROUP
PUSHBUTTON "Cancelar", IDCANCEL,58,122,50,14 PUSHBUTTON "Cancelar", IDCANCEL,58,122,50,14
@ -34,7 +34,7 @@ END
IDD_WIZARD DIALOG DISCARDABLE 0, 0, 290, 159 IDD_WIZARD DIALOG DISCARDABLE 0, 0, 290, 159
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE
CAPTION "Assistente" CAPTION "Assistente"
FONT 8, "MS Sans Serif" FONT 8, "MS Shell Dlg"
BEGIN BEGIN
DEFPUSHBUTTON "Finalizar", IDC_FINISH_BUTTON,121,138,50,14 DEFPUSHBUTTON "Finalizar", IDC_FINISH_BUTTON,121,138,50,14
DEFPUSHBUTTON "&Avançar >", IDC_NEXT_BUTTON,121,138,50,14 DEFPUSHBUTTON "&Avançar >", IDC_NEXT_BUTTON,121,138,50,14
@ -50,7 +50,7 @@ END
IDD_TBCUSTOMIZE DIALOG DISCARDABLE 10, 20, 357, 125 IDD_TBCUSTOMIZE DIALOG DISCARDABLE 10, 20, 357, 125
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "Personalizar barra de ferramentas" CAPTION "Personalizar barra de ferramentas"
FONT 8, "MS Sans Serif" FONT 8, "MS Shell Dlg"
BEGIN BEGIN
DEFPUSHBUTTON "&Fechar", IDCANCEL,308,6,44,14 DEFPUSHBUTTON "&Fechar", IDCANCEL,308,6,44,14
PUSHBUTTON "R&estaurar", IDC_RESET_BTN,308,23,44,14 PUSHBUTTON "R&estaurar", IDC_RESET_BTN,308,23,44,14

View file

@ -23,7 +23,7 @@ LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT
IDD_PROPSHEET DIALOG DISCARDABLE 0, 0, 220, 140 IDD_PROPSHEET DIALOG DISCARDABLE 0, 0, 220, 140
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE
CAPTION "Ñâîéñòâà äëÿ " CAPTION "Ñâîéñòâà äëÿ "
FONT 8, "MS Sans Serif" FONT 8, "MS Shell Dlg"
BEGIN BEGIN
DEFPUSHBUTTON "OK", IDOK,4,122,50,14, WS_TABSTOP | WS_GROUP DEFPUSHBUTTON "OK", IDOK,4,122,50,14, WS_TABSTOP | WS_GROUP
PUSHBUTTON "Îòìåíà", IDCANCEL,58,122,50,14 PUSHBUTTON "Îòìåíà", IDCANCEL,58,122,50,14
@ -36,7 +36,7 @@ END
IDD_WIZARD DIALOG DISCARDABLE 0, 0, 290, 159 IDD_WIZARD DIALOG DISCARDABLE 0, 0, 290, 159
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE
CAPTION "Ìàñòåð" CAPTION "Ìàñòåð"
FONT 8, "MS Sans Serif" FONT 8, "MS Shell Dlg"
BEGIN BEGIN
DEFPUSHBUTTON "Çàâåðøèòü", IDC_FINISH_BUTTON,121,138,50,14 DEFPUSHBUTTON "Çàâåðøèòü", IDC_FINISH_BUTTON,121,138,50,14
DEFPUSHBUTTON "&Äàëåå >", IDC_NEXT_BUTTON,121,138,50,14 DEFPUSHBUTTON "&Äàëåå >", IDC_NEXT_BUTTON,121,138,50,14
@ -52,7 +52,7 @@ END
IDD_TBCUSTOMIZE DIALOG DISCARDABLE 10, 20, 357, 125 IDD_TBCUSTOMIZE DIALOG DISCARDABLE 10, 20, 357, 125
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "Íàñòðîéêà ïàíåëè èíñòðóìåíòîâ" CAPTION "Íàñòðîéêà ïàíåëè èíñòðóìåíòîâ"
FONT 8, "MS Sans Serif" FONT 8, "MS Shell Dlg"
BEGIN BEGIN
DEFPUSHBUTTON "&Çàêðûòü", IDCANCEL,308,6,44,14 DEFPUSHBUTTON "&Çàêðûòü", IDCANCEL,308,6,44,14
PUSHBUTTON "Ñ&áðîñèòü", IDC_RESET_BTN,308,23,44,14 PUSHBUTTON "Ñ&áðîñèòü", IDC_RESET_BTN,308,23,44,14

View file

@ -21,7 +21,7 @@ LANGUAGE LANG_SLOVENIAN, SUBLANG_DEFAULT
IDD_PROPSHEET DIALOG DISCARDABLE 0, 0, 220, 140 IDD_PROPSHEET DIALOG DISCARDABLE 0, 0, 220, 140
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE
CAPTION "Lastnosti" CAPTION "Lastnosti"
FONT 8, "MS Sans Serif" FONT 8, "MS Shell Dlg"
BEGIN BEGIN
DEFPUSHBUTTON "V redu", IDOK,4,122,50,14, WS_TABSTOP | WS_GROUP DEFPUSHBUTTON "V redu", IDOK,4,122,50,14, WS_TABSTOP | WS_GROUP
PUSHBUTTON "Preklièi", IDCANCEL,58,122,50,14 PUSHBUTTON "Preklièi", IDCANCEL,58,122,50,14
@ -34,7 +34,7 @@ END
IDD_WIZARD DIALOG DISCARDABLE 0, 0, 290, 159 IDD_WIZARD DIALOG DISCARDABLE 0, 0, 290, 159
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE
CAPTION "Èarovnik" CAPTION "Èarovnik"
FONT 8, "MS Sans Serif" FONT 8, "MS Shell Dlg"
BEGIN BEGIN
DEFPUSHBUTTON "Dokonèaj", IDC_FINISH_BUTTON,121,138,50,14 DEFPUSHBUTTON "Dokonèaj", IDC_FINISH_BUTTON,121,138,50,14
DEFPUSHBUTTON "Naprej >", IDC_NEXT_BUTTON,121,138,50,14 DEFPUSHBUTTON "Naprej >", IDC_NEXT_BUTTON,121,138,50,14
@ -50,7 +50,7 @@ END
IDD_TBCUSTOMIZE DIALOG DISCARDABLE 10, 20, 357, 125 IDD_TBCUSTOMIZE DIALOG DISCARDABLE 10, 20, 357, 125
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "Prilagoditev orodne vrstice" CAPTION "Prilagoditev orodne vrstice"
FONT 8, "MS Sans Serif" FONT 8, "MS Shell Dlg"
BEGIN BEGIN
DEFPUSHBUTTON "&Zapri", IDCANCEL,308,6,44,14 DEFPUSHBUTTON "&Zapri", IDCANCEL,308,6,44,14
PUSHBUTTON "Po&nastavi", IDC_RESET_BTN,308,23,44,14 PUSHBUTTON "Po&nastavi", IDC_RESET_BTN,308,23,44,14

View file

@ -21,7 +21,7 @@ LANGUAGE LANG_THAI, SUBLANG_DEFAULT
IDD_PROPSHEET DIALOG DISCARDABLE 0, 0, 220, 140 IDD_PROPSHEET DIALOG DISCARDABLE 0, 0, 220, 140
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE
CAPTION "¤Ø³ÊÁºÑµÔ¢Í§ " CAPTION "¤Ø³ÊÁºÑµÔ¢Í§ "
FONT 8, "MS Sans Serif" FONT 8, "MS Shell Dlg"
BEGIN BEGIN
DEFPUSHBUTTON "µ¡Å§", IDOK,4,122,50,14, WS_TABSTOP | WS_GROUP DEFPUSHBUTTON "µ¡Å§", IDOK,4,122,50,14, WS_TABSTOP | WS_GROUP
PUSHBUTTON "¡àÅÔ¡", IDCANCEL,58,122,50,14 PUSHBUTTON "¡àÅÔ¡", IDCANCEL,58,122,50,14
@ -34,7 +34,7 @@ END
IDD_WIZARD DIALOG DISCARDABLE 0, 0, 290, 159 IDD_WIZARD DIALOG DISCARDABLE 0, 0, 290, 159
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE
CAPTION "Wizard" CAPTION "Wizard"
FONT 8, "MS Sans Serif" FONT 8, "MS Shell Dlg"
BEGIN BEGIN
DEFPUSHBUTTON "·íÒãËéàÊÃç¨", IDC_FINISH_BUTTON,121,138,50,14 DEFPUSHBUTTON "·íÒãËéàÊÃç¨", IDC_FINISH_BUTTON,121,138,50,14
DEFPUSHBUTTON "µèÍä» >", IDC_NEXT_BUTTON,121,138,50,14 DEFPUSHBUTTON "µèÍä» >", IDC_NEXT_BUTTON,121,138,50,14
@ -50,7 +50,7 @@ END
IDD_TBCUSTOMIZE DIALOG DISCARDABLE 10, 20, 357, 125 IDD_TBCUSTOMIZE DIALOG DISCARDABLE 10, 20, 357, 125
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "»ÃѺáµè§á¶ºà¤Ã×èͧÁ×Í" CAPTION "»ÃѺáµè§á¶ºà¤Ã×èͧÁ×Í"
FONT 8, "MS Sans Serif" FONT 8, "MS Shell Dlg"
BEGIN BEGIN
DEFPUSHBUTTON "»Ô´", IDCANCEL,308,6,44,14 DEFPUSHBUTTON "»Ô´", IDCANCEL,308,6,44,14
PUSHBUTTON "á¡éÍÍ¡", IDC_RESET_BTN,308,23,44,14 PUSHBUTTON "á¡éÍÍ¡", IDC_RESET_BTN,308,23,44,14

View file

@ -23,7 +23,7 @@ LANGUAGE LANG_UKRAINIAN, SUBLANG_DEFAULT
IDD_PROPSHEET DIALOG DISCARDABLE 0, 0, 220, 140 IDD_PROPSHEET DIALOG DISCARDABLE 0, 0, 220, 140
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE
CAPTION "Âëàñòèâîñò³ äëÿ " CAPTION "Âëàñòèâîñò³ äëÿ "
FONT 8, "MS Sans Serif" FONT 8, "MS Shell Dlg"
BEGIN BEGIN
DEFPUSHBUTTON "OK", IDOK,4,122,50,14, WS_TABSTOP | WS_GROUP DEFPUSHBUTTON "OK", IDOK,4,122,50,14, WS_TABSTOP | WS_GROUP
PUSHBUTTON "&³äì³íà", IDCANCEL,58,122,50,14 PUSHBUTTON "&³äì³íà", IDCANCEL,58,122,50,14
@ -36,7 +36,7 @@ END
IDD_WIZARD DIALOG DISCARDABLE 0, 0, 290, 159 IDD_WIZARD DIALOG DISCARDABLE 0, 0, 290, 159
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE
CAPTION "Ìàñòåð" CAPTION "Ìàñòåð"
FONT 8, "MS Sans Serif" FONT 8, "MS Shell Dlg"
BEGIN BEGIN
DEFPUSHBUTTON "&Çàâåðøèòè", IDC_FINISH_BUTTON,121,138,50,14 DEFPUSHBUTTON "&Çàâåðøèòè", IDC_FINISH_BUTTON,121,138,50,14
DEFPUSHBUTTON "&Äàë³ >", IDC_NEXT_BUTTON,121,138,50,14 DEFPUSHBUTTON "&Äàë³ >", IDC_NEXT_BUTTON,121,138,50,14
@ -52,7 +52,7 @@ END
IDD_TBCUSTOMIZE DIALOG DISCARDABLE 10, 20, 357, 125 IDD_TBCUSTOMIZE DIALOG DISCARDABLE 10, 20, 357, 125
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "Íàñòðîéêà ïàíåë³ ³íñòðóìåíò³â" CAPTION "Íàñòðîéêà ïàíåë³ ³íñòðóìåíò³â"
FONT 8, "MS Sans Serif" FONT 8, "MS Shell Dlg"
BEGIN BEGIN
DEFPUSHBUTTON "&Çàêðèòè", IDCANCEL,308,6,44,14 DEFPUSHBUTTON "&Çàêðèòè", IDCANCEL,308,6,44,14
PUSHBUTTON "&Ñêèíóòè", IDC_RESET_BTN,308,23,44,14 PUSHBUTTON "&Ñêèíóòè", IDC_RESET_BTN,308,23,44,14

View file

@ -116,6 +116,7 @@ extern void TREEVIEW_Unregister(void);
extern void UPDOWN_Register(void); extern void UPDOWN_Register(void);
extern void UPDOWN_Unregister(void); extern void UPDOWN_Unregister(void);
LRESULT WINAPI COMCTL32_SubclassProc (HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
LPSTR COMCTL32_aSubclass = NULL; LPSTR COMCTL32_aSubclass = NULL;
HMODULE COMCTL32_hModule = 0; HMODULE COMCTL32_hModule = 0;
@ -831,9 +832,9 @@ CreateMappedBitmap (HINSTANCE hInstance, INT idBitmap, UINT wFlags,
HGLOBAL hglb; HGLOBAL hglb;
HRSRC hRsrc; HRSRC hRsrc;
LPBITMAPINFOHEADER lpBitmap, lpBitmapInfo; LPBITMAPINFOHEADER lpBitmap, lpBitmapInfo;
UINT nSize, nColorTableSize; UINT nSize, nColorTableSize, iColor;
RGBQUAD *pColorTable; RGBQUAD *pColorTable;
INT iColor, i, iMaps, nWidth, nHeight; INT i, iMaps, nWidth, nHeight;
HDC hdcScreen; HDC hdcScreen;
HBITMAP hbm; HBITMAP hbm;
LPCOLORMAP sysColorMap; LPCOLORMAP sysColorMap;
@ -1092,7 +1093,7 @@ BOOL WINAPI SetWindowSubclass (HWND hWnd, SUBCLASSPROC pfnSubclass,
UINT_PTR uIDSubclass, DWORD_PTR dwRef) UINT_PTR uIDSubclass, DWORD_PTR dwRef)
{ {
LPSUBCLASS_INFO stack; LPSUBCLASS_INFO stack;
int n; LPSUBCLASSPROCS proc;
TRACE ("(%p, %p, %x, %lx)\n", hWnd, pfnSubclass, uIDSubclass, dwRef); TRACE ("(%p, %p, %x, %lx)\n", hWnd, pfnSubclass, uIDSubclass, dwRef);
@ -1115,48 +1116,43 @@ BOOL WINAPI SetWindowSubclass (HWND hWnd, SUBCLASSPROC pfnSubclass,
/* set window procedure to our own and save the current one */ /* set window procedure to our own and save the current one */
if (IsWindowUnicode (hWnd)) if (IsWindowUnicode (hWnd))
stack->origproc = (WNDPROC)SetWindowLongW (hWnd, GWL_WNDPROC, stack->origproc = (WNDPROC)SetWindowLongPtrW (hWnd, GWLP_WNDPROC,
(LONG)DefSubclassProc); (DWORD_PTR)COMCTL32_SubclassProc);
else else
stack->origproc = (WNDPROC)SetWindowLongA (hWnd, GWL_WNDPROC, stack->origproc = (WNDPROC)SetWindowLongPtrA (hWnd, GWLP_WNDPROC,
(LONG)DefSubclassProc); (DWORD_PTR)COMCTL32_SubclassProc);
} else { }
WNDPROC current; else {
if (IsWindowUnicode (hWnd)) /* Check to see if we have called this function with the same uIDSubClass
current = (WNDPROC)GetWindowLongW (hWnd, GWL_WNDPROC); * and pfnSubclass */
else proc = stack->SubclassProcs;
current = (WNDPROC)GetWindowLongA (hWnd, GWL_WNDPROC); while (proc) {
if ((proc->id == uIDSubclass) &&
if (current != DefSubclassProc) { (proc->subproc == pfnSubclass)) {
ERR ("Application has subclassed with our procedure, then manually, then with us again. The current implementation can't handle this.\n"); proc->ref = dwRef;
return FALSE; return TRUE;
}
proc = proc->next;
} }
} }
/* Check to see if we have called this function with the same uIDSubClass proc = HeapAlloc(GetProcessHeap(), 0, sizeof(SUBCLASSPROCS));
* and pfnSubclass */ if (!proc) {
for (n = 0; n < stack->stacknum; n++) ERR ("Failed to allocate subclass entry in stack\n");
if ((stack->SubclassProcs[n].id == uIDSubclass) && if (IsWindowUnicode (hWnd))
(stack->SubclassProcs[n].subproc == pfnSubclass)) { SetWindowLongPtrW (hWnd, GWLP_WNDPROC, (DWORD_PTR)stack->origproc);
stack->SubclassProcs[n].ref = dwRef; else
return TRUE; SetWindowLongPtrA (hWnd, GWLP_WNDPROC, (DWORD_PTR)stack->origproc);
} HeapFree (GetProcessHeap (), 0, stack);
RemovePropA( hWnd, COMCTL32_aSubclass );
if (stack->stacknum >= 32) {
ERR ("We have a Subclass stack overflow, please increment size\n");
return FALSE; return FALSE;
} }
memmove (&stack->SubclassProcs[1], &stack->SubclassProcs[0], proc->subproc = pfnSubclass;
sizeof(stack->SubclassProcs[0]) * stack->stacknum); proc->ref = dwRef;
proc->id = uIDSubclass;
stack->stacknum++; proc->next = stack->SubclassProcs;
if (stack->wndprocrecursion) stack->SubclassProcs = proc;
stack->stackpos++;
stack->SubclassProcs[0].subproc = pfnSubclass;
stack->SubclassProcs[0].ref = dwRef;
stack->SubclassProcs[0].id = uIDSubclass;
return TRUE; return TRUE;
} }
@ -1182,7 +1178,7 @@ BOOL WINAPI GetWindowSubclass (HWND hWnd, SUBCLASSPROC pfnSubclass,
UINT_PTR uID, DWORD_PTR *pdwRef) UINT_PTR uID, DWORD_PTR *pdwRef)
{ {
LPSUBCLASS_INFO stack; LPSUBCLASS_INFO stack;
int n; LPSUBCLASSPROCS proc;
TRACE ("(%p, %p, %x, %p)\n", hWnd, pfnSubclass, uID, pdwRef); TRACE ("(%p, %p, %x, %p)\n", hWnd, pfnSubclass, uID, pdwRef);
@ -1191,12 +1187,15 @@ BOOL WINAPI GetWindowSubclass (HWND hWnd, SUBCLASSPROC pfnSubclass,
if (!stack) if (!stack)
return FALSE; return FALSE;
for (n = 0; n < stack->stacknum; n++) proc = stack->SubclassProcs;
if ((stack->SubclassProcs[n].id == uID) && while (proc) {
(stack->SubclassProcs[n].subproc == pfnSubclass)) { if ((proc->id == uID) &&
*pdwRef = stack->SubclassProcs[n].ref; (proc->subproc == pfnSubclass)) {
*pdwRef = proc->ref;
return TRUE; return TRUE;
} }
proc = proc->next;
}
return FALSE; return FALSE;
} }
@ -1220,7 +1219,9 @@ BOOL WINAPI GetWindowSubclass (HWND hWnd, SUBCLASSPROC pfnSubclass,
BOOL WINAPI RemoveWindowSubclass(HWND hWnd, SUBCLASSPROC pfnSubclass, UINT_PTR uID) BOOL WINAPI RemoveWindowSubclass(HWND hWnd, SUBCLASSPROC pfnSubclass, UINT_PTR uID)
{ {
LPSUBCLASS_INFO stack; LPSUBCLASS_INFO stack;
int n; LPSUBCLASSPROCS prevproc = NULL;
LPSUBCLASSPROCS proc;
BOOL ret = FALSE;
TRACE ("(%p, %p, %x)\n", hWnd, pfnSubclass, uID); TRACE ("(%p, %p, %x)\n", hWnd, pfnSubclass, uID);
@ -1229,40 +1230,81 @@ BOOL WINAPI RemoveWindowSubclass(HWND hWnd, SUBCLASSPROC pfnSubclass, UINT_PTR u
if (!stack) if (!stack)
return FALSE; return FALSE;
if ((stack->stacknum == 1) && (stack->stackpos == 1) && proc = stack->SubclassProcs;
!stack->wndprocrecursion) { while (proc) {
if ((proc->id == uID) &&
(proc->subproc == pfnSubclass)) {
if (!prevproc)
stack->SubclassProcs = proc->next;
else
prevproc->next = proc->next;
if (stack->stackpos == proc)
stack->stackpos = stack->stackpos->next;
HeapFree (GetProcessHeap (), 0, proc);
ret = TRUE;
break;
}
prevproc = proc;
proc = proc->next;
}
if (!stack->SubclassProcs && !stack->running) {
TRACE("Last Subclass removed, cleaning up\n"); TRACE("Last Subclass removed, cleaning up\n");
/* clean up our heap and reset the origional window procedure */ /* clean up our heap and reset the origional window procedure */
if (IsWindowUnicode (hWnd)) if (IsWindowUnicode (hWnd))
SetWindowLongW (hWnd, GWL_WNDPROC, (LONG)stack->origproc); SetWindowLongPtrW (hWnd, GWLP_WNDPROC, (DWORD_PTR)stack->origproc);
else else
SetWindowLongA (hWnd, GWL_WNDPROC, (LONG)stack->origproc); SetWindowLongPtrA (hWnd, GWLP_WNDPROC, (DWORD_PTR)stack->origproc);
HeapFree (GetProcessHeap (), 0, stack); HeapFree (GetProcessHeap (), 0, stack);
RemovePropA( hWnd, COMCTL32_aSubclass ); RemovePropA( hWnd, COMCTL32_aSubclass );
return TRUE;
} }
for (n = stack->stacknum - 1; n >= 0; n--) return ret;
if ((stack->SubclassProcs[n].id == uID) &&
(stack->SubclassProcs[n].subproc == pfnSubclass)) {
if (n != stack->stacknum)
/* Fill the hole in the stack */
memmove (&stack->SubclassProcs[n], &stack->SubclassProcs[n + 1],
sizeof(stack->SubclassProcs[0]) * (stack->stacknum - n));
stack->SubclassProcs[n].subproc = NULL;
stack->SubclassProcs[n].ref = 0;
stack->SubclassProcs[n].id = 0;
stack->stacknum--;
if (n < stack->stackpos && stack->wndprocrecursion)
stack->stackpos--;
return TRUE;
}
return FALSE;
} }
/***********************************************************************
* COMCTL32_SubclassProc (internal)
*
* Window procedure for all subclassed windows.
* Saves the current subclassing stack position to support nested messages
*/
LRESULT WINAPI COMCTL32_SubclassProc (HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
LPSUBCLASS_INFO stack;
LPSUBCLASSPROCS proc;
LRESULT ret;
TRACE ("(%p, 0x%08x, 0x%08x, 0x%08lx)\n", hWnd, uMsg, wParam, lParam);
stack = (LPSUBCLASS_INFO)GetPropA (hWnd, COMCTL32_aSubclass);
if (!stack) {
ERR ("Our sub classing stack got erased for %p!! Nothing we can do\n", hWnd);
return 0;
}
/* Save our old stackpos to properly handle nested messages */
proc = stack->stackpos;
stack->stackpos = stack->SubclassProcs;
stack->running++;
ret = DefSubclassProc(hWnd, uMsg, wParam, lParam);
stack->running--;
stack->stackpos = proc;
if (!stack->SubclassProcs) {
TRACE("Last Subclass removed, cleaning up\n");
/* clean up our heap and reset the origional window procedure */
if (IsWindowUnicode (hWnd))
SetWindowLongPtrW (hWnd, GWLP_WNDPROC, (DWORD_PTR)stack->origproc);
else
SetWindowLongPtrA (hWnd, GWLP_WNDPROC, (DWORD_PTR)stack->origproc);
HeapFree (GetProcessHeap (), 0, stack);
RemovePropA( hWnd, COMCTL32_aSubclass );
}
return ret;
}
/*********************************************************************** /***********************************************************************
* DefSubclassProc [COMCTL32.413] * DefSubclassProc [COMCTL32.413]
@ -1285,6 +1327,8 @@ LRESULT WINAPI DefSubclassProc (HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lPar
LPSUBCLASS_INFO stack; LPSUBCLASS_INFO stack;
LRESULT ret; LRESULT ret;
TRACE ("(%p, 0x%08x, 0x%08x, 0x%08lx)\n", hWnd, uMsg, wParam, lParam);
/* retrieve our little stack from the Properties */ /* retrieve our little stack from the Properties */
stack = (LPSUBCLASS_INFO)GetPropA (hWnd, COMCTL32_aSubclass); stack = (LPSUBCLASS_INFO)GetPropA (hWnd, COMCTL32_aSubclass);
if (!stack) { if (!stack) {
@ -1292,41 +1336,19 @@ LRESULT WINAPI DefSubclassProc (HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lPar
return 0; return 0;
} }
stack->wndprocrecursion++;
/* If we are at the end of stack then we have to call the original /* If we are at the end of stack then we have to call the original
* window procedure */ * window procedure */
if (stack->stackpos == stack->stacknum) { if (!stack->stackpos) {
if (IsWindowUnicode (hWnd)) if (IsWindowUnicode (hWnd))
ret = CallWindowProcW (stack->origproc, hWnd, uMsg, wParam, lParam); ret = CallWindowProcW (stack->origproc, hWnd, uMsg, wParam, lParam);
else else
ret = CallWindowProcA (stack->origproc, hWnd, uMsg, wParam, lParam); ret = CallWindowProcA (stack->origproc, hWnd, uMsg, wParam, lParam);
} else { } else {
stack->stackpos++; LPSUBCLASSPROCS proc = stack->stackpos;
stack->stackpos = stack->stackpos->next;
/* call the Subclass procedure from the stack */ /* call the Subclass procedure from the stack */
ret = stack->SubclassProcs[stack->stackpos - 1].subproc (hWnd, uMsg, wParam, lParam, ret = proc->subproc (hWnd, uMsg, wParam, lParam,
stack->SubclassProcs[stack->stackpos - 1].id, stack->SubclassProcs[stack->stackpos - 1].ref); proc->id, proc->ref);
stack->stackpos--;
}
/* We finished the recursion, so let's reinitalize the stack position to
* beginning */
if ((--stack->wndprocrecursion) == 0) {
stack->stackpos = 0;
}
/* If we removed the last entry in our stack while a window procedure was
* running then we have to clean up */
if ((stack->stackpos == 0) && (stack->stacknum == 0)) {
TRACE("Last Subclass removed, cleaning up\n");
/* clean up our heap and reset the origional window procedure */
if (IsWindowUnicode (hWnd))
SetWindowLongW (hWnd, GWL_WNDPROC, (LONG)stack->origproc);
else
SetWindowLongA (hWnd, GWL_WNDPROC, (LONG)stack->origproc);
HeapFree (GetProcessHeap (), 0, stack);
RemovePropA( hWnd, COMCTL32_aSubclass );
return TRUE;
} }
return ret; return ret;
@ -1364,12 +1386,12 @@ COMCTL32_CreateToolTip(HWND hwndOwner)
/* true owner can be different if hwndOwner is a child window */ /* true owner can be different if hwndOwner is a child window */
HWND hwndTrueOwner = GetWindow(hwndToolTip, GW_OWNER); HWND hwndTrueOwner = GetWindow(hwndToolTip, GW_OWNER);
nmttc.hdr.hwndFrom = hwndTrueOwner; nmttc.hdr.hwndFrom = hwndTrueOwner;
nmttc.hdr.idFrom = GetWindowLongA(hwndTrueOwner, GWL_ID); nmttc.hdr.idFrom = GetWindowLongPtrW(hwndTrueOwner, GWLP_ID);
nmttc.hdr.code = NM_TOOLTIPSCREATED; nmttc.hdr.code = NM_TOOLTIPSCREATED;
nmttc.hwndToolTips = hwndToolTip; nmttc.hwndToolTips = hwndToolTip;
SendMessageA(GetParent(hwndTrueOwner), WM_NOTIFY, SendMessageA(GetParent(hwndTrueOwner), WM_NOTIFY,
(WPARAM)GetWindowLongA(hwndTrueOwner, GWL_ID), (WPARAM)GetWindowLongPtrW(hwndTrueOwner, GWLP_ID),
(LPARAM)&nmttc); (LPARAM)&nmttc);
} }
@ -1410,3 +1432,56 @@ COMCTL32_RefreshSysColors(void)
comctl32_color.clrInfoBk = GetSysColor (COLOR_INFOBK); comctl32_color.clrInfoBk = GetSysColor (COLOR_INFOBK);
comctl32_color.clrInfoText = GetSysColor (COLOR_INFOTEXT); comctl32_color.clrInfoText = GetSysColor (COLOR_INFOTEXT);
} }
/***********************************************************************
* COMCTL32_DrawInsertMark [NOT AN API]
*
* Draws an insertion mark (which looks similar to an 'I').
*
* PARAMS
* hDC [I] Device context to draw onto.
* lpRect [I] Co-ordinates of insertion mark.
* clrInsertMark [I] Colour of the insertion mark.
* bHorizontal [I] True if insert mark should be drawn horizontally,
* vertical otherwise.
*
* RETURNS
* none
*
* NOTES
* Draws up to but not including the bottom co-ordinate when drawing
* vertically or the right co-ordinate when horizontal.
*/
void COMCTL32_DrawInsertMark(HDC hDC, const RECT *lpRect, COLORREF clrInsertMark, BOOL bHorizontal)
{
HPEN hPen = CreatePen(PS_SOLID, 1, clrInsertMark);
HPEN hOldPen;
static const DWORD adwPolyPoints[] = {4,4,4};
LONG lCentre = (bHorizontal ?
lpRect->top + (lpRect->bottom - lpRect->top)/2 :
lpRect->left + (lpRect->right - lpRect->left)/2);
LONG l1 = (bHorizontal ? lpRect->left : lpRect->top);
LONG l2 = (bHorizontal ? lpRect->right : lpRect->bottom);
const POINT aptInsertMark[] =
{
/* top (V) or left (H) arrow */
{lCentre , l1 + 2},
{lCentre - 2, l1 },
{lCentre + 3, l1 },
{lCentre + 1, l1 + 2},
/* middle line */
{lCentre , l2 - 2},
{lCentre , l1 - 1},
{lCentre + 1, l1 - 1},
{lCentre + 1, l2 - 2},
/* bottom (V) or right (H) arrow */
{lCentre , l2 - 3},
{lCentre - 2, l2 - 1},
{lCentre + 3, l2 - 1},
{lCentre + 1, l2 - 3},
};
hOldPen = SelectObject(hDC, hPen);
PolyPolyline(hDC, aptInsertMark, adwPolyPoints, sizeof(adwPolyPoints)/sizeof(adwPolyPoints[0]));
SelectObject(hDC, hOldPen);
DeleteObject(hPen);
}

View file

@ -110,7 +110,7 @@ extern int MONTHCAL_MonthLength(int month, int year);
#define DTHT_MCPOPUP 0x300 /* & DTHT_DATEFIELD 0 when DATETIME_KeyDown */ #define DTHT_MCPOPUP 0x300 /* & DTHT_DATEFIELD 0 when DATETIME_KeyDown */
#define DTHT_GOTFOCUS 0x400 /* tests for date-fields */ #define DTHT_GOTFOCUS 0x400 /* tests for date-fields */
#define DATETIME_GetInfoPtr(hwnd) ((DATETIME_INFO *)GetWindowLongA (hwnd, 0)) #define DATETIME_GetInfoPtr(hwnd) ((DATETIME_INFO *)GetWindowLongPtrW (hwnd, 0))
static BOOL DATETIME_SendSimpleNotify (HWND hwnd, UINT code); static BOOL DATETIME_SendSimpleNotify (HWND hwnd, UINT code);
static BOOL DATETIME_SendDateTimeChangeNotify (HWND hwnd); static BOOL DATETIME_SendDateTimeChangeNotify (HWND hwnd);
@ -256,7 +256,8 @@ DATETIME_SetMonthCalFont (HWND hwnd, WPARAM wParam, LPARAM lParam)
static void static void
DATETIME_UseFormat (DATETIME_INFO *infoPtr, const char *formattxt) DATETIME_UseFormat (DATETIME_INFO *infoPtr, const char *formattxt)
{ {
int i,j,k,len; unsigned int i;
int j,k,len;
int *nrFields=& infoPtr->nrFields; int *nrFields=& infoPtr->nrFields;
TRACE ("%s\n",formattxt); TRACE ("%s\n",formattxt);
@ -267,7 +268,7 @@ DATETIME_UseFormat (DATETIME_INFO *infoPtr, const char *formattxt)
len=strlen(allowedformatchars); len=strlen(allowedformatchars);
k=0; k=0;
for (i=0; i<strlen (formattxt); i++) { for (i=0; formattxt[i]; i++) {
TRACE ("\n%d %c:",i, formattxt[i]); TRACE ("\n%d %c:",i, formattxt[i]);
for (j=0; j<len; j++) { for (j=0; j<len; j++) {
if (allowedformatchars[j]==formattxt[i]) { if (allowedformatchars[j]==formattxt[i]) {
@ -1128,7 +1129,7 @@ DATETIME_SendDateTimeChangeNotify (HWND hwnd)
TRACE ("\n"); TRACE ("\n");
dtdtc.nmhdr.hwndFrom = hwnd; dtdtc.nmhdr.hwndFrom = hwnd;
dtdtc.nmhdr.idFrom = GetWindowLongA( hwnd, GWL_ID); dtdtc.nmhdr.idFrom = GetWindowLongPtrW(hwnd, GWLP_ID);
dtdtc.nmhdr.code = DTN_DATETIMECHANGE; dtdtc.nmhdr.code = DTN_DATETIMECHANGE;
if ((GetWindowLongA (hwnd, GWL_STYLE) & DTS_SHOWNONE)) if ((GetWindowLongA (hwnd, GWL_STYLE) & DTS_SHOWNONE))
@ -1150,7 +1151,7 @@ DATETIME_SendSimpleNotify (HWND hwnd, UINT code)
TRACE("%x\n",code); TRACE("%x\n",code);
nmhdr.hwndFrom = hwnd; nmhdr.hwndFrom = hwnd;
nmhdr.idFrom = GetWindowLongA( hwnd, GWL_ID); nmhdr.idFrom = GetWindowLongPtrW(hwnd, GWLP_ID);
nmhdr.code = code; nmhdr.code = code;
return (BOOL) SendMessageA (infoPtr->hwndNotify, WM_NOTIFY, return (BOOL) SendMessageA (infoPtr->hwndNotify, WM_NOTIFY,
@ -1221,14 +1222,14 @@ DATETIME_Create (HWND hwnd, WPARAM wParam, LPARAM lParam)
return 0; return 0;
} }
SetWindowLongA (hwnd, 0, (DWORD)infoPtr); SetWindowLongPtrA (hwnd, 0, (DWORD_PTR)infoPtr);
if (dwStyle & DTS_SHOWNONE) { if (dwStyle & DTS_SHOWNONE) {
infoPtr->hwndCheckbut=CreateWindowExA (0,"button", 0, infoPtr->hwndCheckbut=CreateWindowExA (0,"button", 0,
WS_CHILD | WS_VISIBLE | BS_AUTOCHECKBOX, WS_CHILD | WS_VISIBLE | BS_AUTOCHECKBOX,
2,2,13,13, 2,2,13,13,
hwnd, hwnd,
0, (HINSTANCE)GetWindowLongA (hwnd, GWL_HINSTANCE), 0); 0, (HINSTANCE)GetWindowLongPtrW (hwnd, GWLP_HINSTANCE), 0);
SendMessageA (infoPtr->hwndCheckbut, BM_SETCHECK, 1, 0); SendMessageA (infoPtr->hwndCheckbut, BM_SETCHECK, 1, 0);
} }
@ -1276,7 +1277,7 @@ DATETIME_Destroy (HWND hwnd, WPARAM wParam, LPARAM lParam)
infoPtr->hMonthCal = NULL; infoPtr->hMonthCal = NULL;
} }
Free (infoPtr); Free (infoPtr);
SetWindowLongA( hwnd, 0, 0 ); /* clear infoPtr */ SetWindowLongPtrA( hwnd, 0, 0 ); /* clear infoPtr */
return 0; return 0;
} }

View file

@ -74,7 +74,7 @@ typedef struct _DRAGLISTDATA
RECT last_drag_icon_rect; RECT last_drag_icon_rect;
} DRAGLISTDATA; } DRAGLISTDATA;
static UINT uDragListMessage = 0; /* registered window message code */ UINT uDragListMessage = 0; /* registered window message code */
static DWORD dwLastScrollTime = 0; static DWORD dwLastScrollTime = 0;
static HICON hDragArrow = NULL; static HICON hDragArrow = NULL;
@ -99,9 +99,10 @@ static inline void DragList_EndDrag(HWND hwnd, DRAGLISTDATA * data)
{ {
KillTimer(hwnd, DRAGLIST_TIMERID); KillTimer(hwnd, DRAGLIST_TIMERID);
ReleaseCapture(); ReleaseCapture();
data->dragging = FALSE;
/* clear any drag insert icon present */ /* clear any drag insert icon present */
InvalidateRect(GetParent(hwnd), &data->last_drag_icon_rect, TRUE); InvalidateRect(GetParent(hwnd), &data->last_drag_icon_rect, TRUE);
/* clear data for next use */
memset(data, 0, sizeof(*data));
} }
/*********************************************************************** /***********************************************************************
@ -118,8 +119,6 @@ DragList_SubclassWindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam,
{ {
case WM_LBUTTONDOWN: case WM_LBUTTONDOWN:
SetFocus(hwnd); SetFocus(hwnd);
data->cursor = NULL;
SetRectEmpty(&data->last_drag_icon_rect);
data->dragging = DragList_Notify(hwnd, DL_BEGINDRAG); data->dragging = DragList_Notify(hwnd, DL_BEGINDRAG);
if (data->dragging) if (data->dragging)
{ {
@ -183,15 +182,6 @@ DragList_SubclassWindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam,
} }
break; break;
case WM_SETCURSOR:
/* if app has told us to set a cursor then do so */
if (data->dragging && data->cursor)
{
SetCursor(data->cursor);
return TRUE;
}
break;
case WM_GETDLGCODE: case WM_GETDLGCODE:
/* tell dialog boxes that we want to receive WM_KEYDOWN events /* tell dialog boxes that we want to receive WM_KEYDOWN events
* for keys like VK_ESCAPE */ * for keys like VK_ESCAPE */

View file

@ -47,7 +47,7 @@ typedef struct
DWORD dwDummy; /* just to keep the compiler happy ;-) */ DWORD dwDummy; /* just to keep the compiler happy ;-) */
} FLATSB_INFO, *LPFLATSB_INFO; } FLATSB_INFO, *LPFLATSB_INFO;
#define FlatSB_GetInfoPtr(hwnd) ((FLATSB_INFO*)GetWindowLongA (hwnd, 0)) #define FlatSB_GetInfoPtr(hwnd) ((FLATSB_INFO*)GetWindowLongPtrW (hwnd, 0))
/*********************************************************************** /***********************************************************************

View file

@ -92,7 +92,7 @@ typedef struct
#define VERT_BORDER 3 #define VERT_BORDER 3
#define DIVIDER_WIDTH 10 #define DIVIDER_WIDTH 10
#define HEADER_GetInfoPtr(hwnd) ((HEADER_INFO *)GetWindowLongA(hwnd,0)) #define HEADER_GetInfoPtr(hwnd) ((HEADER_INFO *)GetWindowLongPtrW(hwnd,0))
inline static LRESULT inline static LRESULT
@ -108,8 +108,8 @@ static INT
HEADER_OrderToIndex(HWND hwnd, WPARAM wParam) HEADER_OrderToIndex(HWND hwnd, WPARAM wParam)
{ {
HEADER_INFO *infoPtr = HEADER_GetInfoPtr (hwnd); HEADER_INFO *infoPtr = HEADER_GetInfoPtr (hwnd);
INT i,iorder = (INT)wParam; INT iorder = (INT)wParam;
UINT i;
if ((iorder <0) || iorder >infoPtr->uNumItem) if ((iorder <0) || iorder >infoPtr->uNumItem)
return iorder; return iorder;
@ -125,7 +125,8 @@ HEADER_SetItemBounds (HWND hwnd)
HEADER_INFO *infoPtr = HEADER_GetInfoPtr (hwnd); HEADER_INFO *infoPtr = HEADER_GetInfoPtr (hwnd);
HEADER_ITEM *phdi; HEADER_ITEM *phdi;
RECT rect; RECT rect;
int i, x; unsigned int i;
int x;
infoPtr->bRectsValid = TRUE; infoPtr->bRectsValid = TRUE;
@ -190,7 +191,7 @@ HEADER_DrawItem (HWND hwnd, HDC hdc, INT iItem, BOOL bHotTrack)
if (phdi->fmt & HDF_OWNERDRAW) { if (phdi->fmt & HDF_OWNERDRAW) {
DRAWITEMSTRUCT dis; DRAWITEMSTRUCT dis;
dis.CtlType = ODT_HEADER; dis.CtlType = ODT_HEADER;
dis.CtlID = GetWindowLongA (hwnd, GWL_ID); dis.CtlID = GetWindowLongPtrW (hwnd, GWLP_ID);
dis.itemID = iItem; dis.itemID = iItem;
dis.itemAction = ODA_DRAWENTIRE; dis.itemAction = ODA_DRAWENTIRE;
dis.itemState = phdi->bDown ? ODS_SELECTED : 0; dis.itemState = phdi->bDown ? ODS_SELECTED : 0;
@ -354,7 +355,8 @@ HEADER_Refresh (HWND hwnd, HDC hdc)
HFONT hFont, hOldFont; HFONT hFont, hOldFont;
RECT rect; RECT rect;
HBRUSH hbrBk; HBRUSH hbrBk;
INT i, x; UINT i;
INT x;
/* get rect for the bar, adjusted for the border */ /* get rect for the bar, adjusted for the border */
GetClientRect (hwnd, &rect); GetClientRect (hwnd, &rect);
@ -401,7 +403,8 @@ HEADER_InternalHitTest (HWND hwnd, LPPOINT lpPt, UINT *pFlags, INT *pItem)
{ {
HEADER_INFO *infoPtr = HEADER_GetInfoPtr (hwnd); HEADER_INFO *infoPtr = HEADER_GetInfoPtr (hwnd);
RECT rect, rcTest; RECT rect, rcTest;
INT iCount, width; UINT iCount;
INT width;
BOOL bNoWidth; BOOL bNoWidth;
GetClientRect (hwnd, &rect); GetClientRect (hwnd, &rect);
@ -542,7 +545,7 @@ HEADER_SendSimpleNotify (HWND hwnd, UINT code)
NMHDR nmhdr; NMHDR nmhdr;
nmhdr.hwndFrom = hwnd; nmhdr.hwndFrom = hwnd;
nmhdr.idFrom = GetWindowLongA (hwnd, GWL_ID); nmhdr.idFrom = GetWindowLongPtrW (hwnd, GWLP_ID);
nmhdr.code = code; nmhdr.code = code;
return (BOOL)SendMessageA (infoPtr->hwndNotify, WM_NOTIFY, return (BOOL)SendMessageA (infoPtr->hwndNotify, WM_NOTIFY,
@ -557,7 +560,7 @@ HEADER_SendHeaderNotify (HWND hwnd, UINT code, INT iItem, INT mask)
HDITEMA nmitem; HDITEMA nmitem;
nmhdr.hdr.hwndFrom = hwnd; nmhdr.hdr.hwndFrom = hwnd;
nmhdr.hdr.idFrom = GetWindowLongA (hwnd, GWL_ID); nmhdr.hdr.idFrom = GetWindowLongPtrW (hwnd, GWLP_ID);
nmhdr.hdr.code = code; nmhdr.hdr.code = code;
nmhdr.iItem = iItem; nmhdr.iItem = iItem;
nmhdr.iButton = 0; nmhdr.iButton = 0;
@ -586,7 +589,7 @@ HEADER_SendClickNotify (HWND hwnd, UINT code, INT iItem)
NMHEADERA nmhdr; NMHEADERA nmhdr;
nmhdr.hdr.hwndFrom = hwnd; nmhdr.hdr.hwndFrom = hwnd;
nmhdr.hdr.idFrom = GetWindowLongA (hwnd, GWL_ID); nmhdr.hdr.idFrom = GetWindowLongPtrW (hwnd, GWLP_ID);
nmhdr.hdr.code = code; nmhdr.hdr.code = code;
nmhdr.iItem = iItem; nmhdr.iItem = iItem;
nmhdr.iButton = 0; nmhdr.iButton = 0;
@ -814,7 +817,7 @@ HEADER_GetOrderArray(HWND hwnd, WPARAM wParam, LPARAM lParam)
LPINT order = (LPINT) lParam; LPINT order = (LPINT) lParam;
HEADER_INFO *infoPtr = HEADER_GetInfoPtr (hwnd); HEADER_INFO *infoPtr = HEADER_GetInfoPtr (hwnd);
if ((int)wParam <infoPtr->uNumItem) if ((unsigned int)wParam <infoPtr->uNumItem)
return FALSE; return FALSE;
for (i=0; i<(int)wParam; i++) for (i=0; i<(int)wParam; i++)
*order++=HEADER_OrderToIndex(hwnd,i); *order++=HEADER_OrderToIndex(hwnd,i);
@ -829,7 +832,7 @@ HEADER_SetOrderArray(HWND hwnd, WPARAM wParam, LPARAM lParam)
HEADER_INFO *infoPtr = HEADER_GetInfoPtr (hwnd); HEADER_INFO *infoPtr = HEADER_GetInfoPtr (hwnd);
HEADER_ITEM *lpItem; HEADER_ITEM *lpItem;
if ((int)wParam <infoPtr->uNumItem) if ((unsigned int)wParam <infoPtr->uNumItem)
return FALSE; return FALSE;
for (i=0; i<(int)wParam; i++) for (i=0; i<(int)wParam; i++)
{ {
@ -856,10 +859,10 @@ HEADER_HitTest (HWND hwnd, WPARAM wParam, LPARAM lParam)
HEADER_InternalHitTest (hwnd, &phti->pt, &phti->flags, &phti->iItem); HEADER_InternalHitTest (hwnd, &phti->pt, &phti->flags, &phti->iItem);
if (phti->flags == HHT_ONHEADER) if (phti->flags == HHT_NOWHERE)
return phti->iItem;
else
return -1; return -1;
else
return phti->iItem;
} }
@ -870,7 +873,8 @@ HEADER_InsertItemA (HWND hwnd, WPARAM wParam, LPARAM lParam)
HDITEMA *phdi = (HDITEMA*)lParam; HDITEMA *phdi = (HDITEMA*)lParam;
INT nItem = (INT)wParam; INT nItem = (INT)wParam;
HEADER_ITEM *lpItem; HEADER_ITEM *lpItem;
INT len, i, iOrder; INT len, iOrder;
UINT i;
if ((phdi == NULL) || (nItem < 0)) if ((phdi == NULL) || (nItem < 0))
return -1; return -1;
@ -971,7 +975,8 @@ HEADER_InsertItemW (HWND hwnd, WPARAM wParam, LPARAM lParam)
HDITEMW *phdi = (HDITEMW*)lParam; HDITEMW *phdi = (HDITEMW*)lParam;
INT nItem = (INT)wParam; INT nItem = (INT)wParam;
HEADER_ITEM *lpItem; HEADER_ITEM *lpItem;
INT len, i, iOrder; INT len, iOrder;
UINT i;
if ((phdi == NULL) || (nItem < 0)) if ((phdi == NULL) || (nItem < 0))
return -1; return -1;
@ -1284,7 +1289,7 @@ HEADER_Create (HWND hwnd, WPARAM wParam, LPARAM lParam)
HDC hdc; HDC hdc;
infoPtr = (HEADER_INFO *)Alloc (sizeof(HEADER_INFO)); infoPtr = (HEADER_INFO *)Alloc (sizeof(HEADER_INFO));
SetWindowLongA (hwnd, 0, (DWORD)infoPtr); SetWindowLongPtrA (hwnd, 0, (DWORD_PTR)infoPtr);
infoPtr->hwndNotify = ((LPCREATESTRUCTA)lParam)->hwndParent; infoPtr->hwndNotify = ((LPCREATESTRUCTA)lParam)->hwndParent;
infoPtr->uNumItem = 0; infoPtr->uNumItem = 0;
@ -1335,7 +1340,7 @@ HEADER_Destroy (HWND hwnd, WPARAM wParam, LPARAM lParam)
ImageList_Destroy (infoPtr->himl); ImageList_Destroy (infoPtr->himl);
Free (infoPtr); Free (infoPtr);
SetWindowLongA (hwnd, 0, 0); SetWindowLongPtrA (hwnd, 0, 0);
return 0; return 0;
} }
@ -1496,9 +1501,9 @@ HEADER_LButtonUp (HWND hwnd, WPARAM wParam, LPARAM lParam)
infoPtr->items[infoPtr->iMoveItem].cxy = nWidth; infoPtr->items[infoPtr->iMoveItem].cxy = nWidth;
} }
HEADER_SendHeaderNotify(hwnd, HDN_ITEMCHANGINGA, infoPtr->iMoveItem, HDI_WIDTH);
HEADER_SetItemBounds (hwnd); HEADER_SetItemBounds (hwnd);
InvalidateRect(hwnd, NULL, FALSE); InvalidateRect(hwnd, NULL, TRUE);
HEADER_SendHeaderNotify(hwnd, HDN_ITEMCHANGEDA, infoPtr->iMoveItem, HDI_WIDTH);
/* /*
* } * }
*/ */
@ -1571,7 +1576,7 @@ HEADER_MouseMove (HWND hwnd, WPARAM wParam, LPARAM lParam)
} }
else if (infoPtr->bTracking) { else if (infoPtr->bTracking) {
if (dwStyle & HDS_FULLDRAG) { if (dwStyle & HDS_FULLDRAG) {
if (HEADER_SendHeaderNotify (hwnd, HDN_ITEMCHANGINGA, infoPtr->iMoveItem, HDI_WIDTH)) if (HEADER_SendHeaderNotify (hwnd, HDN_TRACKA, infoPtr->iMoveItem, HDI_WIDTH))
{ {
nWidth = pt.x - infoPtr->items[infoPtr->iMoveItem].rect.left + infoPtr->xTrackOffset; nWidth = pt.x - infoPtr->items[infoPtr->iMoveItem].rect.left + infoPtr->xTrackOffset;
if (nWidth < 0) if (nWidth < 0)
@ -1580,7 +1585,6 @@ HEADER_MouseMove (HWND hwnd, WPARAM wParam, LPARAM lParam)
HEADER_SendHeaderNotify(hwnd, HDN_ITEMCHANGEDA, infoPtr->iMoveItem, HDI_WIDTH); HEADER_SendHeaderNotify(hwnd, HDN_ITEMCHANGEDA, infoPtr->iMoveItem, HDI_WIDTH);
} }
HEADER_SetItemBounds (hwnd); HEADER_SetItemBounds (hwnd);
InvalidateRect(hwnd, NULL, FALSE);
} }
else { else {
hdc = GetDC (hwnd); hdc = GetDC (hwnd);

View file

@ -51,7 +51,7 @@ typedef struct tagHOTKEY_INFO
WCHAR strNone[15]; /* hope its long enough ... */ WCHAR strNone[15]; /* hope its long enough ... */
} HOTKEY_INFO; } HOTKEY_INFO;
#define HOTKEY_GetInfoPtr(hwnd) ((HOTKEY_INFO *)GetWindowLongA (hwnd, 0)) #define HOTKEY_GetInfoPtr(hwnd) ((HOTKEY_INFO *)GetWindowLongPtrA (hwnd, 0))
static const WCHAR HOTKEY_plussep[] = { ' ', '+', ' ' }; static const WCHAR HOTKEY_plussep[] = { ' ', '+', ' ' };
@ -217,7 +217,7 @@ HOTKEY_Create (HWND hwnd, WPARAM wParam, LPARAM lParam)
/* allocate memory for info structure */ /* allocate memory for info structure */
infoPtr = (HOTKEY_INFO *)Alloc (sizeof(HOTKEY_INFO)); infoPtr = (HOTKEY_INFO *)Alloc (sizeof(HOTKEY_INFO));
SetWindowLongW (hwnd, 0, (DWORD)infoPtr); SetWindowLongPtrW (hwnd, 0, (DWORD_PTR)infoPtr);
/* initialize info structure */ /* initialize info structure */
infoPtr->HotKey = infoPtr->InvComb = infoPtr->InvMod = infoPtr->CurrMod = 0; infoPtr->HotKey = infoPtr->InvComb = infoPtr->InvMod = infoPtr->CurrMod = 0;
@ -242,7 +242,7 @@ HOTKEY_Destroy (HOTKEY_INFO *infoPtr, WPARAM wParam, LPARAM lParam)
HWND hwnd = infoPtr->hwndSelf; HWND hwnd = infoPtr->hwndSelf;
/* free hotkey info data */ /* free hotkey info data */
Free (infoPtr); Free (infoPtr);
SetWindowLongW (hwnd, 0, 0); SetWindowLongPtrW (hwnd, 0, 0);
return 0; return 0;
} }

View file

@ -3,7 +3,7 @@
* *
* Copyright 1998 Eric Kohl * Copyright 1998 Eric Kohl
* Copyright 2000 Jason Mawdsley * Copyright 2000 Jason Mawdsley
* Copyright 2001 Michael Stefaniuc * Copyright 2001, 2004 Michael Stefaniuc
* Copyright 2001 Charles Loep for CodeWeavers * Copyright 2001 Charles Loep for CodeWeavers
* Copyright 2002 Dimitrie O. Paun * Copyright 2002 Dimitrie O. Paun
* *
@ -34,12 +34,6 @@
* - Add support for ILD_PRESERVEALPHA, ILD_SCALE, ILD_DPISCALE * - Add support for ILD_PRESERVEALPHA, ILD_SCALE, ILD_DPISCALE
* - Add support for ILS_GLOW, ILS_SHADOW, ILS_SATURATE, ILS_ALPHA * - Add support for ILS_GLOW, ILS_SHADOW, ILS_SATURATE, ILS_ALPHA
* - Thread-safe locking * - Thread-safe locking
*
* FIXME:
* - Hotspot handling still not correct. The Hotspot passed to BeginDrag
* is the offset of the image position relative to the actual mouse pointer
* position. However the Hotspot passed to SetDragCursorImage is the
* offset of the mouse messages sent to the application...
*/ */
#include <stdarg.h> #include <stdarg.h>
@ -76,10 +70,9 @@ typedef struct
BOOL bShow; BOOL bShow;
/* saved background */ /* saved background */
HBITMAP hbmBg; HBITMAP hbmBg;
BOOL bHSPending;
} INTERNALDRAG; } INTERNALDRAG;
static INTERNALDRAG InternalDrag = { 0, 0, 0, 0, 0, 0, FALSE, 0, FALSE }; static INTERNALDRAG InternalDrag = { 0, 0, 0, 0, 0, 0, FALSE, 0 };
static HBITMAP ImageList_CreateImage(HDC hdc, HIMAGELIST himl, UINT width, UINT height); static HBITMAP ImageList_CreateImage(HDC hdc, HIMAGELIST himl, UINT width, UINT height);
@ -424,7 +417,6 @@ ImageList_BeginDrag (HIMAGELIST himlTrack, INT iTrack,
BitBlt (InternalDrag.himl->hdcMask, 0, 0, cx, cy, himlTrack->hdcMask, iTrack * cx, 0, SRCCOPY); BitBlt (InternalDrag.himl->hdcMask, 0, 0, cx, cy, himlTrack->hdcMask, iTrack * cx, 0, SRCCOPY);
InternalDrag.himl->cCurImage = 1; InternalDrag.himl->cCurImage = 1;
InternalDrag.bHSPending = TRUE;
return TRUE; return TRUE;
} }
@ -1279,7 +1271,6 @@ ImageList_EndDrag (void)
InternalDrag.bShow = FALSE; InternalDrag.bShow = FALSE;
DeleteObject(InternalDrag.hbmBg); DeleteObject(InternalDrag.hbmBg);
InternalDrag.hbmBg = 0; InternalDrag.hbmBg = 0;
InternalDrag.bHSPending = FALSE;
} }
@ -2362,7 +2353,11 @@ ImageList_SetBkColor (HIMAGELIST himl, COLORREF clrBk)
* Failure: FALSE * Failure: FALSE
* *
* NOTES * NOTES
* When this function is called and the drag image is visible, a * - The names dxHotspot, dyHotspot are misleading because they have nothing
* to do with a hotspot but are only the offset of the origin of the new
* image relative to the origin of the old image.
*
* - When this function is called and the drag image is visible, a
* short flickering occurs but this matches the Win9x behavior. It is * short flickering occurs but this matches the Win9x behavior. It is
* possible to fix the flickering using code like in ImageList_DragMove. * possible to fix the flickering using code like in ImageList_DragMove.
*/ */
@ -2372,7 +2367,6 @@ ImageList_SetDragCursorImage (HIMAGELIST himlDrag, INT iDrag,
INT dxHotspot, INT dyHotspot) INT dxHotspot, INT dyHotspot)
{ {
HIMAGELIST himlTemp; HIMAGELIST himlTemp;
INT dx, dy;
BOOL visible; BOOL visible;
if (!is_valid(InternalDrag.himl) || !is_valid(himlDrag)) if (!is_valid(InternalDrag.himl) || !is_valid(himlDrag))
@ -2383,20 +2377,8 @@ ImageList_SetDragCursorImage (HIMAGELIST himlDrag, INT iDrag,
visible = InternalDrag.bShow; visible = InternalDrag.bShow;
/* Calculate the offset between the origin of the old image and the himlTemp = ImageList_Merge (InternalDrag.himl, 0, himlDrag, iDrag,
* origin of the second image. dxHotspot, dyHotspot);
* dxHotspot, dyHotspot is the offset of THE Hotspot (there is only one
* hotspot) to the origin of the second image.
* See M$DN for details */
if(InternalDrag.bHSPending) {
dx = 0;
dy = 0;
InternalDrag.bHSPending = FALSE;
} else {
dx = InternalDrag.dxHotspot - dxHotspot;
dy = InternalDrag.dyHotspot - dyHotspot;
}
himlTemp = ImageList_Merge (InternalDrag.himl, 0, himlDrag, iDrag, dx, dy);
if (visible) { if (visible) {
/* hide the drag image */ /* hide the drag image */
@ -2412,13 +2394,6 @@ ImageList_SetDragCursorImage (HIMAGELIST himlDrag, INT iDrag,
ImageList_Destroy (InternalDrag.himl); ImageList_Destroy (InternalDrag.himl);
InternalDrag.himl = himlTemp; InternalDrag.himl = himlTemp;
/* update the InternalDragOffset, if the origin of the
* DragImage was changed by ImageList_Merge. */
if (dx <= 0)
InternalDrag.dxHotspot = dxHotspot;
if (dy <= 0)
InternalDrag.dyHotspot = dyHotspot;
if (visible) { if (visible) {
/* show the drag image */ /* show the drag image */
ImageList_DragShowNolock(TRUE); ImageList_DragShowNolock(TRUE);

View file

@ -71,7 +71,7 @@ typedef struct
#define POS_SELALL 3 #define POS_SELALL 3
#define IP_SUBCLASS_PROP "CCIP32SubclassInfo" #define IP_SUBCLASS_PROP "CCIP32SubclassInfo"
#define IPADDRESS_GetInfoPtr(hwnd) ((IPADDRESS_INFO *)GetWindowLongW (hwnd, 0)) #define IPADDRESS_GetInfoPtr(hwnd) ((IPADDRESS_INFO *)GetWindowLongPtrW (hwnd, 0))
static LRESULT CALLBACK static LRESULT CALLBACK
@ -84,7 +84,7 @@ static LRESULT IPADDRESS_Notify (IPADDRESS_INFO *infoPtr, UINT command)
TRACE("(command=%x)\n", command); TRACE("(command=%x)\n", command);
return SendMessageW (infoPtr->Notify, WM_COMMAND, return SendMessageW (infoPtr->Notify, WM_COMMAND,
MAKEWPARAM (GetWindowLongW (hwnd, GWL_ID), command), (LPARAM)hwnd); MAKEWPARAM (GetWindowLongPtrW (hwnd, GWLP_ID), command), (LPARAM)hwnd);
} }
static INT IPADDRESS_IPNotify (IPADDRESS_INFO *infoPtr, INT field, INT value) static INT IPADDRESS_IPNotify (IPADDRESS_INFO *infoPtr, INT field, INT value)
@ -94,7 +94,7 @@ static INT IPADDRESS_IPNotify (IPADDRESS_INFO *infoPtr, INT field, INT value)
TRACE("(field=%x, value=%d)\n", field, value); TRACE("(field=%x, value=%d)\n", field, value);
nmip.hdr.hwndFrom = infoPtr->Self; nmip.hdr.hwndFrom = infoPtr->Self;
nmip.hdr.idFrom = GetWindowLongW (infoPtr->Self, GWL_ID); nmip.hdr.idFrom = GetWindowLongPtrW (infoPtr->Self, GWLP_ID);
nmip.hdr.code = IPN_FIELDCHANGED; nmip.hdr.code = IPN_FIELDCHANGED;
nmip.iField = field; nmip.iField = field;
@ -164,7 +164,7 @@ static LRESULT IPADDRESS_Create (HWND hwnd, LPCREATESTRUCTA lpCreate)
infoPtr = (IPADDRESS_INFO *)Alloc (sizeof(IPADDRESS_INFO)); infoPtr = (IPADDRESS_INFO *)Alloc (sizeof(IPADDRESS_INFO));
if (!infoPtr) return -1; if (!infoPtr) return -1;
SetWindowLongW (hwnd, 0, (DWORD)infoPtr); SetWindowLongPtrW (hwnd, 0, (DWORD_PTR)infoPtr);
GetClientRect (hwnd, &rcClient); GetClientRect (hwnd, &rcClient);
@ -187,11 +187,11 @@ static LRESULT IPADDRESS_Create (HWND hwnd, LPCREATESTRUCTA lpCreate)
CreateWindowW (EDIT, NULL, WS_CHILD | WS_VISIBLE | ES_CENTER, CreateWindowW (EDIT, NULL, WS_CHILD | WS_VISIBLE | ES_CENTER,
edit.left, edit.top, edit.right - edit.left, edit.left, edit.top, edit.right - edit.left,
edit.bottom - edit.top, hwnd, (HMENU) 1, edit.bottom - edit.top, hwnd, (HMENU) 1,
(HINSTANCE)GetWindowLongW(hwnd, GWL_HINSTANCE), NULL); (HINSTANCE)GetWindowLongPtrW(hwnd, GWLP_HINSTANCE), NULL);
SetPropA(part->EditHwnd, IP_SUBCLASS_PROP, hwnd); SetPropA(part->EditHwnd, IP_SUBCLASS_PROP, hwnd);
part->OrigProc = (WNDPROC) part->OrigProc = (WNDPROC)
SetWindowLongW (part->EditHwnd, GWL_WNDPROC, SetWindowLongPtrW (part->EditHwnd, GWLP_WNDPROC,
(LONG)IPADDRESS_SubclassProc); (DWORD_PTR)IPADDRESS_SubclassProc);
} }
return 0; return 0;
@ -206,10 +206,10 @@ static LRESULT IPADDRESS_Destroy (IPADDRESS_INFO *infoPtr)
for (i = 0; i < 4; i++) { for (i = 0; i < 4; i++) {
IPPART_INFO* part = &infoPtr->Part[i]; IPPART_INFO* part = &infoPtr->Part[i];
SetWindowLongW (part->EditHwnd, GWL_WNDPROC, (LONG)part->OrigProc); SetWindowLongPtrW (part->EditHwnd, GWLP_WNDPROC, (DWORD_PTR)part->OrigProc);
} }
SetWindowLongW (infoPtr->Self, 0, 0); SetWindowLongPtrW (infoPtr->Self, 0, 0);
Free (infoPtr); Free (infoPtr);
return 0; return 0;
} }
@ -565,12 +565,12 @@ void IPADDRESS_Register (void)
WNDCLASSW wndClass; WNDCLASSW wndClass;
ZeroMemory (&wndClass, sizeof(WNDCLASSW)); ZeroMemory (&wndClass, sizeof(WNDCLASSW));
wndClass.style = CS_GLOBALCLASS; wndClass.style = CS_GLOBALCLASS | CS_DBLCLKS | CS_HREDRAW | CS_VREDRAW;
wndClass.lpfnWndProc = (WNDPROC)IPADDRESS_WindowProc; wndClass.lpfnWndProc = IPADDRESS_WindowProc;
wndClass.cbClsExtra = 0; wndClass.cbClsExtra = 0;
wndClass.cbWndExtra = sizeof(IPADDRESS_INFO *); wndClass.cbWndExtra = sizeof(IPADDRESS_INFO *);
wndClass.hCursor = LoadCursorW (0, (LPWSTR)IDC_IBEAM); wndClass.hCursor = LoadCursorW (0, (LPWSTR)IDC_IBEAM);
wndClass.hbrBackground = GetStockObject(WHITE_BRUSH); wndClass.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
wndClass.lpszClassName = WC_IPADDRESSW; wndClass.lpszClassName = WC_IPADDRESSW;
RegisterClassW (&wndClass); RegisterClassW (&wndClass);

View file

@ -41,7 +41,7 @@
* Bugs * Bugs
* -- Expand large item in ICON mode when the cursor is flying over the icon or text. * -- Expand large item in ICON mode when the cursor is flying over the icon or text.
* -- Support CustonDraw options for _WIN32_IE >= 0x560 (see NMLVCUSTOMDRAW docs. * -- Support CustonDraw options for _WIN32_IE >= 0x560 (see NMLVCUSTOMDRAW docs.
* -- in LISTVIEW_AddGroupSelection, se whould send LVN_ODSTATECHANGED * -- in LISTVIEW_AddGroupSelection, we would send LVN_ODSTATECHANGED
* -- LVA_SNAPTOGRID not implemented * -- LVA_SNAPTOGRID not implemented
* -- LISTVIEW_ApproximateViewRect partially implemented * -- LISTVIEW_ApproximateViewRect partially implemented
* -- LISTVIEW_[GS]etColumnOrderArray stubs * -- LISTVIEW_[GS]etColumnOrderArray stubs
@ -717,7 +717,7 @@ static LRESULT notify_hdr(LISTVIEW_INFO *infoPtr, INT code, LPNMHDR pnmh)
TRACE("(code=%d)\n", code); TRACE("(code=%d)\n", code);
pnmh->hwndFrom = infoPtr->hwndSelf; pnmh->hwndFrom = infoPtr->hwndSelf;
pnmh->idFrom = GetWindowLongW(infoPtr->hwndSelf, GWL_ID); pnmh->idFrom = GetWindowLongPtrW(infoPtr->hwndSelf, GWLP_ID);
pnmh->code = code; pnmh->code = code;
result = SendMessageW(infoPtr->hwndNotify, WM_NOTIFY, result = SendMessageW(infoPtr->hwndNotify, WM_NOTIFY,
(WPARAM)pnmh->idFrom, (LPARAM)pnmh); (WPARAM)pnmh->idFrom, (LPARAM)pnmh);
@ -1732,7 +1732,7 @@ static void LISTVIEW_ShowFocusRect(LISTVIEW_INFO *infoPtr, BOOL fShow)
ZeroMemory(&dis, sizeof(dis)); ZeroMemory(&dis, sizeof(dis));
dis.CtlType = ODT_LISTVIEW; dis.CtlType = ODT_LISTVIEW;
dis.CtlID = GetWindowLongW(infoPtr->hwndSelf, GWL_ID); dis.CtlID = (UINT)GetWindowLongPtrW(infoPtr->hwndSelf, GWLP_ID);
dis.itemID = item.iItem; dis.itemID = item.iItem;
dis.itemAction = ODA_FOCUS; dis.itemAction = ODA_FOCUS;
if (fShow) dis.itemState |= ODS_FOCUS; if (fShow) dis.itemState |= ODS_FOCUS;
@ -3691,7 +3691,7 @@ postpaint:
*/ */
static void LISTVIEW_RefreshOwnerDraw(LISTVIEW_INFO *infoPtr, ITERATOR *i, HDC hdc, DWORD cdmode) static void LISTVIEW_RefreshOwnerDraw(LISTVIEW_INFO *infoPtr, ITERATOR *i, HDC hdc, DWORD cdmode)
{ {
UINT uID = GetWindowLongW(infoPtr->hwndSelf, GWL_ID); UINT uID = (UINT)GetWindowLongPtrW(infoPtr->hwndSelf, GWLP_ID);
DWORD cditemmode = CDRF_DODEFAULT; DWORD cditemmode = CDRF_DODEFAULT;
NMLVCUSTOMDRAW nmlvcd; NMLVCUSTOMDRAW nmlvcd;
POINT Origin, Position; POINT Origin, Position;
@ -7380,7 +7380,7 @@ static LRESULT LISTVIEW_Create(HWND hwnd, const CREATESTRUCTW *lpcs)
infoPtr = (LISTVIEW_INFO *)Alloc(sizeof(LISTVIEW_INFO)); infoPtr = (LISTVIEW_INFO *)Alloc(sizeof(LISTVIEW_INFO));
if (!infoPtr) return -1; if (!infoPtr) return -1;
SetWindowLongW(hwnd, 0, (LONG)infoPtr); SetWindowLongPtrW(hwnd, 0, (DWORD_PTR)infoPtr);
infoPtr->hwndSelf = hwnd; infoPtr->hwndSelf = hwnd;
infoPtr->dwStyle = lpcs->style; infoPtr->dwStyle = lpcs->style;
@ -7725,7 +7725,7 @@ static LRESULT LISTVIEW_MouseWheel(LISTVIEW_INFO *infoPtr, INT wheelDelta)
{ {
UINT uView = infoPtr->dwStyle & LVS_TYPEMASK; UINT uView = infoPtr->dwStyle & LVS_TYPEMASK;
INT gcWheelDelta = 0; INT gcWheelDelta = 0;
UINT pulScrollLines = 3; INT pulScrollLines = 3;
SCROLLINFO scrollInfo; SCROLLINFO scrollInfo;
TRACE("(wheelDelta=%d)\n", wheelDelta); TRACE("(wheelDelta=%d)\n", wheelDelta);
@ -8182,7 +8182,7 @@ static LRESULT LISTVIEW_NCDestroy(LISTVIEW_INFO *infoPtr)
if (infoPtr->hDefaultFont) DeleteObject(infoPtr->hDefaultFont); if (infoPtr->hDefaultFont) DeleteObject(infoPtr->hDefaultFont);
if (infoPtr->clrBk != CLR_NONE) DeleteObject(infoPtr->hBkBrush); if (infoPtr->clrBk != CLR_NONE) DeleteObject(infoPtr->hBkBrush);
SetWindowLongW(infoPtr->hwndSelf, 0, 0); SetWindowLongPtrW(infoPtr->hwndSelf, 0, 0);
/* free listview info pointer*/ /* free listview info pointer*/
Free(infoPtr); Free(infoPtr);
@ -8774,7 +8774,7 @@ static INT LISTVIEW_StyleChanged(LISTVIEW_INFO *infoPtr, WPARAM wStyleType,
static LRESULT WINAPI static LRESULT WINAPI
LISTVIEW_WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) LISTVIEW_WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{ {
LISTVIEW_INFO *infoPtr = (LISTVIEW_INFO *)GetWindowLongW(hwnd, 0); LISTVIEW_INFO *infoPtr = (LISTVIEW_INFO *)GetWindowLongPtrW(hwnd, 0);
TRACE("(uMsg=%x wParam=%x lParam=%lx)\n", uMsg, wParam, lParam); TRACE("(uMsg=%x wParam=%x lParam=%lx)\n", uMsg, wParam, lParam);
@ -9382,7 +9382,7 @@ static LRESULT LISTVIEW_Command(LISTVIEW_INFO *infoPtr, WPARAM wParam, LPARAM lP
*/ */
static LRESULT EditLblWndProcT(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL isW) static LRESULT EditLblWndProcT(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL isW)
{ {
LISTVIEW_INFO *infoPtr = (LISTVIEW_INFO *)GetWindowLongW(GetParent(hwnd), 0); LISTVIEW_INFO *infoPtr = (LISTVIEW_INFO *)GetWindowLongPtrW(GetParent(hwnd), 0);
BOOL cancel = FALSE; BOOL cancel = FALSE;
TRACE("(hwnd=%p, uMsg=%x, wParam=%x, lParam=%lx, isW=%d)\n", TRACE("(hwnd=%p, uMsg=%x, wParam=%x, lParam=%lx, isW=%d)\n",
@ -9400,7 +9400,7 @@ static LRESULT EditLblWndProcT(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lPara
{ {
WNDPROC editProc = infoPtr->EditWndProc; WNDPROC editProc = infoPtr->EditWndProc;
infoPtr->EditWndProc = 0; infoPtr->EditWndProc = 0;
SetWindowLongW(hwnd, GWL_WNDPROC, (LONG)editProc); SetWindowLongPtrW(hwnd, GWLP_WNDPROC, (DWORD_PTR)editProc);
return CallWindowProcT(editProc, hwnd, uMsg, wParam, lParam, isW); return CallWindowProcT(editProc, hwnd, uMsg, wParam, lParam, isW);
} }
@ -9501,7 +9501,7 @@ static HWND CreateEditLabelT(LISTVIEW_INFO *infoPtr, LPCWSTR text, DWORD style,
HDC hdc; HDC hdc;
HDC hOldFont=0; HDC hOldFont=0;
TEXTMETRICW textMetric; TEXTMETRICW textMetric;
HINSTANCE hinst = (HINSTANCE)GetWindowLongW(infoPtr->hwndSelf, GWL_HINSTANCE); HINSTANCE hinst = (HINSTANCE)GetWindowLongPtrW(infoPtr->hwndSelf, GWLP_HINSTANCE);
TRACE("(text=%s, ..., isW=%d)\n", debugtext_t(text, isW), isW); TRACE("(text=%s, ..., isW=%d)\n", debugtext_t(text, isW), isW);
@ -9532,8 +9532,8 @@ static HWND CreateEditLabelT(LISTVIEW_INFO *infoPtr, LPCWSTR text, DWORD style,
if (!hedit) return 0; if (!hedit) return 0;
infoPtr->EditWndProc = (WNDPROC) infoPtr->EditWndProc = (WNDPROC)
(isW ? SetWindowLongW(hedit, GWL_WNDPROC, (LONG)EditLblWndProcW) : (isW ? SetWindowLongPtrW(hedit, GWLP_WNDPROC, (DWORD_PTR)EditLblWndProcW) :
SetWindowLongA(hedit, GWL_WNDPROC, (LONG)EditLblWndProcA) ); SetWindowLongPtrA(hedit, GWLP_WNDPROC, (DWORD_PTR)EditLblWndProcA) );
SendMessageW(hedit, WM_SETFONT, (WPARAM)infoPtr->hFont, FALSE); SendMessageW(hedit, WM_SETFONT, (WPARAM)infoPtr->hFont, FALSE);

View file

@ -114,7 +114,7 @@ typedef struct
static const int DayOfWeekTable[] = {0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4}; static const int DayOfWeekTable[] = {0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4};
#define MONTHCAL_GetInfoPtr(hwnd) ((MONTHCAL_INFO *)GetWindowLongA(hwnd, 0)) #define MONTHCAL_GetInfoPtr(hwnd) ((MONTHCAL_INFO *)GetWindowLongPtrW(hwnd, 0))
/* helper functions */ /* helper functions */
@ -1302,7 +1302,7 @@ static void MONTHCAL_GoToNextMonth(HWND hwnd, MONTHCAL_INFO *infoPtr)
int i; int i;
nmds.nmhdr.hwndFrom = hwnd; nmds.nmhdr.hwndFrom = hwnd;
nmds.nmhdr.idFrom = GetWindowLongA(hwnd, GWL_ID); nmds.nmhdr.idFrom = GetWindowLongPtrW(hwnd, GWLP_ID);
nmds.nmhdr.code = MCN_GETDAYSTATE; nmds.nmhdr.code = MCN_GETDAYSTATE;
nmds.cDayState = infoPtr->monthRange; nmds.cDayState = infoPtr->monthRange;
nmds.prgDayState = Alloc(infoPtr->monthRange * sizeof(MONTHDAYSTATE)); nmds.prgDayState = Alloc(infoPtr->monthRange * sizeof(MONTHDAYSTATE));
@ -1332,7 +1332,7 @@ static void MONTHCAL_GoToPrevMonth(HWND hwnd, MONTHCAL_INFO *infoPtr)
int i; int i;
nmds.nmhdr.hwndFrom = hwnd; nmds.nmhdr.hwndFrom = hwnd;
nmds.nmhdr.idFrom = GetWindowLongA(hwnd, GWL_ID); nmds.nmhdr.idFrom = GetWindowLongPtrW(hwnd, GWLP_ID);
nmds.nmhdr.code = MCN_GETDAYSTATE; nmds.nmhdr.code = MCN_GETDAYSTATE;
nmds.cDayState = infoPtr->monthRange; nmds.cDayState = infoPtr->monthRange;
nmds.prgDayState = Alloc nmds.prgDayState = Alloc
@ -1491,7 +1491,7 @@ MONTHCAL_LButtonDown(HWND hwnd, WPARAM wParam, LPARAM lParam)
MONTHCAL_SetCurSel(hwnd,0,(LPARAM) &selArray); MONTHCAL_SetCurSel(hwnd,0,(LPARAM) &selArray);
TRACE("MCHT_CALENDARDATE\n"); TRACE("MCHT_CALENDARDATE\n");
nmsc.nmhdr.hwndFrom = hwnd; nmsc.nmhdr.hwndFrom = hwnd;
nmsc.nmhdr.idFrom = GetWindowLongA(hwnd, GWL_ID); nmsc.nmhdr.idFrom = GetWindowLongPtrW(hwnd, GWLP_ID);
nmsc.nmhdr.code = MCN_SELCHANGE; nmsc.nmhdr.code = MCN_SELCHANGE;
MONTHCAL_CopyTime(&infoPtr->minSel,&nmsc.stSelStart); MONTHCAL_CopyTime(&infoPtr->minSel,&nmsc.stSelStart);
MONTHCAL_CopyTime(&infoPtr->maxSel,&nmsc.stSelEnd); MONTHCAL_CopyTime(&infoPtr->maxSel,&nmsc.stSelEnd);
@ -1559,7 +1559,7 @@ MONTHCAL_LButtonUp(HWND hwnd, WPARAM wParam, LPARAM lParam)
return TRUE; return TRUE;
} }
nmhdr.hwndFrom = hwnd; nmhdr.hwndFrom = hwnd;
nmhdr.idFrom = GetWindowLongA( hwnd, GWL_ID); nmhdr.idFrom = GetWindowLongPtrW( hwnd, GWLP_ID);
nmhdr.code = NM_RELEASEDCAPTURE; nmhdr.code = NM_RELEASEDCAPTURE;
TRACE("Sent notification from %p to %p\n", hwnd, infoPtr->hwndNotify); TRACE("Sent notification from %p to %p\n", hwnd, infoPtr->hwndNotify);
@ -1571,7 +1571,7 @@ MONTHCAL_LButtonUp(HWND hwnd, WPARAM wParam, LPARAM lParam)
/* only send MCN_SELECT if currently displayed month's day was selected */ /* only send MCN_SELECT if currently displayed month's day was selected */
if(hit == MCHT_CALENDARDATE) { if(hit == MCHT_CALENDARDATE) {
nmsc.nmhdr.hwndFrom = hwnd; nmsc.nmhdr.hwndFrom = hwnd;
nmsc.nmhdr.idFrom = GetWindowLongA(hwnd, GWL_ID); nmsc.nmhdr.idFrom = GetWindowLongPtrW(hwnd, GWLP_ID);
nmsc.nmhdr.code = MCN_SELECT; nmsc.nmhdr.code = MCN_SELECT;
MONTHCAL_CopyTime(&infoPtr->minSel, &nmsc.stSelStart); MONTHCAL_CopyTime(&infoPtr->minSel, &nmsc.stSelStart);
MONTHCAL_CopyTime(&infoPtr->maxSel, &nmsc.stSelEnd); MONTHCAL_CopyTime(&infoPtr->maxSel, &nmsc.stSelEnd);
@ -1877,13 +1877,13 @@ MONTHCAL_Create(HWND hwnd, WPARAM wParam, LPARAM lParam)
/* allocate memory for info structure */ /* allocate memory for info structure */
infoPtr =(MONTHCAL_INFO*)Alloc(sizeof(MONTHCAL_INFO)); infoPtr =(MONTHCAL_INFO*)Alloc(sizeof(MONTHCAL_INFO));
SetWindowLongA(hwnd, 0, (DWORD)infoPtr); SetWindowLongPtrW(hwnd, 0, (DWORD_PTR)infoPtr);
if(infoPtr == NULL) { if(infoPtr == NULL) {
ERR( "could not allocate info memory!\n"); ERR( "could not allocate info memory!\n");
return 0; return 0;
} }
if((MONTHCAL_INFO*)GetWindowLongA(hwnd, 0) != infoPtr) { if((MONTHCAL_INFO*)GetWindowLongPtrW(hwnd, 0) != infoPtr) {
ERR( "pointer assignment error!\n"); ERR( "pointer assignment error!\n");
return 0; return 0;
} }
@ -1934,7 +1934,7 @@ MONTHCAL_Destroy(HWND hwnd, WPARAM wParam, LPARAM lParam)
if(infoPtr->monthdayState) if(infoPtr->monthdayState)
Free(infoPtr->monthdayState); Free(infoPtr->monthdayState);
Free(infoPtr); Free(infoPtr);
SetWindowLongA(hwnd, 0, 0); SetWindowLongPtrW(hwnd, 0, 0);
return 0; return 0;
} }

View file

@ -45,7 +45,7 @@ typedef struct
DWORD dwDummy; /* just to keep the compiler happy ;-) */ DWORD dwDummy; /* just to keep the compiler happy ;-) */
} NATIVEFONT_INFO; } NATIVEFONT_INFO;
#define NATIVEFONT_GetInfoPtr(hwnd) ((NATIVEFONT_INFO *)GetWindowLongA (hwnd, 0)) #define NATIVEFONT_GetInfoPtr(hwnd) ((NATIVEFONT_INFO *)GetWindowLongPtrW (hwnd, 0))
static LRESULT static LRESULT
@ -55,7 +55,7 @@ NATIVEFONT_Create (HWND hwnd, WPARAM wParam, LPARAM lParam)
/* allocate memory for info structure */ /* allocate memory for info structure */
infoPtr = (NATIVEFONT_INFO *)Alloc (sizeof(NATIVEFONT_INFO)); infoPtr = (NATIVEFONT_INFO *)Alloc (sizeof(NATIVEFONT_INFO));
SetWindowLongA (hwnd, 0, (DWORD)infoPtr); SetWindowLongPtrW (hwnd, 0, (DWORD_PTR)infoPtr);
/* initialize info structure */ /* initialize info structure */
@ -75,7 +75,7 @@ NATIVEFONT_Destroy (HWND hwnd, WPARAM wParam, LPARAM lParam)
/* free comboex info data */ /* free comboex info data */
Free (infoPtr); Free (infoPtr);
SetWindowLongA( hwnd, 0, 0 ); SetWindowLongPtrW( hwnd, 0, 0 );
return 0; return 0;
} }

View file

@ -59,7 +59,7 @@ typedef struct
INT direction; /* direction of the scroll, (e.g. PGF_SCROLLUP) */ INT direction; /* direction of the scroll, (e.g. PGF_SCROLLUP) */
} PAGER_INFO; } PAGER_INFO;
#define PAGER_GetInfoPtr(hwnd) ((PAGER_INFO *)GetWindowLongA(hwnd, 0)) #define PAGER_GetInfoPtr(hwnd) ((PAGER_INFO *)GetWindowLongPtrW(hwnd, 0))
#define PAGER_IsHorizontal(hwnd) ((GetWindowLongA (hwnd, GWL_STYLE) & PGS_HORZ)) #define PAGER_IsHorizontal(hwnd) ((GetWindowLongA (hwnd, GWL_STYLE) & PGS_HORZ))
#define MIN_ARROW_WIDTH 8 #define MIN_ARROW_WIDTH 8
@ -330,12 +330,12 @@ PAGER_CalcSize (HWND hwnd, INT* size, BOOL getWidth)
NMPGCALCSIZE nmpgcs; NMPGCALCSIZE nmpgcs;
ZeroMemory (&nmpgcs, sizeof (NMPGCALCSIZE)); ZeroMemory (&nmpgcs, sizeof (NMPGCALCSIZE));
nmpgcs.hdr.hwndFrom = hwnd; nmpgcs.hdr.hwndFrom = hwnd;
nmpgcs.hdr.idFrom = GetWindowLongA (hwnd, GWL_ID); nmpgcs.hdr.idFrom = GetWindowLongPtrW (hwnd, GWLP_ID);
nmpgcs.hdr.code = PGN_CALCSIZE; nmpgcs.hdr.code = PGN_CALCSIZE;
nmpgcs.dwFlag = getWidth ? PGF_CALCWIDTH : PGF_CALCHEIGHT; nmpgcs.dwFlag = getWidth ? PGF_CALCWIDTH : PGF_CALCHEIGHT;
nmpgcs.iWidth = getWidth ? *size : 0; nmpgcs.iWidth = getWidth ? *size : 0;
nmpgcs.iHeight = getWidth ? 0 : *size; nmpgcs.iHeight = getWidth ? 0 : *size;
SendMessageA (infoPtr->hwndNotify, WM_NOTIFY, SendMessageW (infoPtr->hwndNotify, WM_NOTIFY,
(WPARAM)nmpgcs.hdr.idFrom, (LPARAM)&nmpgcs); (WPARAM)nmpgcs.hdr.idFrom, (LPARAM)&nmpgcs);
*size = getWidth ? nmpgcs.iWidth : nmpgcs.iHeight; *size = getWidth ? nmpgcs.iWidth : nmpgcs.iHeight;
@ -515,7 +515,7 @@ PAGER_UpdateBtns(HWND hwnd, PAGER_INFO *infoPtr,
} }
if (repaintBtns) if (repaintBtns)
SendMessageA(hwnd, WM_NCPAINT, 0, 0); SendMessageW(hwnd, WM_NCPAINT, 0, 0);
} }
static LRESULT static LRESULT
@ -571,7 +571,7 @@ PAGER_HandleWindowPosChanging(HWND hwnd, WPARAM wParam, WINDOWPOS *winpos)
return 0; return 0;
} }
DefWindowProcA (hwnd, WM_WINDOWPOSCHANGING, wParam, (LPARAM)winpos); DefWindowProcW (hwnd, WM_WINDOWPOSCHANGING, wParam, (LPARAM)winpos);
return 1; return 1;
} }
@ -643,8 +643,8 @@ PAGER_SetFixedHeight(HWND hwnd, PAGER_INFO* infoPtr)
* this module), the native control does only the following: * * this module), the native control does only the following: *
* * * *
* if (some condition) * * if (some condition) *
* PostMessageA(hwnd, EM_FMTLINES, 0, 0); * * PostMessageW(hwnd, EM_FMTLINES, 0, 0); *
* return DefWindowProcA(hwnd, PGM_RECALCSIZE, 0, 0); * * return DefWindowProcW(hwnd, PGM_RECALCSIZE, 0, 0); *
* * * *
* When we figure out what the "some condition" is we will * * When we figure out what the "some condition" is we will *
* implement that for the message processing. * * implement that for the message processing. *
@ -777,7 +777,7 @@ PAGER_Scroll(HWND hwnd, INT dir)
{ {
ZeroMemory (&nmpgScroll, sizeof (NMPGSCROLL)); ZeroMemory (&nmpgScroll, sizeof (NMPGSCROLL));
nmpgScroll.hdr.hwndFrom = hwnd; nmpgScroll.hdr.hwndFrom = hwnd;
nmpgScroll.hdr.idFrom = GetWindowLongA (hwnd, GWL_ID); nmpgScroll.hdr.idFrom = GetWindowLongPtrW (hwnd, GWLP_ID);
nmpgScroll.hdr.code = PGN_SCROLL; nmpgScroll.hdr.code = PGN_SCROLL;
GetWindowRect(hwnd, &rcWnd); GetWindowRect(hwnd, &rcWnd);
@ -797,7 +797,7 @@ PAGER_Scroll(HWND hwnd, INT dir)
} }
nmpgScroll.iScroll -= 2*infoPtr->nButtonSize; nmpgScroll.iScroll -= 2*infoPtr->nButtonSize;
SendMessageA (infoPtr->hwndNotify, WM_NOTIFY, SendMessageW (infoPtr->hwndNotify, WM_NOTIFY,
(WPARAM)nmpgScroll.hdr.idFrom, (LPARAM)&nmpgScroll); (WPARAM)nmpgScroll.hdr.idFrom, (LPARAM)&nmpgScroll);
TRACE("[%p] PGN_SCROLL returns iScroll=%d\n", hwnd, nmpgScroll.iScroll); TRACE("[%p] PGN_SCROLL returns iScroll=%d\n", hwnd, nmpgScroll.iScroll);
@ -830,7 +830,7 @@ PAGER_FmtLines(HWND hwnd)
0,0,infoPtr->nWidth,infoPtr->nHeight, 0,0,infoPtr->nWidth,infoPtr->nHeight,
0); 0);
return DefWindowProcA (hwnd, EM_FMTLINES, 0, 0); return DefWindowProcW (hwnd, EM_FMTLINES, 0, 0);
} }
static LRESULT static LRESULT
@ -841,7 +841,7 @@ PAGER_Create (HWND hwnd, WPARAM wParam, LPARAM lParam)
/* allocate memory for info structure */ /* allocate memory for info structure */
infoPtr = (PAGER_INFO *)Alloc (sizeof(PAGER_INFO)); infoPtr = (PAGER_INFO *)Alloc (sizeof(PAGER_INFO));
SetWindowLongA (hwnd, 0, (DWORD)infoPtr); SetWindowLongPtrW (hwnd, 0, (DWORD_PTR)infoPtr);
/* set default settings */ /* set default settings */
infoPtr->hwndChild = NULL; infoPtr->hwndChild = NULL;
@ -882,7 +882,7 @@ PAGER_Destroy (HWND hwnd, WPARAM wParam, LPARAM lParam)
PAGER_INFO *infoPtr = PAGER_GetInfoPtr (hwnd); PAGER_INFO *infoPtr = PAGER_GetInfoPtr (hwnd);
/* free pager info data */ /* free pager info data */
Free (infoPtr); Free (infoPtr);
SetWindowLongA (hwnd, 0, 0); SetWindowLongPtrW (hwnd, 0, 0);
return 0; return 0;
} }
@ -904,7 +904,7 @@ PAGER_NCCalcSize(HWND hwnd, WPARAM wParam, LPARAM lParam)
* coordinates of the corresponding window's client area. * coordinates of the corresponding window's client area.
*/ */
DefWindowProcA (hwnd, WM_NCCALCSIZE, wParam, lParam); DefWindowProcW (hwnd, WM_NCCALCSIZE, wParam, lParam);
TRACE("orig rect=(%ld,%ld)-(%ld,%ld)\n", TRACE("orig rect=(%ld,%ld)-(%ld,%ld)\n",
lpRect->left, lpRect->top, lpRect->right, lpRect->bottom); lpRect->left, lpRect->top, lpRect->right, lpRect->bottom);
@ -1029,7 +1029,7 @@ PAGER_NCPaint (HWND hwnd, WPARAM wParam, LPARAM lParam)
if (dwStyle & WS_MINIMIZE) if (dwStyle & WS_MINIMIZE)
return 0; return 0;
DefWindowProcA (hwnd, WM_NCPAINT, wParam, lParam); DefWindowProcW (hwnd, WM_NCPAINT, wParam, lParam);
if (!(hdc = GetDCEx (hwnd, 0, DCX_USESTYLE | DCX_WINDOW))) if (!(hdc = GetDCEx (hwnd, 0, DCX_USESTYLE | DCX_WINDOW)))
return 0; return 0;
@ -1155,7 +1155,7 @@ PAGER_SetCursor( HWND hwnd, WPARAM wParam, LPARAM lParam )
{ {
PAGER_CaptureandTrack(infoPtr, hwnd); PAGER_CaptureandTrack(infoPtr, hwnd);
SendMessageA(hwnd, WM_NCPAINT, 0, 0); SendMessageW(hwnd, WM_NCPAINT, 0, 0);
} }
return TRUE; return TRUE;
@ -1178,9 +1178,9 @@ PAGER_MouseLeave (HWND hwnd, WPARAM wParam, LPARAM lParam)
NMHDR nmhdr; NMHDR nmhdr;
ZeroMemory (&nmhdr, sizeof (NMHDR)); ZeroMemory (&nmhdr, sizeof (NMHDR));
nmhdr.hwndFrom = hwnd; nmhdr.hwndFrom = hwnd;
nmhdr.idFrom = GetWindowLongA (hwnd, GWL_ID); nmhdr.idFrom = GetWindowLongPtrW (hwnd, GWLP_ID);
nmhdr.code = NM_RELEASEDCAPTURE; nmhdr.code = NM_RELEASEDCAPTURE;
SendMessageA (infoPtr->hwndNotify, WM_NOTIFY, SendMessageW (infoPtr->hwndNotify, WM_NOTIFY,
(WPARAM)nmhdr.idFrom, (LPARAM)&nmhdr); (WPARAM)nmhdr.idFrom, (LPARAM)&nmhdr);
} }
@ -1253,7 +1253,7 @@ PAGER_MouseMove (HWND hwnd, WPARAM wParam, LPARAM lParam)
PAGER_DrawButton(hdc, infoPtr->clrBk, *btnrect, PAGER_DrawButton(hdc, infoPtr->clrBk, *btnrect,
PAGER_IsHorizontal(hwnd), topLeft, btnstate); PAGER_IsHorizontal(hwnd), topLeft, btnstate);
ReleaseDC(hwnd, hdc); ReleaseDC(hwnd, hdc);
return DefWindowProcA (hwnd, WM_MOUSEMOVE, wParam, lParam); return DefWindowProcW (hwnd, WM_MOUSEMOVE, wParam, lParam);
} }
} }
@ -1268,16 +1268,16 @@ PAGER_MouseMove (HWND hwnd, WPARAM wParam, LPARAM lParam)
NMHDR nmhdr; NMHDR nmhdr;
ZeroMemory (&nmhdr, sizeof (NMHDR)); ZeroMemory (&nmhdr, sizeof (NMHDR));
nmhdr.hwndFrom = hwnd; nmhdr.hwndFrom = hwnd;
nmhdr.idFrom = GetWindowLongA (hwnd, GWL_ID); nmhdr.idFrom = GetWindowLongPtrW (hwnd, GWLP_ID);
nmhdr.code = NM_RELEASEDCAPTURE; nmhdr.code = NM_RELEASEDCAPTURE;
SendMessageA (infoPtr->hwndNotify, WM_NOTIFY, SendMessageW (infoPtr->hwndNotify, WM_NOTIFY,
(WPARAM)nmhdr.idFrom, (LPARAM)&nmhdr); (WPARAM)nmhdr.idFrom, (LPARAM)&nmhdr);
} }
} }
if (IsWindow(hwnd)) if (IsWindow(hwnd))
KillTimer(hwnd, TIMERID1); KillTimer(hwnd, TIMERID1);
} }
return DefWindowProcA (hwnd, WM_MOUSEMOVE, wParam, lParam); return DefWindowProcW (hwnd, WM_MOUSEMOVE, wParam, lParam);
} }
static LRESULT static LRESULT
@ -1310,7 +1310,7 @@ PAGER_LButtonDown (HWND hwnd, WPARAM wParam, LPARAM lParam)
} }
if (repaintBtns) if (repaintBtns)
SendMessageA(hwnd, WM_NCPAINT, 0, 0); SendMessageW(hwnd, WM_NCPAINT, 0, 0);
switch(hit) switch(hit)
{ {
@ -1417,7 +1417,7 @@ PAGER_EraseBackground (HWND hwnd, WPARAM wParam, LPARAM lParam)
* pt.x=0; pt.y=0; ????? * pt.x=0; pt.y=0; ?????
* MapWindowPoints(pager, parent, &pt, 1) * MapWindowPoints(pager, parent, &pt, 1)
* OffsetWindowOrgEx(hdc, pt.x, pt.y, &ptorg) * OffsetWindowOrgEx(hdc, pt.x, pt.y, &ptorg)
* SendMessageA(parent, WM_ERASEBKGND, hdc, 0) * SendMessageW(parent, WM_ERASEBKGND, hdc, 0)
* SetWindowOrgEx(hdc, 0, 0, 0) * SetWindowOrgEx(hdc, 0, 0, 0)
*/ */
@ -1426,7 +1426,7 @@ PAGER_EraseBackground (HWND hwnd, WPARAM wParam, LPARAM lParam)
parent = GetParent(hwnd); parent = GetParent(hwnd);
MapWindowPoints(hwnd, parent, &pt, 1); MapWindowPoints(hwnd, parent, &pt, 1);
OffsetWindowOrgEx (hdc, pt.x, pt.y, &ptorig); OffsetWindowOrgEx (hdc, pt.x, pt.y, &ptorig);
SendMessageA (parent, WM_ERASEBKGND, wParam, lParam); SendMessageW (parent, WM_ERASEBKGND, wParam, lParam);
SetWindowOrgEx (hdc, ptorig.x, ptorig.y, 0); SetWindowOrgEx (hdc, ptorig.x, ptorig.y, 0);
@ -1475,7 +1475,7 @@ PAGER_WindowProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
PAGER_INFO *infoPtr = PAGER_GetInfoPtr (hwnd); PAGER_INFO *infoPtr = PAGER_GetInfoPtr (hwnd);
if (!infoPtr && (uMsg != WM_CREATE)) if (!infoPtr && (uMsg != WM_CREATE))
return DefWindowProcA (hwnd, uMsg, wParam, lParam); return DefWindowProcW (hwnd, uMsg, wParam, lParam);
switch (uMsg) switch (uMsg)
{ {
@ -1551,7 +1551,7 @@ PAGER_WindowProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
case WM_MOUSEMOVE: case WM_MOUSEMOVE:
if (infoPtr->bForward && infoPtr->hwndChild) if (infoPtr->bForward && infoPtr->hwndChild)
PostMessageA(infoPtr->hwndChild, WM_MOUSEMOVE, wParam, lParam); PostMessageW(infoPtr->hwndChild, WM_MOUSEMOVE, wParam, lParam);
return PAGER_MouseMove (hwnd, wParam, lParam); return PAGER_MouseMove (hwnd, wParam, lParam);
case WM_MOUSELEAVE: case WM_MOUSELEAVE:
@ -1578,10 +1578,10 @@ PAGER_WindowProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
case WM_NOTIFY: case WM_NOTIFY:
case WM_COMMAND: case WM_COMMAND:
return SendMessageA (infoPtr->hwndNotify, uMsg, wParam, lParam); return SendMessageW (infoPtr->hwndNotify, uMsg, wParam, lParam);
default: default:
return DefWindowProcA (hwnd, uMsg, wParam, lParam); return DefWindowProcW (hwnd, uMsg, wParam, lParam);
} }
return 0; return 0;
@ -1591,23 +1591,23 @@ PAGER_WindowProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
VOID VOID
PAGER_Register (void) PAGER_Register (void)
{ {
WNDCLASSA wndClass; WNDCLASSW wndClass;
ZeroMemory (&wndClass, sizeof(WNDCLASSA)); ZeroMemory (&wndClass, sizeof(WNDCLASSW));
wndClass.style = CS_GLOBALCLASS | CS_DBLCLKS | CS_SAVEBITS; wndClass.style = CS_GLOBALCLASS;
wndClass.lpfnWndProc = (WNDPROC)PAGER_WindowProc; wndClass.lpfnWndProc = PAGER_WindowProc;
wndClass.cbClsExtra = 0; wndClass.cbClsExtra = 0;
wndClass.cbWndExtra = sizeof(PAGER_INFO *); wndClass.cbWndExtra = sizeof(PAGER_INFO *);
wndClass.hCursor = LoadCursorA (0, (LPSTR)IDC_ARROW); wndClass.hCursor = LoadCursorW (0, (LPWSTR)IDC_ARROW);
wndClass.hbrBackground = 0; wndClass.hbrBackground = (HBRUSH)(COLOR_BTNFACE+1);
wndClass.lpszClassName = WC_PAGESCROLLERA; wndClass.lpszClassName = WC_PAGESCROLLERW;
RegisterClassA (&wndClass); RegisterClassW (&wndClass);
} }
VOID VOID
PAGER_Unregister (void) PAGER_Unregister (void)
{ {
UnregisterClassA (WC_PAGESCROLLERA, NULL); UnregisterClassW (WC_PAGESCROLLERW, NULL);
} }

View file

@ -499,7 +499,7 @@ static LRESULT WINAPI ProgressWindowProc(HWND hwnd, UINT message,
TRACE("hwnd=%p msg=%04x wparam=%x lParam=%lx\n", hwnd, message, wParam, lParam); TRACE("hwnd=%p msg=%04x wparam=%x lParam=%lx\n", hwnd, message, wParam, lParam);
infoPtr = (PROGRESS_INFO *)GetWindowLongW(hwnd, 0); infoPtr = (PROGRESS_INFO *)GetWindowLongPtrW(hwnd, 0);
if (!infoPtr && message != WM_CREATE) if (!infoPtr && message != WM_CREATE)
return DefWindowProcW( hwnd, message, wParam, lParam ); return DefWindowProcW( hwnd, message, wParam, lParam );
@ -518,7 +518,7 @@ static LRESULT WINAPI ProgressWindowProc(HWND hwnd, UINT message,
/* allocate memory for info struct */ /* allocate memory for info struct */
infoPtr = (PROGRESS_INFO *)Alloc (sizeof(PROGRESS_INFO)); infoPtr = (PROGRESS_INFO *)Alloc (sizeof(PROGRESS_INFO));
if (!infoPtr) return -1; if (!infoPtr) return -1;
SetWindowLongW (hwnd, 0, (DWORD)infoPtr); SetWindowLongPtrW (hwnd, 0, (DWORD_PTR)infoPtr);
/* initialize the info struct */ /* initialize the info struct */
infoPtr->Self = hwnd; infoPtr->Self = hwnd;
@ -538,7 +538,7 @@ static LRESULT WINAPI ProgressWindowProc(HWND hwnd, UINT message,
case WM_DESTROY: case WM_DESTROY:
TRACE("Progress Ctrl destruction, hwnd=%p\n", hwnd); TRACE("Progress Ctrl destruction, hwnd=%p\n", hwnd);
Free (infoPtr); Free (infoPtr);
SetWindowLongW(hwnd, 0, 0); SetWindowLongPtrW(hwnd, 0, 0);
return 0; return 0;
case WM_GETFONT: case WM_GETFONT:

View file

@ -4,6 +4,7 @@
* Copyright 1998 Francis Beaudet * Copyright 1998 Francis Beaudet
* Copyright 1999 Thuy Nguyen * Copyright 1999 Thuy Nguyen
* Copyright 2004 Maxime Bellenge * Copyright 2004 Maxime Bellenge
* Copyright 2004 Filip Navara
* *
* This library is free software; you can redistribute it and/or * This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public * modify it under the terms of the GNU Lesser General Public
@ -19,9 +20,42 @@
* License along with this library; if not, write to the Free Software * License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
* *
* This code was audited for completeness against the documented features
* of Comctl32.dll version 6.0 on Sep. 12, 2004, by Filip Navara.
*
* Unless otherwise noted, we believe this code to be complete, as per
* the specification mentioned above.
* If you discover missing features, or bugs, please note them below.
*
* TODO: * TODO:
* - Tab order * - Tab order
* - Unicode property sheets * - Wizard 97 header resizing
* - Enforcing of minimal wizard size
* - Messages:
* o PSM_GETRESULT
* o PSM_IDTOINDEX
* o PSM_INDEXTOID
* o PSM_INDEXTOPAGE
* o PSM_INSERTPAGE
* o PSM_PAGETOINDEX
* o PSM_RECALCPAGESIZES
* o PSM_SETHEADERSUBTITLE
* o PSM_SETHEADERTITLE
* - Notifications:
* o PSN_GETOBJECT
* o PSN_QUERYINITIALFOCUS
* o PSN_TRANSLATEACCELERATOR
* - Styles:
* o PSH_WIZARDHASFINISH
* o PSH_RTLREADING
* o PSH_WIZARDCONTEXTHELP
* o PSH_STRETCHWATERMARK
* o PSH_USEPAGELANG
* o PSH_NOCONTEXTHELP
* o PSH_USEPSTARTPAGE
* - Page styles:
* o PSP_USEFUSIONCONTEXT
* o PSP_USEREFPARENT
*/ */
#include <stdarg.h> #include <stdarg.h>
@ -97,8 +131,6 @@ typedef struct tagPropSheetInfo
PropPageInfo* proppage; PropPageInfo* proppage;
HFONT hFont; HFONT hFont;
HFONT hFontBold; HFONT hFontBold;
int x;
int y;
int width; int width;
int height; int height;
HIMAGELIST hImageList; HIMAGELIST hImageList;
@ -125,6 +157,10 @@ const WCHAR PropSheetInfoStr[] =
#define INTRNL_ANY_WIZARD (PSH_WIZARD | PSH_WIZARD97_OLD | PSH_WIZARD97_NEW | PSH_WIZARD_LITE) #define INTRNL_ANY_WIZARD (PSH_WIZARD | PSH_WIZARD97_OLD | PSH_WIZARD97_NEW | PSH_WIZARD_LITE)
/* Wizard metrics specified in DLUs */
#define WIZARD_PADDING 7
#define WIZARD_HEADER_HEIGHT 36
/****************************************************************************** /******************************************************************************
* Prototypes * Prototypes
*/ */
@ -199,30 +235,19 @@ static VOID PROPSHEET_UnImplementedFlags(DWORD dwFlags)
/* /*
* unhandled header flags: * unhandled header flags:
* PSH_DEFAULT 0x00000000
* PSH_WIZARDHASFINISH 0x00000010 * PSH_WIZARDHASFINISH 0x00000010
* PSH_RTLREADING 0x00000800 * PSH_RTLREADING 0x00000800
* PSH_WIZARDCONTEXTHELP 0x00001000 * PSH_WIZARDCONTEXTHELP 0x00001000
* PSH_WIZARD97 0x00002000 (pre IE 5)
* PSH_WATERMARK 0x00008000
* PSH_USEHBMWATERMARK 0x00010000
* PSH_USEHPLWATERMARK 0x00020000
* PSH_STRETCHWATERMARK 0x00040000 * PSH_STRETCHWATERMARK 0x00040000
* PSH_HEADER 0x00080000
* PSH_USEHBMHEADER 0x00100000
* PSH_USEPAGELANG 0x00200000 * PSH_USEPAGELANG 0x00200000
* PSH_WIZARD_LITE 0x00400000 also not in .h
* PSH_WIZARD97 0x01000000 (IE 5 and above)
* PSH_NOCONTEXTHELP 0x02000000 also not in .h * PSH_NOCONTEXTHELP 0x02000000 also not in .h
*/ */
add_flag(PSH_WIZARDHASFINISH); add_flag(PSH_WIZARDHASFINISH);
add_flag(PSH_RTLREADING); add_flag(PSH_RTLREADING);
add_flag(PSH_WIZARDCONTEXTHELP); add_flag(PSH_WIZARDCONTEXTHELP);
add_flag(PSH_WIZARD97_OLD);
add_flag(PSH_STRETCHWATERMARK); add_flag(PSH_STRETCHWATERMARK);
add_flag(PSH_USEPAGELANG); add_flag(PSH_USEPAGELANG);
add_flag(PSH_WIZARD_LITE);
add_flag(PSH_NOCONTEXTHELP); add_flag(PSH_NOCONTEXTHELP);
if (string[0] != '\0') if (string[0] != '\0')
FIXME("%s\n", string); FIXME("%s\n", string);
@ -234,13 +259,43 @@ static VOID PROPSHEET_UnImplementedFlags(DWORD dwFlags)
* *
* Retrieve rect from tab control and map into the dialog for SetWindowPos * Retrieve rect from tab control and map into the dialog for SetWindowPos
*/ */
static void PROPSHEET_GetPageRect(const PropSheetInfo * psInfo, HWND hwndDlg, RECT *rc) static void PROPSHEET_GetPageRect(const PropSheetInfo * psInfo, HWND hwndDlg,
RECT *rc, LPCPROPSHEETPAGEW ppshpage)
{ {
HWND hwndTabCtrl = GetDlgItem(hwndDlg, IDC_TABCONTROL); if (psInfo->ppshheader.dwFlags & INTRNL_ANY_WIZARD) {
HWND hwndChild;
RECT r;
GetClientRect(hwndTabCtrl, rc); if (((psInfo->ppshheader.dwFlags & (PSH_WIZARD97_NEW | PSH_WIZARD97_OLD)) &&
SendMessageW(hwndTabCtrl, TCM_ADJUSTRECT, FALSE, (LPARAM)rc); (psInfo->ppshheader.dwFlags & PSH_HEADER) &&
MapWindowPoints(hwndTabCtrl, hwndDlg, (LPPOINT)rc, 2); !(ppshpage->dwFlags & PSP_HIDEHEADER)) ||
(psInfo->ppshheader.dwFlags & PSH_WIZARD))
{
rc->left = rc->top = WIZARD_PADDING;
}
else
{
rc->left = rc->top = 0;
}
rc->right = psInfo->width - rc->left;
rc->bottom = psInfo->height - rc->top;
MapDialogRect(hwndDlg, rc);
if ((psInfo->ppshheader.dwFlags & (PSH_WIZARD97_NEW | PSH_WIZARD97_OLD)) &&
(psInfo->ppshheader.dwFlags & PSH_HEADER) &&
!(ppshpage->dwFlags & PSP_HIDEHEADER))
{
hwndChild = GetDlgItem(hwndDlg, IDC_SUNKEN_LINEHEADER);
GetClientRect(hwndChild, &r);
MapWindowPoints(hwndChild, hwndDlg, (LPPOINT) &r, 2);
rc->top += r.bottom + 1;
}
} else {
HWND hwndTabCtrl = GetDlgItem(hwndDlg, IDC_TABCONTROL);
GetClientRect(hwndTabCtrl, rc);
SendMessageW(hwndTabCtrl, TCM_ADJUSTRECT, FALSE, (LPARAM)rc);
MapWindowPoints(hwndTabCtrl, hwndDlg, (LPPOINT)rc, 2);
}
} }
/****************************************************************************** /******************************************************************************
@ -476,6 +531,23 @@ BOOL PROPSHEET_CollectPageInfo(LPCPROPSHEETPAGEW lppsp,
width = (WORD)*p; p++; width = (WORD)*p; p++;
height = (WORD)*p; p++; height = (WORD)*p; p++;
/* Special calculation for interior wizard pages so the largest page is
* calculated correctly. We need to add all the padding and space occupied
* by the header so the width and height sums up to the whole wizard client
* area. */
if ((psInfo->ppshheader.dwFlags & (PSH_WIZARD97_OLD | PSH_WIZARD97_NEW)) &&
(psInfo->ppshheader.dwFlags & PSH_HEADER) &&
!(dwFlags & PSP_HIDEHEADER))
{
height += 2 * WIZARD_PADDING + WIZARD_HEADER_HEIGHT;
width += 2 * WIZARD_PADDING;
}
if (psInfo->ppshheader.dwFlags & PSH_WIZARD)
{
height += 2 * WIZARD_PADDING;
width += 2 * WIZARD_PADDING;
}
/* remember the largest width and height */ /* remember the largest width and height */
if (width > psInfo->width) if (width > psInfo->width)
psInfo->width = width; psInfo->width = width;
@ -683,8 +755,8 @@ static BOOL PROPSHEET_SizeMismatch(HWND hwndDlg, PropSheetInfo* psInfo)
/* /*
* Biggest page size. * Biggest page size.
*/ */
rcPage.left = psInfo->x; rcPage.left = 0;
rcPage.top = psInfo->y; rcPage.top = 0;
rcPage.right = psInfo->width; rcPage.right = psInfo->width;
rcPage.bottom = psInfo->height; rcPage.bottom = psInfo->height;
@ -700,49 +772,6 @@ static BOOL PROPSHEET_SizeMismatch(HWND hwndDlg, PropSheetInfo* psInfo)
return FALSE; return FALSE;
} }
/******************************************************************************
* PROPSHEET_IsTooSmallWizard
*
* Verify that the default property sheet is big enough.
*/
static BOOL PROPSHEET_IsTooSmallWizard(HWND hwndDlg, PropSheetInfo* psInfo)
{
RECT rcSheetRect, rcPage, rcLine, rcSheetClient;
HWND hwndLine = GetDlgItem(hwndDlg, IDC_SUNKEN_LINE);
PADDING_INFO padding = PROPSHEET_GetPaddingInfoWizard(hwndDlg, psInfo);
GetClientRect(hwndDlg, &rcSheetClient);
GetWindowRect(hwndDlg, &rcSheetRect);
GetWindowRect(hwndLine, &rcLine);
/* Remove the space below the sunken line */
rcSheetClient.bottom -= (rcSheetRect.bottom - rcLine.top);
/* Remove the buffer zone all around the edge */
rcSheetClient.bottom -= (padding.y * 2);
rcSheetClient.right -= (padding.x * 2);
/*
* Biggest page size.
*/
rcPage.left = psInfo->x;
rcPage.top = psInfo->y;
rcPage.right = psInfo->width;
rcPage.bottom = psInfo->height;
MapDialogRect(hwndDlg, &rcPage);
TRACE("biggest page %ld %ld %ld %ld\n", rcPage.left, rcPage.top,
rcPage.right, rcPage.bottom);
if (rcPage.right > rcSheetClient.right)
return TRUE;
if (rcPage.bottom > rcSheetClient.bottom)
return TRUE;
return FALSE;
}
/****************************************************************************** /******************************************************************************
* PROPSHEET_AdjustSize * PROPSHEET_AdjustSize
* *
@ -764,8 +793,8 @@ static BOOL PROPSHEET_AdjustSize(HWND hwndDlg, PropSheetInfo* psInfo)
/* /*
* Biggest page size. * Biggest page size.
*/ */
rc.left = psInfo->x; rc.left = 0;
rc.top = psInfo->y; rc.top = 0;
rc.right = psInfo->width; rc.right = psInfo->width;
rc.bottom = psInfo->height; rc.bottom = psInfo->height;
@ -832,69 +861,33 @@ static BOOL PROPSHEET_AdjustSize(HWND hwndDlg, PropSheetInfo* psInfo)
*/ */
static BOOL PROPSHEET_AdjustSizeWizard(HWND hwndDlg, PropSheetInfo* psInfo) static BOOL PROPSHEET_AdjustSizeWizard(HWND hwndDlg, PropSheetInfo* psInfo)
{ {
HWND hwndButton = GetDlgItem(hwndDlg, IDCANCEL);
HWND hwndLine = GetDlgItem(hwndDlg, IDC_SUNKEN_LINE); HWND hwndLine = GetDlgItem(hwndDlg, IDC_SUNKEN_LINE);
HWND hwndTabCtrl = GetDlgItem(hwndDlg, IDC_TABCONTROL); RECT rc, lineRect, dialogRect;
RECT rc,tabRect;
int buttonHeight, lineHeight;
PADDING_INFO padding = PROPSHEET_GetPaddingInfoWizard(hwndDlg, psInfo);
RECT units;
/* Get the height of buttons */ /* Biggest page size */
GetClientRect(hwndButton, &rc); rc.left = 0;
buttonHeight = rc.bottom; rc.top = 0;
GetClientRect(hwndLine, &rc);
lineHeight = rc.bottom;
/* retrieve the dialog units */
units.left = units.right = 4;
units.top = units.bottom = 8;
MapDialogRect(hwndDlg, &units);
/*
* Biggest page size.
*/
rc.left = psInfo->x;
rc.top = psInfo->y;
rc.right = psInfo->width; rc.right = psInfo->width;
rc.bottom = psInfo->height; rc.bottom = psInfo->height;
MapDialogRect(hwndDlg, &rc); MapDialogRect(hwndDlg, &rc);
GetClientRect(hwndTabCtrl,&tabRect);
if ((rc.bottom - rc.top) < (tabRect.bottom - tabRect.top))
{
rc.bottom = rc.top + tabRect.bottom - tabRect.top;
psInfo->height = MulDiv((rc.bottom - rc.top), 8, units.top);
}
if ((rc.right - rc.left) < (tabRect.right - tabRect.left))
{
rc.right = rc.left + tabRect.right - tabRect.left;
psInfo->width = MulDiv((rc.right - rc.left), 4, units.left);
}
TRACE("Biggest page %ld %ld %ld %ld\n", rc.left, rc.top, rc.right, rc.bottom); TRACE("Biggest page %ld %ld %ld %ld\n", rc.left, rc.top, rc.right, rc.bottom);
TRACE(" constants padx=%d, pady=%d, butH=%d, lH=%d\n",
padding.x, padding.y, buttonHeight, lineHeight);
/* Make room */ /* Add space for the buttons row */
rc.right += (padding.x * 2); GetWindowRect(hwndLine, &lineRect);
rc.bottom += (buttonHeight + lineHeight); MapWindowPoints(NULL, hwndDlg, (LPPOINT)&lineRect, 2);
if (psInfo->ppshheader.dwFlags & (PSH_WIZARD97_OLD | PSH_WIZARD97_NEW)) GetClientRect(hwndDlg, &dialogRect);
rc.bottom += (4 * padding.y); rc.bottom += dialogRect.bottom - lineRect.top - 1;
else
rc.bottom += (5 * padding.y);
/* /* Convert the client coordinates to window coordinates */
* Resize the property sheet. AdjustWindowRect(&rc, GetWindowLongW(hwndDlg, GWL_STYLE), FALSE);
*/
/* Resize the property sheet */
TRACE("setting dialog %08lx, rc (0,0)-(%ld,%ld)\n", TRACE("setting dialog %08lx, rc (0,0)-(%ld,%ld)\n",
(DWORD)hwndDlg, rc.right, rc.bottom); (DWORD)hwndDlg, rc.right, rc.bottom);
SetWindowPos(hwndDlg, 0, 0, 0, rc.right, rc.bottom, SetWindowPos(hwndDlg, 0, 0, 0, rc.right - rc.left, rc.bottom - rc.top,
SWP_NOMOVE | SWP_NOZORDER | SWP_NOACTIVATE); SWP_NOMOVE | SWP_NOZORDER | SWP_NOACTIVATE);
return TRUE; return TRUE;
} }
@ -936,7 +929,7 @@ static BOOL PROPSHEET_AdjustButtons(HWND hwndParent, PropSheetInfo* psInfo)
y = rcSheet.bottom - (padding.y + buttonHeight); y = rcSheet.bottom - (padding.y + buttonHeight);
/* /*
* Position OK button. * Position OK button and make it default.
*/ */
hwndButton = GetDlgItem(hwndParent, IDOK); hwndButton = GetDlgItem(hwndParent, IDOK);
@ -945,6 +938,9 @@ static BOOL PROPSHEET_AdjustButtons(HWND hwndParent, PropSheetInfo* psInfo)
SetWindowPos(hwndButton, 0, x, y, 0, 0, SetWindowPos(hwndButton, 0, x, y, 0, 0,
SWP_NOSIZE | SWP_NOZORDER | SWP_NOACTIVATE); SWP_NOSIZE | SWP_NOZORDER | SWP_NOACTIVATE);
SendMessageA(hwndParent, DM_SETDEFID, IDOK, 0);
/* /*
* Position Cancel button. * Position Cancel button.
*/ */
@ -1085,7 +1081,8 @@ static BOOL PROPSHEET_AdjustButtonsWizard(HWND hwndParent,
else else
ShowWindow(hwndButton, SW_HIDE); ShowWindow(hwndButton, SW_HIDE);
if (psInfo->ppshheader.dwFlags & (PSH_WIZARD97_OLD | PSH_WIZARD97_NEW)) if (psInfo->ppshheader.dwFlags &
(PSH_WIZARD97_OLD | PSH_WIZARD97_NEW | PSH_WIZARD_LITE))
padding.x = 0; padding.x = 0;
/* /*
@ -1095,7 +1092,6 @@ static BOOL PROPSHEET_AdjustButtonsWizard(HWND hwndParent,
y = rcSheet.bottom - ((padding.y * 2) + buttonHeight + lineHeight); y = rcSheet.bottom - ((padding.y * 2) + buttonHeight + lineHeight);
lineWidth = rcSheet.right - (padding.x * 2); lineWidth = rcSheet.right - (padding.x * 2);
SetWindowPos(hwndLine, 0, x, y, lineWidth, 2, SetWindowPos(hwndLine, 0, x, y, lineWidth, 2,
SWP_NOZORDER | SWP_NOACTIVATE); SWP_NOZORDER | SWP_NOACTIVATE);
@ -1249,6 +1245,29 @@ static BOOL PROPSHEET_CreateTabControl(HWND hwndParent,
return TRUE; return TRUE;
} }
/******************************************************************************
* PROPSHEET_WizardSubclassProc
*
* Subclassing window procedure for wizard extrior pages to prevent drawing
* background and so drawing above the watermark.
*/
LRESULT CALLBACK
PROPSHEET_WizardSubclassProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam, UINT_PTR uID, DWORD_PTR dwRef)
{
switch (uMsg)
{
case WM_ERASEBKGND:
return TRUE;
case WM_CTLCOLORSTATIC:
SetBkColor((HDC)wParam, GetSysColor(COLOR_WINDOW));
return (INT_PTR)GetSysColorBrush(COLOR_WINDOW);
}
return DefSubclassProc(hwnd, uMsg, wParam, lParam);
}
/* /*
* Get the size of an in-memory Template * Get the size of an in-memory Template
* *
@ -1373,7 +1392,7 @@ static UINT GetTemplateSize(DLGTEMPLATE* pTemplate)
p += lstrlenW( (LPCWSTR)p ) + 1; p += lstrlenW( (LPCWSTR)p ) + 1;
break; break;
} }
p += *p + 1; /* Skip extra data */ p += *p / sizeof(WORD) + 1; /* Skip extra data */
--nrofitems; --nrofitems;
} }
@ -1394,9 +1413,6 @@ static BOOL PROPSHEET_CreatePage(HWND hwndParent,
{ {
DLGTEMPLATE* pTemplate; DLGTEMPLATE* pTemplate;
HWND hwndPage; HWND hwndPage;
RECT rc;
PADDING_INFO padding;
UINT pageWidth,pageHeight;
DWORD resSize; DWORD resSize;
LPVOID temp = NULL; LPVOID temp = NULL;
@ -1466,7 +1482,7 @@ static BOOL PROPSHEET_CreatePage(HWND hwndParent,
if (((MyDLGTEMPLATEEX*)pTemplate)->signature == 0xFFFF) if (((MyDLGTEMPLATEEX*)pTemplate)->signature == 0xFFFF)
{ {
((MyDLGTEMPLATEEX*)pTemplate)->style |= WS_CHILD | DS_CONTROL; ((MyDLGTEMPLATEEX*)pTemplate)->style |= WS_CHILD | WS_TABSTOP | DS_CONTROL;
((MyDLGTEMPLATEEX*)pTemplate)->style &= ~DS_MODALFRAME; ((MyDLGTEMPLATEEX*)pTemplate)->style &= ~DS_MODALFRAME;
((MyDLGTEMPLATEEX*)pTemplate)->style &= ~WS_CAPTION; ((MyDLGTEMPLATEEX*)pTemplate)->style &= ~WS_CAPTION;
((MyDLGTEMPLATEEX*)pTemplate)->style &= ~WS_SYSMENU; ((MyDLGTEMPLATEEX*)pTemplate)->style &= ~WS_SYSMENU;
@ -1474,10 +1490,12 @@ static BOOL PROPSHEET_CreatePage(HWND hwndParent,
((MyDLGTEMPLATEEX*)pTemplate)->style &= ~WS_DISABLED; ((MyDLGTEMPLATEEX*)pTemplate)->style &= ~WS_DISABLED;
((MyDLGTEMPLATEEX*)pTemplate)->style &= ~WS_VISIBLE; ((MyDLGTEMPLATEEX*)pTemplate)->style &= ~WS_VISIBLE;
((MyDLGTEMPLATEEX*)pTemplate)->style &= ~WS_THICKFRAME; ((MyDLGTEMPLATEEX*)pTemplate)->style &= ~WS_THICKFRAME;
((MyDLGTEMPLATEEX*)pTemplate)->exStyle |= WS_EX_CONTROLPARENT;
} }
else else
{ {
pTemplate->style |= WS_CHILD | DS_CONTROL; pTemplate->style |= WS_CHILD | WS_TABSTOP | DS_CONTROL;
pTemplate->style &= ~DS_MODALFRAME; pTemplate->style &= ~DS_MODALFRAME;
pTemplate->style &= ~WS_CAPTION; pTemplate->style &= ~WS_CAPTION;
pTemplate->style &= ~WS_SYSMENU; pTemplate->style &= ~WS_SYSMENU;
@ -1485,6 +1503,8 @@ static BOOL PROPSHEET_CreatePage(HWND hwndParent,
pTemplate->style &= ~WS_DISABLED; pTemplate->style &= ~WS_DISABLED;
pTemplate->style &= ~WS_VISIBLE; pTemplate->style &= ~WS_VISIBLE;
pTemplate->style &= ~WS_THICKFRAME; pTemplate->style &= ~WS_THICKFRAME;
pTemplate->dwExtendedStyle |= WS_EX_CONTROLPARENT;
} }
if (psInfo->proppage[index].useCallback) if (psInfo->proppage[index].useCallback)
@ -1509,67 +1529,13 @@ static BOOL PROPSHEET_CreatePage(HWND hwndParent,
psInfo->proppage[index].hwndPage = hwndPage; psInfo->proppage[index].hwndPage = hwndPage;
if (psInfo->ppshheader.dwFlags & INTRNL_ANY_WIZARD) { /* Subclass exterior wizard pages */
int offsety = 0; if((psInfo->ppshheader.dwFlags & (PSH_WIZARD97_NEW | PSH_WIZARD97_OLD)) &&
HWND hwndChild; (psInfo->ppshheader.dwFlags & PSH_WATERMARK) &&
RECT r; (ppshpage->dwFlags & PSP_HIDEHEADER))
{
rc.left = psInfo->x; SetWindowSubclass(hwndPage, PROPSHEET_WizardSubclassProc, 1,
rc.top = psInfo->y; (DWORD_PTR)ppshpage);
rc.right = psInfo->width;
rc.bottom = psInfo->height;
MapDialogRect(hwndParent, &rc);
pageWidth = rc.right - rc.left;
pageHeight = rc.bottom - rc.top;
padding = PROPSHEET_GetPaddingInfoWizard(hwndParent, psInfo);
TRACE("setting page %08lx, rc (%ld,%ld)-(%ld,%ld) w=%d, h=%d, padx=%d, pady=%d\n",
(DWORD)hwndPage, rc.left, rc.top, rc.right, rc.bottom,
pageWidth, pageHeight, padding.x, padding.y);
if (psInfo->ppshheader.dwFlags & (PSH_WIZARD97_NEW | PSH_WIZARD97_OLD) &&
psInfo->ppshheader.dwFlags & PSH_HEADER)
{
if ((ppshpage->dwFlags & PSP_USEHEADERTITLE) &&
(HIWORD(ppshpage->pszHeaderTitle) == 0))
{
/* FIXME: load title string into ppshpage->pszHeaderTitle */
}
if ((ppshpage->dwFlags & PSP_USEHEADERSUBTITLE) &&
(HIWORD(ppshpage->pszHeaderSubTitle) == 0))
{
/* FIXME: load title string into ppshpage->pszHeaderSubTitle */
}
hwndChild = GetDlgItem(hwndParent, IDC_SUNKEN_LINEHEADER);
GetClientRect(hwndChild, &r);
MapWindowPoints(hwndChild, hwndParent, (LPPOINT) &r, 2);
offsety = (ppshpage->dwFlags & PSP_HIDEHEADER)?0:r.bottom + 1;
}
SetWindowPos(hwndPage, HWND_TOP,
rc.left + padding.x/2,
rc.top + padding.y/2 + offsety,
pageWidth, pageHeight - offsety, 0);
}
else {
/*
* Ask the Tab control to reduce the client rectangle to that
* it has available.
*/
PROPSHEET_GetPageRect(psInfo, hwndParent, &rc);
pageWidth = rc.right - rc.left;
pageHeight = rc.bottom - rc.top;
TRACE("setting page %08lx, rc (%ld,%ld)-(%ld,%ld) w=%d, h=%d\n",
(DWORD)hwndPage, rc.left, rc.top, rc.right, rc.bottom,
pageWidth, pageHeight);
SetWindowPos(hwndPage, HWND_TOP,
rc.left, rc.top,
pageWidth, pageHeight, 0);
} }
return TRUE; return TRUE;
@ -1624,13 +1590,14 @@ static BOOL PROPSHEET_ShowPage(HWND hwndDlg, int index, PropSheetInfo * psInfo)
return TRUE; return TRUE;
} }
ppshpage = (LPCPROPSHEETPAGEW)psInfo->proppage[index].hpage;
if (psInfo->proppage[index].hwndPage == 0) if (psInfo->proppage[index].hwndPage == 0)
{ {
ppshpage = (LPCPROPSHEETPAGEW)psInfo->proppage[index].hpage;
PROPSHEET_CreatePage(hwndDlg, index, psInfo, ppshpage); PROPSHEET_CreatePage(hwndDlg, index, psInfo, ppshpage);
} }
if ((psInfo->ppshheader.dwFlags & (PSH_WIZARD97_OLD | PSH_WIZARD97_NEW)) == 0) if ((psInfo->ppshheader.dwFlags & INTRNL_ANY_WIZARD) &&
(ppshpage->dwFlags & PSP_USETITLE))
{ {
PROPSHEET_SetTitleW(hwndDlg, psInfo->ppshheader.dwFlags, PROPSHEET_SetTitleW(hwndDlg, psInfo->ppshheader.dwFlags,
psInfo->proppage[index].pszText); psInfo->proppage[index].pszText);
@ -1658,11 +1625,11 @@ static BOOL PROPSHEET_ShowPage(HWND hwndDlg, int index, PropSheetInfo * psInfo)
ShowWindow(hwndLineHeader, SW_HIDE); ShowWindow(hwndLineHeader, SW_HIDE);
else else
ShowWindow(hwndLineHeader, SW_SHOW); ShowWindow(hwndLineHeader, SW_SHOW);
InvalidateRgn(hwndDlg, NULL, TRUE);
UpdateWindow(hwndDlg);
} }
InvalidateRgn(hwndDlg, NULL, TRUE);
UpdateWindow(hwndDlg);
return TRUE; return TRUE;
} }
@ -2090,6 +2057,8 @@ static BOOL PROPSHEET_SetCurSel(HWND hwndDlg,
while (1) { while (1) {
int result; int result;
PSHNOTIFY psn; PSHNOTIFY psn;
RECT rc;
LPCPROPSHEETPAGEW ppshpage = (LPCPROPSHEETPAGEW)psInfo->proppage[index].hpage;
if (hwndTabControl) if (hwndTabControl)
SendMessageW(hwndTabControl, TCM_SETCURSEL, index, 0); SendMessageW(hwndTabControl, TCM_SETCURSEL, index, 0);
@ -2100,10 +2069,22 @@ static BOOL PROPSHEET_SetCurSel(HWND hwndDlg,
psn.lParam = 0; psn.lParam = 0;
if (!psInfo->proppage[index].hwndPage) { if (!psInfo->proppage[index].hwndPage) {
LPCPROPSHEETPAGEW ppshpage = (LPCPROPSHEETPAGEW)psInfo->proppage[index].hpage;
PROPSHEET_CreatePage(hwndDlg, index, psInfo, ppshpage); PROPSHEET_CreatePage(hwndDlg, index, psInfo, ppshpage);
} }
/* Resize the property sheet page to the fit in the Tab control
* (for regular property sheets) or to fit in the client area (for
* wizards).
* NOTE: The resizing happens every time the page is selected and
* not only when it's created (some applications depend on it). */
PROPSHEET_GetPageRect(psInfo, hwndDlg, &rc, ppshpage);
TRACE("setting page %p, rc (%ld,%ld)-(%ld,%ld) w=%ld, h=%ld\n",
psInfo->proppage[index].hwndPage, rc.left, rc.top, rc.right, rc.bottom,
rc.right - rc.left, rc.bottom - rc.top);
SetWindowPos(psInfo->proppage[index].hwndPage, HWND_TOP,
rc.left, rc.top,
rc.right - rc.left, rc.bottom - rc.top, 0);
result = SendMessageW(psInfo->proppage[index].hwndPage, WM_NOTIFY, 0, (LPARAM) &psn); result = SendMessageW(psInfo->proppage[index].hwndPage, WM_NOTIFY, 0, (LPARAM) &psn);
if (!result) if (!result)
break; break;
@ -2411,6 +2392,15 @@ static BOOL PROPSHEET_RemovePage(HWND hwndDlg,
else if (index < psInfo->active_page) else if (index < psInfo->active_page)
psInfo->active_page--; psInfo->active_page--;
/* Unsubclass the page dialog window */
if((psInfo->ppshheader.dwFlags & (PSH_WIZARD97_NEW | PSH_WIZARD97_OLD) &&
(psInfo->ppshheader.dwFlags & PSH_WATERMARK) &&
((PROPSHEETPAGEW*)psInfo->proppage[index].hpage)->dwFlags & PSP_HIDEHEADER))
{
RemoveWindowSubclass(psInfo->proppage[index].hwndPage,
PROPSHEET_WizardSubclassProc, 1);
}
/* Destroy page dialog window */ /* Destroy page dialog window */
DestroyWindow(psInfo->proppage[index].hwndPage); DestroyWindow(psInfo->proppage[index].hwndPage);
@ -2671,6 +2661,15 @@ static void PROPSHEET_CleanUp(HWND hwndDlg)
{ {
PROPSHEETPAGEA* psp = (PROPSHEETPAGEA*)psInfo->proppage[i].hpage; PROPSHEETPAGEA* psp = (PROPSHEETPAGEA*)psInfo->proppage[i].hpage;
/* Unsubclass the page dialog window */
if((psInfo->ppshheader.dwFlags & (PSH_WIZARD97_NEW | PSH_WIZARD97_OLD)) &&
(psInfo->ppshheader.dwFlags & PSH_WATERMARK) &&
(psp->dwFlags & PSP_HIDEHEADER))
{
RemoveWindowSubclass(psInfo->proppage[i].hwndPage,
PROPSHEET_WizardSubclassProc, 1);
}
if(psInfo->proppage[i].hwndPage) if(psInfo->proppage[i].hwndPage)
DestroyWindow(psInfo->proppage[i].hwndPage); DestroyWindow(psInfo->proppage[i].hwndPage);
@ -2910,7 +2909,7 @@ BOOL WINAPI DestroyPropertySheetPage(HPROPSHEETPAGE hPropPage)
HeapFree(GetProcessHeap(), 0, (LPVOID)psp->u2.pszIcon); HeapFree(GetProcessHeap(), 0, (LPVOID)psp->u2.pszIcon);
if ((psp->dwFlags & PSP_USETITLE) && HIWORD( psp->pszTitle )) if ((psp->dwFlags & PSP_USETITLE) && HIWORD( psp->pszTitle ))
HeapFree(GetProcessHeap(), 0, (LPVOID)psp->pszTitle); HeapFree(GetProcessHeap(), 0, (LPVOID)psp->pszTitle);
Free(hPropPage); Free(hPropPage);
@ -3050,8 +3049,10 @@ static LRESULT PROPSHEET_Paint(HWND hwnd)
HPALETTE hOldPal = 0; HPALETTE hOldPal = 0;
int offsety = 0; int offsety = 0;
HBRUSH hbr; HBRUSH hbr;
RECT r; RECT r, rzone;
LPCPROPSHEETPAGEW ppshpage; LPCPROPSHEETPAGEW ppshpage;
WCHAR szBuffer[256];
int nLength;
hdc = BeginPaint(hwnd, &ps); hdc = BeginPaint(hwnd, &ps);
if (!hdc) return 1; if (!hdc) return 1;
@ -3066,7 +3067,6 @@ static LRESULT PROPSHEET_Paint(HWND hwnd)
(psInfo->ppshheader.dwFlags & (PSH_WIZARD97_OLD | PSH_WIZARD97_NEW)) && (psInfo->ppshheader.dwFlags & (PSH_WIZARD97_OLD | PSH_WIZARD97_NEW)) &&
(psInfo->ppshheader.dwFlags & PSH_HEADER) ) (psInfo->ppshheader.dwFlags & PSH_HEADER) )
{ {
RECT rzone;
HWND hwndLineHeader = GetDlgItem(hwnd, IDC_SUNKEN_LINEHEADER); HWND hwndLineHeader = GetDlgItem(hwnd, IDC_SUNKEN_LINEHEADER);
HFONT hOldFont; HFONT hOldFont;
COLORREF clrOld = 0; COLORREF clrOld = 0;
@ -3077,7 +3077,7 @@ static LRESULT PROPSHEET_Paint(HWND hwnd)
GetClientRect(hwndLineHeader, &r); GetClientRect(hwndLineHeader, &r);
MapWindowPoints(hwndLineHeader, hwnd, (LPPOINT) &r, 2); MapWindowPoints(hwndLineHeader, hwnd, (LPPOINT) &r, 2);
SetRect(&rzone, 0, 0, r.right, r.top - 1); SetRect(&rzone, 0, 0, r.right + 1, r.top - 1);
GetObjectA(psInfo->ppshheader.u5.hbmHeader, sizeof(BITMAP), (LPVOID)&bm); GetObjectA(psInfo->ppshheader.u5.hbmHeader, sizeof(BITMAP), (LPVOID)&bm);
@ -3103,52 +3103,80 @@ static LRESULT PROPSHEET_Paint(HWND hwnd)
} }
DeleteObject(hbr); DeleteObject(hbr);
} }
}
else
{
hbr = CreateSolidBrush(GetSysColor(COLOR_WINDOW));
FillRect(hdc, &rzone, hbr);
DeleteObject(hbr);
}
clrOld = SetTextColor (hdc, 0x00000000); /* Draw the header itself. */
oldBkMode = SetBkMode (hdc, TRANSPARENT);
if (ppshpage->dwFlags & PSP_USEHEADERTITLE) {
SetRect(&r, 20, 10, rzone.right - bm.bmWidth, 18);
if (psInfo->unicode)
DrawTextW(hdc, (LPWSTR)ppshpage->pszHeaderTitle,
-1, &r, DT_LEFT | DT_SINGLELINE | DT_NOCLIP);
else
DrawTextA(hdc, (LPCSTR)ppshpage->pszHeaderTitle,
-1, &r, DT_LEFT | DT_SINGLELINE | DT_NOCLIP);
}
if (ppshpage->dwFlags & PSP_USEHEADERSUBTITLE) {
SelectObject(hdc, psInfo->hFont);
SetRect(&r, 40, 25, rzone.right - bm.bmWidth, 43);
if (psInfo->unicode)
DrawTextW(hdc, (LPWSTR)ppshpage->pszHeaderSubTitle,
-1, &r, DT_LEFT | DT_SINGLELINE);
else
DrawTextA(hdc, (LPCSTR)ppshpage->pszHeaderSubTitle,
-1, &r, DT_LEFT | DT_SINGLELINE);
}
if (psInfo->ppshheader.dwFlags & PSH_WIZARD97_OLD)
{
BitBlt(hdc, 0, 0, BitBlt(hdc, 0, 0,
bm.bmWidth, min(bm.bmHeight, rzone.bottom), bm.bmWidth, min(bm.bmHeight, rzone.bottom),
hdcSrc, 0, 0, SRCCOPY); hdcSrc, 0, 0, SRCCOPY);
} }
else else
{ {
BitBlt(hdc, rzone.right - bm.bmWidth, hbr = GetSysColorBrush(COLOR_WINDOW);
(rzone.bottom - bm.bmHeight) / 2, FillRect(hdc, &rzone, hbr);
/* Draw the header bitmap. It's always centered like a
* common 49 x 49 bitmap. */
BitBlt(hdc, rzone.right - 49 - ((rzone.bottom - 49) / 2),
(rzone.bottom - 49) / 2,
bm.bmWidth, bm.bmHeight, bm.bmWidth, bm.bmHeight,
hdcSrc, 0, 0, SRCCOPY); hdcSrc, 0, 0, SRCCOPY);
/* NOTE: Native COMCTL32 draws a white stripe over the bitmap
* if its height is smaller than 49 pixels. Because the reason
* for this bug is unknown the current code doesn't try to
* replicate it. */
} }
clrOld = SetTextColor (hdc, 0x00000000);
oldBkMode = SetBkMode (hdc, TRANSPARENT);
if (ppshpage->dwFlags & PSP_USEHEADERTITLE) {
SetRect(&r, 20, 10, 0, 0);
if (HIWORD(ppshpage->pszHeaderTitle))
{
if (psInfo->unicode)
DrawTextW(hdc, (LPWSTR)ppshpage->pszHeaderTitle,
-1, &r, DT_LEFT | DT_SINGLELINE | DT_NOCLIP);
else
DrawTextA(hdc, (LPCSTR)ppshpage->pszHeaderTitle,
-1, &r, DT_LEFT | DT_SINGLELINE | DT_NOCLIP);
}
else
{
nLength = LoadStringW(ppshpage->hInstance, (UINT)ppshpage->pszHeaderTitle,
szBuffer, 256);
if (nLength != 0)
{
DrawTextW(hdc, szBuffer, nLength,
&r, DT_LEFT | DT_SINGLELINE | DT_NOCLIP);
}
}
}
if (ppshpage->dwFlags & PSP_USEHEADERSUBTITLE) {
SelectObject(hdc, psInfo->hFont);
SetRect(&r, 40, 25, rzone.right - 69, rzone.bottom);
if (HIWORD(ppshpage->pszHeaderTitle))
{
if (psInfo->unicode)
DrawTextW(hdc, (LPWSTR)ppshpage->pszHeaderSubTitle,
-1, &r, DT_LEFT | DT_SINGLELINE);
else
DrawTextA(hdc, (LPCSTR)ppshpage->pszHeaderSubTitle,
-1, &r, DT_LEFT | DT_SINGLELINE);
}
else
{
nLength = LoadStringW(ppshpage->hInstance, (UINT)ppshpage->pszHeaderSubTitle,
szBuffer, 256);
if (nLength != 0)
{
DrawTextW(hdc, szBuffer, nLength,
&r, DT_LEFT | DT_SINGLELINE);
}
}
}
offsety = rzone.bottom + 2; offsety = rzone.bottom + 2;
SetTextColor(hdc, clrOld); SetTextColor(hdc, clrOld);
@ -3157,7 +3185,7 @@ static LRESULT PROPSHEET_Paint(HWND hwnd)
SelectObject(hdcSrc, hbmp); SelectObject(hdcSrc, hbmp);
} }
if ( ((psInfo->active_page == 0) || (psInfo->active_page == psInfo->nPages - 1)) && if ( (ppshpage->dwFlags & PSP_HIDEHEADER) &&
(psInfo->ppshheader.dwFlags & (PSH_WIZARD97_OLD | PSH_WIZARD97_NEW)) && (psInfo->ppshheader.dwFlags & (PSH_WIZARD97_OLD | PSH_WIZARD97_NEW)) &&
(psInfo->ppshheader.dwFlags & PSH_WATERMARK) ) (psInfo->ppshheader.dwFlags & PSH_WATERMARK) )
{ {
@ -3166,6 +3194,14 @@ static LRESULT PROPSHEET_Paint(HWND hwnd)
GetClientRect(hwndLine, &r); GetClientRect(hwndLine, &r);
MapWindowPoints(hwndLine, hwnd, (LPPOINT) &r, 2); MapWindowPoints(hwndLine, hwnd, (LPPOINT) &r, 2);
rzone.left = 0;
rzone.top = 0;
rzone.right = r.right;
rzone.bottom = r.top - 1;
hbr = GetSysColorBrush(COLOR_WINDOW);
FillRect(hdc, &rzone, hbr);
GetObjectA(psInfo->ppshheader.u4.hbmWatermark, sizeof(BITMAP), (LPVOID)&bm); GetObjectA(psInfo->ppshheader.u4.hbmWatermark, sizeof(BITMAP), (LPVOID)&bm);
hbmp = SelectObject(hdcSrc, psInfo->ppshheader.u4.hbmWatermark); hbmp = SelectObject(hdcSrc, psInfo->ppshheader.u4.hbmWatermark);
@ -3225,11 +3261,11 @@ PROPSHEET_DialogProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
/* /*
* psInfo->hwnd is not being used by WINE code - it exists * psInfo->hwnd is not being used by WINE code - it exists
* for compatibility with "real" Windoze. The same about * for compatibility with "real" Windoze. The same about
* SetWindowLong - WINE is only using the PropSheetInfoStr * SetWindowLongPtr - WINE is only using the PropSheetInfoStr
* property. * property.
*/ */
psInfo->hwnd = hwnd; psInfo->hwnd = hwnd;
SetWindowLongW(hwnd,DWL_USER,(LONG)psInfo); SetWindowLongPtrW(hwnd, DWLP_USER, (DWORD_PTR)psInfo);
/* set up the Next and Back buttons by default */ /* set up the Next and Back buttons by default */
PROPSHEET_SetWizButtons(hwnd, PSWIZB_BACK|PSWIZB_NEXT); PROPSHEET_SetWizButtons(hwnd, PSWIZB_BACK|PSWIZB_NEXT);
@ -3276,11 +3312,8 @@ PROPSHEET_DialogProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
if (psInfo->ppshheader.dwFlags & INTRNL_ANY_WIZARD) if (psInfo->ppshheader.dwFlags & INTRNL_ANY_WIZARD)
{ {
ShowWindow(hwndTabCtrl, SW_HIDE); ShowWindow(hwndTabCtrl, SW_HIDE);
if (PROPSHEET_IsTooSmallWizard(hwnd, psInfo)) PROPSHEET_AdjustSizeWizard(hwnd, psInfo);
{ PROPSHEET_AdjustButtonsWizard(hwnd, psInfo);
PROPSHEET_AdjustSizeWizard(hwnd, psInfo);
PROPSHEET_AdjustButtonsWizard(hwnd, psInfo);
}
} }
else else
{ {
@ -3363,7 +3396,7 @@ PROPSHEET_DialogProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
if(pnmh->code == TCN_SELCHANGING) if(pnmh->code == TCN_SELCHANGING)
{ {
BOOL bRet = PROPSHEET_CanSetCurSel(hwnd); BOOL bRet = PROPSHEET_CanSetCurSel(hwnd);
SetWindowLongW(hwnd, DWL_MSGRESULT, !bRet); SetWindowLongPtrW(hwnd, DWLP_MSGRESULT, !bRet);
return TRUE; return TRUE;
} }
@ -3379,7 +3412,7 @@ PROPSHEET_DialogProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
if (psInfo->activeValid && psInfo->active_page != -1) if (psInfo->activeValid && psInfo->active_page != -1)
hwndPage = psInfo->proppage[psInfo->active_page].hwndPage; hwndPage = psInfo->proppage[psInfo->active_page].hwndPage;
SetWindowLongW(hwnd, DWL_MSGRESULT, (LONG)hwndPage); SetWindowLongPtrW(hwnd, DWLP_MSGRESULT, (DWORD_PTR)hwndPage);
return TRUE; return TRUE;
} }
@ -3396,7 +3429,7 @@ PROPSHEET_DialogProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{ {
HWND hwndTabCtrl = GetDlgItem(hwnd, IDC_TABCONTROL); HWND hwndTabCtrl = GetDlgItem(hwnd, IDC_TABCONTROL);
SetWindowLongW(hwnd, DWL_MSGRESULT, (LONG)hwndTabCtrl); SetWindowLongPtrW(hwnd, DWLP_MSGRESULT, (DWORD_PTR)hwndTabCtrl);
return TRUE; return TRUE;
} }
@ -3414,7 +3447,7 @@ PROPSHEET_DialogProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
(HPROPSHEETPAGE)lParam); (HPROPSHEETPAGE)lParam);
} }
SetWindowLongW(hwnd, DWL_MSGRESULT, msgResult); SetWindowLongPtrW(hwnd, DWLP_MSGRESULT, msgResult);
return TRUE; return TRUE;
} }
@ -3462,7 +3495,7 @@ PROPSHEET_DialogProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{ {
BOOL msgResult = PROPSHEET_Apply(hwnd, 0); BOOL msgResult = PROPSHEET_Apply(hwnd, 0);
SetWindowLongW(hwnd, DWL_MSGRESULT, msgResult); SetWindowLongPtrW(hwnd, DWLP_MSGRESULT, msgResult);
return TRUE; return TRUE;
} }
@ -3471,7 +3504,7 @@ PROPSHEET_DialogProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{ {
LRESULT msgResult = PROPSHEET_QuerySiblings(hwnd, wParam, lParam); LRESULT msgResult = PROPSHEET_QuerySiblings(hwnd, wParam, lParam);
SetWindowLongW(hwnd, DWL_MSGRESULT, msgResult); SetWindowLongPtrW(hwnd, DWLP_MSGRESULT, msgResult);
return TRUE; return TRUE;
} }
@ -3488,7 +3521,7 @@ PROPSHEET_DialogProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
BOOL msgResult = PROPSHEET_AddPage(hwnd, (HPROPSHEETPAGE)lParam); BOOL msgResult = PROPSHEET_AddPage(hwnd, (HPROPSHEETPAGE)lParam);
SetWindowLongW(hwnd, DWL_MSGRESULT, msgResult); SetWindowLongPtrW(hwnd, DWLP_MSGRESULT, msgResult);
return TRUE; return TRUE;
} }
@ -3500,7 +3533,7 @@ PROPSHEET_DialogProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
case PSM_ISDIALOGMESSAGE: case PSM_ISDIALOGMESSAGE:
{ {
BOOL msgResult = PROPSHEET_IsDialogMessage(hwnd, (LPMSG)lParam); BOOL msgResult = PROPSHEET_IsDialogMessage(hwnd, (LPMSG)lParam);
SetWindowLongA(hwnd, DWL_MSGRESULT, msgResult); SetWindowLongPtrW(hwnd, DWLP_MSGRESULT, msgResult);
return TRUE; return TRUE;
} }
@ -3527,7 +3560,7 @@ PROPSHEET_DialogProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
case PSM_INSERTPAGE: case PSM_INSERTPAGE:
{ {
BOOL msgResult = PROPSHEET_InsertPage(hwnd, (HPROPSHEETPAGE)wParam, (HPROPSHEETPAGE)lParam); BOOL msgResult = PROPSHEET_InsertPage(hwnd, (HPROPSHEETPAGE)wParam, (HPROPSHEETPAGE)lParam);
SetWindowLongW(hwnd, DWL_MSGRESULT, msgResult); SetWindowLongPtrW(hwnd, DWLP_MSGRESULT, msgResult);
return TRUE; return TRUE;
} }
@ -3550,56 +3583,56 @@ PROPSHEET_DialogProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
case PSM_HWNDTOINDEX: case PSM_HWNDTOINDEX:
{ {
LRESULT msgResult = PROPSHEET_HwndToIndex(hwnd, (HWND)wParam); LRESULT msgResult = PROPSHEET_HwndToIndex(hwnd, (HWND)wParam);
SetWindowLongW(hwnd, DWL_MSGRESULT, msgResult); SetWindowLongPtrW(hwnd, DWLP_MSGRESULT, msgResult);
return TRUE; return TRUE;
} }
case PSM_INDEXTOHWND: case PSM_INDEXTOHWND:
{ {
LRESULT msgResult = PROPSHEET_IndexToHwnd(hwnd, (int)wParam); LRESULT msgResult = PROPSHEET_IndexToHwnd(hwnd, (int)wParam);
SetWindowLongW(hwnd, DWL_MSGRESULT, msgResult); SetWindowLongPtrW(hwnd, DWLP_MSGRESULT, msgResult);
return TRUE; return TRUE;
} }
case PSM_PAGETOINDEX: case PSM_PAGETOINDEX:
{ {
LRESULT msgResult = PROPSHEET_PageToIndex(hwnd, (HPROPSHEETPAGE)wParam); LRESULT msgResult = PROPSHEET_PageToIndex(hwnd, (HPROPSHEETPAGE)wParam);
SetWindowLongW(hwnd, DWL_MSGRESULT, msgResult); SetWindowLongPtrW(hwnd, DWLP_MSGRESULT, msgResult);
return TRUE; return TRUE;
} }
case PSM_INDEXTOPAGE: case PSM_INDEXTOPAGE:
{ {
LRESULT msgResult = PROPSHEET_IndexToPage(hwnd, (int)wParam); LRESULT msgResult = PROPSHEET_IndexToPage(hwnd, (int)wParam);
SetWindowLongW(hwnd, DWL_MSGRESULT, msgResult); SetWindowLongPtrW(hwnd, DWLP_MSGRESULT, msgResult);
return TRUE; return TRUE;
} }
case PSM_IDTOINDEX: case PSM_IDTOINDEX:
{ {
LRESULT msgResult = PROPSHEET_IdToIndex(hwnd, (int)lParam); LRESULT msgResult = PROPSHEET_IdToIndex(hwnd, (int)lParam);
SetWindowLongW(hwnd, DWL_MSGRESULT, msgResult); SetWindowLongPtrW(hwnd, DWLP_MSGRESULT, msgResult);
return TRUE; return TRUE;
} }
case PSM_INDEXTOID: case PSM_INDEXTOID:
{ {
LRESULT msgResult = PROPSHEET_IndexToId(hwnd, (int)wParam); LRESULT msgResult = PROPSHEET_IndexToId(hwnd, (int)wParam);
SetWindowLongW(hwnd, DWL_MSGRESULT, msgResult); SetWindowLongPtrW(hwnd, DWLP_MSGRESULT, msgResult);
return TRUE; return TRUE;
} }
case PSM_GETRESULT: case PSM_GETRESULT:
{ {
LRESULT msgResult = PROPSHEET_GetResult(hwnd); LRESULT msgResult = PROPSHEET_GetResult(hwnd);
SetWindowLongW(hwnd, DWL_MSGRESULT, msgResult); SetWindowLongPtrW(hwnd, DWLP_MSGRESULT, msgResult);
return TRUE; return TRUE;
} }
case PSM_RECALCPAGESIZES: case PSM_RECALCPAGESIZES:
{ {
LRESULT msgResult = PROPSHEET_RecalcPageSizes(hwnd); LRESULT msgResult = PROPSHEET_RecalcPageSizes(hwnd);
SetWindowLongW(hwnd, DWL_MSGRESULT, msgResult); SetWindowLongPtrW(hwnd, DWLP_MSGRESULT, msgResult);
return TRUE; return TRUE;
} }

View file

@ -333,7 +333,7 @@ typedef struct
else b->rcBand.left += (i); } while(0) else b->rcBand.left += (i); } while(0)
#define REBAR_GetInfoPtr(wndPtr) ((REBAR_INFO *)GetWindowLongA (hwnd, 0)) #define REBAR_GetInfoPtr(wndPtr) ((REBAR_INFO *)GetWindowLongPtrW (hwnd, 0))
/* "constant values" retrieved when DLL was initialized */ /* "constant values" retrieved when DLL was initialized */
@ -751,8 +751,8 @@ REBAR_AdjustBands (REBAR_INFO *infoPtr, UINT rowstart, UINT rowend,
/* start and end bands are *not* hidden */ /* start and end bands are *not* hidden */
{ {
REBAR_BAND *lpBand; REBAR_BAND *lpBand;
UINT x, xsep, extra, curwidth, fudge; UINT xsep, extra, curwidth, fudge;
INT i, last_adjusted; INT x, i, last_adjusted;
TRACE("start=%u, end=%u, max x=%d, max y=%d\n", TRACE("start=%u, end=%u, max x=%d, max y=%d\n",
rowstart, rowend, maxx, mcy); rowstart, rowend, maxx, mcy);
@ -3841,7 +3841,7 @@ REBAR_Destroy (REBAR_INFO *infoPtr, WPARAM wParam, LPARAM lParam)
DeleteObject (infoPtr->hcurVert); DeleteObject (infoPtr->hcurVert);
DeleteObject (infoPtr->hcurDrag); DeleteObject (infoPtr->hcurDrag);
if(infoPtr->hDefaultFont) DeleteObject (infoPtr->hDefaultFont); if(infoPtr->hDefaultFont) DeleteObject (infoPtr->hDefaultFont);
SetWindowLongA (infoPtr->hwndSelf, 0, 0); SetWindowLongPtrW (infoPtr->hwndSelf, 0, 0);
/* free rebar info data */ /* free rebar info data */
Free (infoPtr); Free (infoPtr);
@ -4124,7 +4124,7 @@ REBAR_NCCreate (HWND hwnd, WPARAM wParam, LPARAM lParam)
/* allocate memory for info structure */ /* allocate memory for info structure */
infoPtr = (REBAR_INFO *)Alloc (sizeof(REBAR_INFO)); infoPtr = (REBAR_INFO *)Alloc (sizeof(REBAR_INFO));
SetWindowLongA (hwnd, 0, (DWORD)infoPtr); SetWindowLongPtrW (hwnd, 0, (DWORD_PTR)infoPtr);
/* initialize info structure - initial values are 0 */ /* initialize info structure - initial values are 0 */
infoPtr->clrBk = CLR_NONE; infoPtr->clrBk = CLR_NONE;

View file

@ -1106,6 +1106,84 @@ IDI_DRAGARROW ICON LOADONCALL DISCARDABLE idi_dragarrow.ico
} */ } */
/* BINRES idi_tt_info_sm.ico */
IDI_TT_INFO_SM ICON LOADONCALL DISCARDABLE idi_tt_info_sm.ico
/* {
'00 00 01 00 01 00 10 10 10 00 00 00 00 00 28 01'
'00 00 16 00 00 00 28 00 00 00 10 00 00 00 20 00'
'00 00 01 00 04 00 00 00 00 00 C0 00 00 00 00 00'
'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
'00 00 00 00 80 00 00 80 00 00 00 80 80 00 80 00'
'00 00 80 00 80 00 80 80 00 00 C0 C0 C0 00 80 80'
'80 00 00 00 FF 00 00 FF 00 00 00 FF FF 00 FF 00'
'00 00 FF 00 FF 00 FF FF 00 00 FF FF FF 00 00 00'
'00 00 08 80 00 00 00 00 00 08 00 80 00 00 00 00'
'08 80 F0 80 00 00 00 00 80 0F F0 88 00 00 00 00'
'0F FF FF 00 80 00 00 0F FF FF FF FF 08 00 08 FF'
'FC CC CC FF F0 80 8F FF FF 8C CF FF FF 08 8F FF'
'FF 8C CF FF FF 08 8F FF FF 8C CF FF FF 08 8F FF'
'F8 CC CF FF FF 00 8F FF FF FF FF FF FF 00 08 FF'
'FF 8C CF FF F0 00 00 8F FF CC CF FF 00 00 00 08'
'8F FF FF 00 00 00 00 00 08 88 88 00 00 00 FF 9F'
'00 00 FE 1F 00 00 F8 1F 00 00 F0 0F 00 00 E0 07'
'00 00 C0 03 00 00 80 01 00 00 00 00 00 00 00 00'
'00 00 00 00 00 00 00 01 00 00 00 01 00 00 80 03'
'00 00 C0 07 00 00 E0 0F 00 00 F8 3F 00 00'
} */
/* BINRES idi_tt_warn_sm.ico */
IDI_TT_WARN_SM ICON LOADONCALL DISCARDABLE idi_tt_warn_sm.ico
/* {
'00 00 01 00 01 00 10 10 10 00 00 00 00 00 28 01'
'00 00 16 00 00 00 28 00 00 00 10 00 00 00 20 00'
'00 00 01 00 04 00 00 00 00 00 C0 00 00 00 00 00'
'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
'00 00 00 00 80 00 00 80 00 00 00 80 80 00 80 00'
'00 00 80 00 80 00 80 80 00 00 C0 C0 C0 00 80 80'
'80 00 00 00 FF 00 00 FF 00 00 00 FF FF 00 FF 00'
'00 00 FF 00 FF 00 FF FF 00 00 FF FF FF 00 03 33'
'33 33 33 33 33 33 00 00 00 00 00 00 00 03 0B BB'
'BB BB BB BB BB 03 00 BB BB 30 3B BB B0 30 00 BB'
'BB 30 3B BB B0 30 00 0B BB BB BB BB 03 00 00 0B'
'BB B0 BB BB 03 00 00 00 BB 30 3B B0 30 00 00 00'
'BB 00 0B B0 30 00 00 00 0B 00 0B 03 00 00 00 00'
'0B B0 BB 03 00 00 00 00 00 BB B0 30 00 00 00 00'
'00 BB B0 30 00 00 00 00 00 0B 03 00 00 00 00 00'
'00 0B 03 00 00 00 00 00 00 00 30 00 00 00 80 00'
'00 00 00 00 00 00 00 00 00 00 80 01 00 00 80 01'
'00 00 C0 03 00 00 C0 03 00 00 E0 07 00 00 E0 07'
'00 00 F0 0F 00 00 F0 0F 00 00 F8 1F 00 00 F8 1F'
'00 00 FC 3F 00 00 FC 3F 00 00 FE 7F 00 00'
} */
/* BINRES idi_tt_error_sm.ico */
IDI_TT_ERROR_SM ICON LOADONCALL DISCARDABLE idi_tt_error_sm.ico
/* {
'00 00 01 00 01 00 10 10 10 00 00 00 00 00 28 01'
'00 00 16 00 00 00 28 00 00 00 10 00 00 00 20 00'
'00 00 01 00 04 00 00 00 00 00 C0 00 00 00 00 00'
'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
'00 00 00 00 80 00 00 80 00 00 00 80 80 00 80 00'
'00 00 80 00 80 00 80 80 00 00 C0 C0 C0 00 80 80'
'80 00 00 00 FF 00 00 FF 00 00 00 FF FF 00 FF 00'
'00 00 FF 00 FF 00 FF FF 00 00 FF FF FF 00 00 00'
'08 88 88 80 00 00 00 08 81 11 11 88 80 00 00 01'
'19 99 99 11 88 00 00 19 99 99 99 99 18 80 01 99'
'F9 99 99 F9 91 80 01 9F FF 99 9F FF 91 88 19 99'
'FF F9 FF F9 99 18 19 99 9F FF FF 99 99 18 19 99'
'99 FF F9 99 99 18 19 99 9F FF FF 99 99 10 19 99'
'FF F9 FF F9 99 10 01 9F FF 99 9F FF 91 00 01 99'
'F9 99 99 F9 91 00 00 19 99 99 99 99 10 00 00 01'
'19 99 99 11 00 00 00 00 01 11 11 00 00 00 F8 1F'
'00 00 E0 07 00 00 E0 03 00 00 C0 01 00 00 80 01'
'00 00 80 00 00 00 00 00 00 00 00 00 00 00 00 00'
'00 00 00 01 00 00 00 01 00 00 80 03 00 00 80 03'
'00 00 C0 07 00 00 E0 0F 00 00 F8 3F 00 00'
} */
/* /*
* Everything specific to any language goes * Everything specific to any language goes
* in one of the specific files. * in one of the specific files.
@ -1115,6 +1193,7 @@ IDI_DRAGARROW ICON LOADONCALL DISCARDABLE idi_dragarrow.ico
*/ */
#include "comctl_Cn.rc" #include "comctl_Cn.rc"
#include "comctl_Cs.rc"
#include "comctl_De.rc" #include "comctl_De.rc"
#include "comctl_En.rc" #include "comctl_En.rc"
#include "comctl_Es.rc" #include "comctl_Es.rc"

View file

@ -91,7 +91,7 @@ typedef struct
#define VERT_BORDER 2 #define VERT_BORDER 2
#define HORZ_GAP 2 #define HORZ_GAP 2
#define STATUSBAR_GetInfoPtr(hwnd) ((STATUSWINDOWINFO *)GetWindowLongW (hwnd, 0)) #define STATUSBAR_GetInfoPtr(hwnd) ((STATUSWINDOWINFO *)GetWindowLongPtrW (hwnd, 0))
/* prototype */ /* prototype */
static void static void
@ -165,7 +165,7 @@ STATUSBAR_DrawPart (HDC hdc, const STATUSWINDOWPART *part, const STATUSWINDOWINF
{ {
DRAWITEMSTRUCT dis; DRAWITEMSTRUCT dis;
dis.CtlID = GetWindowLongW (infoPtr->Self, GWL_ID); dis.CtlID = GetWindowLongPtrW (infoPtr->Self, GWLP_ID);
dis.itemID = itemID; dis.itemID = itemID;
dis.hwndItem = infoPtr->Self; dis.hwndItem = infoPtr->Self;
dis.hDC = hdc; dis.hDC = hdc;
@ -777,7 +777,7 @@ STATUSBAR_Simple (STATUSWINDOWINFO *infoPtr, BOOL simple)
/* send notification */ /* send notification */
nmhdr.hwndFrom = infoPtr->Self; nmhdr.hwndFrom = infoPtr->Self;
nmhdr.idFrom = GetWindowLongW (infoPtr->Self, GWL_ID); nmhdr.idFrom = GetWindowLongPtrW (infoPtr->Self, GWLP_ID);
nmhdr.code = SBN_SIMPLEMODECHANGE; nmhdr.code = SBN_SIMPLEMODECHANGE;
SendMessageW (infoPtr->Notify, WM_NOTIFY, 0, (LPARAM)&nmhdr); SendMessageW (infoPtr->Notify, WM_NOTIFY, 0, (LPARAM)&nmhdr);
InvalidateRect(infoPtr->Self, NULL, FALSE); InvalidateRect(infoPtr->Self, NULL, FALSE);
@ -807,7 +807,7 @@ STATUSBAR_WMDestroy (STATUSWINDOWINFO *infoPtr)
if (infoPtr->hwndToolTip) if (infoPtr->hwndToolTip)
DestroyWindow (infoPtr->hwndToolTip); DestroyWindow (infoPtr->hwndToolTip);
SetWindowLongW(infoPtr->Self, 0, 0); SetWindowLongPtrW(infoPtr->Self, 0, 0);
Free (infoPtr); Free (infoPtr);
return 0; return 0;
} }
@ -826,7 +826,7 @@ STATUSBAR_WMCreate (HWND hwnd, LPCREATESTRUCTA lpCreate)
TRACE("\n"); TRACE("\n");
infoPtr = (STATUSWINDOWINFO*)Alloc (sizeof(STATUSWINDOWINFO)); infoPtr = (STATUSWINDOWINFO*)Alloc (sizeof(STATUSWINDOWINFO));
if (!infoPtr) goto create_fail; if (!infoPtr) goto create_fail;
SetWindowLongW (hwnd, 0, (DWORD)infoPtr); SetWindowLongPtrW (hwnd, 0, (DWORD_PTR)infoPtr);
infoPtr->Self = hwnd; infoPtr->Self = hwnd;
infoPtr->Notify = lpCreate->hwndParent; infoPtr->Notify = lpCreate->hwndParent;
@ -908,13 +908,13 @@ STATUSBAR_WMCreate (HWND hwnd, LPCREATESTRUCTA lpCreate)
CreateWindowExW (0, TOOLTIPS_CLASSW, NULL, 0, CreateWindowExW (0, TOOLTIPS_CLASSW, NULL, 0,
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, hwnd, 0, CW_USEDEFAULT, hwnd, 0,
(HINSTANCE)GetWindowLongW(hwnd, GWL_HINSTANCE), NULL); (HINSTANCE)GetWindowLongPtrW(hwnd, GWLP_HINSTANCE), NULL);
if (infoPtr->hwndToolTip) { if (infoPtr->hwndToolTip) {
NMTOOLTIPSCREATED nmttc; NMTOOLTIPSCREATED nmttc;
nmttc.hdr.hwndFrom = hwnd; nmttc.hdr.hwndFrom = hwnd;
nmttc.hdr.idFrom = GetWindowLongW (hwnd, GWL_ID); nmttc.hdr.idFrom = GetWindowLongPtrW (hwnd, GWLP_ID);
nmttc.hdr.code = NM_TOOLTIPSCREATED; nmttc.hdr.code = NM_TOOLTIPSCREATED;
nmttc.hwndToolTips = infoPtr->hwndToolTip; nmttc.hwndToolTips = infoPtr->hwndToolTip;
@ -1106,7 +1106,7 @@ STATUSBAR_SendNotify (HWND hwnd, UINT code)
TRACE("code %04x\n", code); TRACE("code %04x\n", code);
nmhdr.hwndFrom = hwnd; nmhdr.hwndFrom = hwnd;
nmhdr.idFrom = GetWindowLongW (hwnd, GWL_ID); nmhdr.idFrom = GetWindowLongPtrW (hwnd, GWLP_ID);
nmhdr.code = code; nmhdr.code = code;
SendMessageW (infoPtr->Notify, WM_NOTIFY, 0, (LPARAM)&nmhdr); SendMessageW (infoPtr->Notify, WM_NOTIFY, 0, (LPARAM)&nmhdr);
return 0; return 0;
@ -1270,11 +1270,11 @@ STATUS_Register (void)
ZeroMemory (&wndClass, sizeof(WNDCLASSW)); ZeroMemory (&wndClass, sizeof(WNDCLASSW));
wndClass.style = CS_GLOBALCLASS | CS_DBLCLKS | CS_VREDRAW; wndClass.style = CS_GLOBALCLASS | CS_DBLCLKS | CS_VREDRAW;
wndClass.lpfnWndProc = (WNDPROC)StatusWindowProc; wndClass.lpfnWndProc = StatusWindowProc;
wndClass.cbClsExtra = 0; wndClass.cbClsExtra = 0;
wndClass.cbWndExtra = sizeof(STATUSWINDOWINFO *); wndClass.cbWndExtra = sizeof(STATUSWINDOWINFO *);
wndClass.hCursor = LoadCursorW (0, (LPWSTR)IDC_ARROW); wndClass.hCursor = LoadCursorW (0, (LPWSTR)IDC_ARROW);
wndClass.hbrBackground = (HBRUSH)(COLOR_3DFACE + 1); wndClass.hbrBackground = (HBRUSH)(COLOR_BTNFACE + 1);
wndClass.lpszClassName = STATUSCLASSNAMEW; wndClass.lpszClassName = STATUSCLASSNAMEW;
RegisterClassW (&wndClass); RegisterClassW (&wndClass);

View file

@ -34,6 +34,7 @@
#include "winnls.h" #include "winnls.h"
#include "commctrl.h" #include "commctrl.h"
#include "comctl32.h" #include "comctl32.h"
#include "wine/unicode.h"
#include "wine/debug.h" #include "wine/debug.h"
WINE_DEFAULT_DEBUG_CHANNEL(progress); WINE_DEFAULT_DEBUG_CHANNEL(progress);
@ -375,7 +376,7 @@ CheckParameter:
/* Copy the tag parameters */ /* Copy the tag parameters */
if(lpID != NULL) if(lpID != NULL)
{ {
nc = min(lenId, lstrlenW(lpID)); nc = min(lenId, strlenW(lpID));
nc = min(nc, MAX_LINKID_TEXT); nc = min(nc, MAX_LINKID_TEXT);
Last->u.Link.szID = SYSLINK_Alloc((MAX_LINKID_TEXT + 1) * sizeof(WCHAR)); Last->u.Link.szID = SYSLINK_Alloc((MAX_LINKID_TEXT + 1) * sizeof(WCHAR));
if(Last->u.Link.szID != NULL) if(Last->u.Link.szID != NULL)
@ -388,7 +389,7 @@ CheckParameter:
Last->u.Link.szID = NULL; Last->u.Link.szID = NULL;
if(lpUrl != NULL) if(lpUrl != NULL)
{ {
nc = min(lenUrl, lstrlenW(lpUrl)); nc = min(lenUrl, strlenW(lpUrl));
nc = min(nc, L_MAX_URL_LENGTH); nc = min(nc, L_MAX_URL_LENGTH);
Last->u.Link.szUrl = SYSLINK_Alloc((L_MAX_URL_LENGTH + 1) * sizeof(WCHAR)); Last->u.Link.szUrl = SYSLINK_Alloc((L_MAX_URL_LENGTH + 1) * sizeof(WCHAR));
if(Last->u.Link.szUrl != NULL) if(Last->u.Link.szUrl != NULL)
@ -455,7 +456,7 @@ CheckParameter:
/* Copy the tag parameters */ /* Copy the tag parameters */
if(lpID != NULL) if(lpID != NULL)
{ {
nc = min(lenId, lstrlenW(lpID)); nc = min(lenId, strlenW(lpID));
nc = min(nc, MAX_LINKID_TEXT); nc = min(nc, MAX_LINKID_TEXT);
Last->u.Link.szID = SYSLINK_Alloc((MAX_LINKID_TEXT + 1) * sizeof(WCHAR)); Last->u.Link.szID = SYSLINK_Alloc((MAX_LINKID_TEXT + 1) * sizeof(WCHAR));
if(Last->u.Link.szID != NULL) if(Last->u.Link.szID != NULL)
@ -468,7 +469,7 @@ CheckParameter:
Last->u.Link.szID = NULL; Last->u.Link.szID = NULL;
if(lpUrl != NULL) if(lpUrl != NULL)
{ {
nc = min(lenUrl, lstrlenW(lpUrl)); nc = min(lenUrl, strlenW(lpUrl));
nc = min(nc, L_MAX_URL_LENGTH); nc = min(nc, L_MAX_URL_LENGTH);
Last->u.Link.szUrl = SYSLINK_Alloc((L_MAX_URL_LENGTH + 1) * sizeof(WCHAR)); Last->u.Link.szUrl = SYSLINK_Alloc((L_MAX_URL_LENGTH + 1) * sizeof(WCHAR));
if(Last->u.Link.szUrl != NULL) if(Last->u.Link.szUrl != NULL)
@ -1223,7 +1224,7 @@ static LRESULT SYSLINK_SendParentNotify (SYSLINK_INFO *infoPtr, UINT code, PDOC_
NMLINK nml; NMLINK nml;
nml.hdr.hwndFrom = infoPtr->Self; nml.hdr.hwndFrom = infoPtr->Self;
nml.hdr.idFrom = GetWindowLongW(infoPtr->Self, GWL_ID); nml.hdr.idFrom = GetWindowLongPtrW(infoPtr->Self, GWLP_ID);
nml.hdr.code = code; nml.hdr.code = code;
nml.item.mask = 0; nml.item.mask = 0;
@ -1465,7 +1466,7 @@ static LRESULT WINAPI SysLinkWindowProc(HWND hwnd, UINT message,
TRACE("hwnd=%p msg=%04x wparam=%x lParam=%lx\n", hwnd, message, wParam, lParam); TRACE("hwnd=%p msg=%04x wparam=%x lParam=%lx\n", hwnd, message, wParam, lParam);
infoPtr = (SYSLINK_INFO *)GetWindowLongW(hwnd, 0); infoPtr = (SYSLINK_INFO *)GetWindowLongPtrW(hwnd, 0);
if (!infoPtr && message != WM_CREATE) if (!infoPtr && message != WM_CREATE)
return DefWindowProcW( hwnd, message, wParam, lParam ); return DefWindowProcW( hwnd, message, wParam, lParam );
@ -1618,7 +1619,7 @@ static LRESULT WINAPI SysLinkWindowProc(HWND hwnd, UINT message,
/* allocate memory for info struct */ /* allocate memory for info struct */
infoPtr = (SYSLINK_INFO *)SYSLINK_Alloc (sizeof(SYSLINK_INFO)); infoPtr = (SYSLINK_INFO *)SYSLINK_Alloc (sizeof(SYSLINK_INFO));
if (!infoPtr) return -1; if (!infoPtr) return -1;
SetWindowLongW (hwnd, 0, (DWORD)infoPtr); SetWindowLongPtrW (hwnd, 0, (DWORD_PTR)infoPtr);
/* initialize the info struct */ /* initialize the info struct */
infoPtr->Self = hwnd; infoPtr->Self = hwnd;
@ -1639,7 +1640,7 @@ static LRESULT WINAPI SysLinkWindowProc(HWND hwnd, UINT message,
TRACE("SysLink Ctrl destruction, hwnd=%p\n", hwnd); TRACE("SysLink Ctrl destruction, hwnd=%p\n", hwnd);
SYSLINK_ClearDoc(infoPtr); SYSLINK_ClearDoc(infoPtr);
SYSLINK_Free (infoPtr); SYSLINK_Free (infoPtr);
SetWindowLongW(hwnd, 0, 0); SetWindowLongPtrW(hwnd, 0, 0);
return 0; return 0;
default: default:

View file

@ -112,7 +112,7 @@ typedef struct
#define FLAT_BTN_SPACINGX 8 #define FLAT_BTN_SPACINGX 8
#define DEFAULT_TAB_WIDTH 96 #define DEFAULT_TAB_WIDTH 96
#define TAB_GetInfoPtr(hwnd) ((TAB_INFO *)GetWindowLongA(hwnd,0)) #define TAB_GetInfoPtr(hwnd) ((TAB_INFO *)GetWindowLongPtrW(hwnd,0))
/****************************************************************************** /******************************************************************************
* Hot-tracking timer constants * Hot-tracking timer constants
@ -136,10 +136,10 @@ TAB_SendSimpleNotify (HWND hwnd, UINT code)
NMHDR nmhdr; NMHDR nmhdr;
nmhdr.hwndFrom = hwnd; nmhdr.hwndFrom = hwnd;
nmhdr.idFrom = GetWindowLongA(hwnd, GWL_ID); nmhdr.idFrom = GetWindowLongPtrW(hwnd, GWLP_ID);
nmhdr.code = code; nmhdr.code = code;
return (BOOL) SendMessageA (infoPtr->hwndNotify, WM_NOTIFY, return (BOOL) SendMessageW (infoPtr->hwndNotify, WM_NOTIFY,
(WPARAM) nmhdr.idFrom, (LPARAM) &nmhdr); (WPARAM) nmhdr.idFrom, (LPARAM) &nmhdr);
} }
@ -157,7 +157,7 @@ TAB_RelayEvent (HWND hwndTip, HWND hwndMsg, UINT uMsg,
msg.pt.x = LOWORD(GetMessagePos ()); msg.pt.x = LOWORD(GetMessagePos ());
msg.pt.y = HIWORD(GetMessagePos ()); msg.pt.y = HIWORD(GetMessagePos ());
SendMessageA (hwndTip, TTM_RELAYEVENT, 0, (LPARAM)&msg); SendMessageW (hwndTip, TTM_RELAYEVENT, 0, (LPARAM)&msg);
} }
static void static void
@ -514,7 +514,7 @@ static LRESULT TAB_FocusChanging(
/* /*
* Don't otherwise disturb normal behavior. * Don't otherwise disturb normal behavior.
*/ */
return DefWindowProcA (hwnd, uMsg, wParam, lParam); return DefWindowProcW (hwnd, uMsg, wParam, lParam);
} }
static INT TAB_InternalHitTest ( static INT TAB_InternalHitTest (
@ -917,7 +917,7 @@ static LRESULT TAB_OnHScroll(
TAB_RecalcHotTrack(hwnd, NULL, NULL, NULL); TAB_RecalcHotTrack(hwnd, NULL, NULL, NULL);
TAB_InvalidateTabArea(hwnd, infoPtr); TAB_InvalidateTabArea(hwnd, infoPtr);
SendMessageA(infoPtr->hwndUpDown, UDM_SETPOS, 0, SendMessageW(infoPtr->hwndUpDown, UDM_SETPOS, 0,
MAKELONG(infoPtr->leftmostVisible, 0)); MAKELONG(infoPtr->leftmostVisible, 0));
} }
@ -1033,7 +1033,7 @@ static void TAB_SetupScrolling(
ShowWindow(infoPtr->hwndUpDown, SW_HIDE); ShowWindow(infoPtr->hwndUpDown, SW_HIDE);
} }
if (infoPtr->hwndUpDown) if (infoPtr->hwndUpDown)
SendMessageA(infoPtr->hwndUpDown, UDM_SETRANGE32, 0, maxRange); SendMessageW(infoPtr->hwndUpDown, UDM_SETRANGE32, 0, maxRange);
} }
/****************************************************************************** /******************************************************************************
@ -1051,7 +1051,7 @@ static void TAB_SetItemBounds (HWND hwnd)
TAB_INFO* infoPtr = TAB_GetInfoPtr(hwnd); TAB_INFO* infoPtr = TAB_GetInfoPtr(hwnd);
LONG lStyle = GetWindowLongA(hwnd, GWL_STYLE); LONG lStyle = GetWindowLongA(hwnd, GWL_STYLE);
TEXTMETRICA fontMetrics; TEXTMETRICA fontMetrics;
INT curItem; UINT curItem;
INT curItemLeftPos; INT curItemLeftPos;
INT curItemRowCount; INT curItemRowCount;
HFONT hFont, hOldFont; HFONT hFont, hOldFont;
@ -1243,8 +1243,8 @@ static void TAB_SetItemBounds (HWND hwnd)
/* Arrange all tabs evenly if style says so */ /* Arrange all tabs evenly if style says so */
if (!(lStyle & TCS_RAGGEDRIGHT) && ((lStyle & TCS_MULTILINE) || (lStyle & TCS_VERTICAL)) && (infoPtr->uNumItem > 0)) if (!(lStyle & TCS_RAGGEDRIGHT) && ((lStyle & TCS_MULTILINE) || (lStyle & TCS_VERTICAL)) && (infoPtr->uNumItem > 0))
{ {
INT tabPerRow,remTab; INT tabPerRow,remTab,iRow;
INT iRow,iItm; UINT iItm;
INT iCount=0; INT iCount=0;
/* /*
@ -1637,10 +1637,18 @@ TAB_DrawItemInterior
DRAWITEMSTRUCT dis; DRAWITEMSTRUCT dis;
UINT id; UINT id;
drawRect->top += 2;
drawRect->right -= 1;
if ( iItem == infoPtr->iSelected )
{
drawRect->right -= 1;
drawRect->left += 1;
}
/* /*
* get the control id * get the control id
*/ */
id = GetWindowLongA( hwnd, GWL_ID ); id = (UINT)GetWindowLongPtrW( hwnd, GWLP_ID );
/* /*
* put together the DRAWITEMSTRUCT * put together the DRAWITEMSTRUCT
@ -1663,7 +1671,7 @@ TAB_DrawItemInterior
/* /*
* send the draw message * send the draw message
*/ */
SendMessageA( infoPtr->hwndNotify, WM_DRAWITEM, (WPARAM)id, (LPARAM)&dis ); SendMessageW( infoPtr->hwndNotify, WM_DRAWITEM, (WPARAM)id, (LPARAM)&dis );
} }
else else
{ {
@ -2278,29 +2286,6 @@ TAB_SetRedraw (HWND hwnd, WPARAM wParam)
return 0; return 0;
} }
static LRESULT TAB_EraseBackground(
HWND hwnd,
HDC givenDC)
{
HDC hdc;
RECT clientRect;
HBRUSH brush = CreateSolidBrush(comctl32_color.clrBtnFace);
hdc = givenDC ? givenDC : GetDC(hwnd);
GetClientRect(hwnd, &clientRect);
FillRect(hdc, &clientRect, brush);
if (givenDC==0)
ReleaseDC(hwnd, hdc);
DeleteObject(brush);
return 0;
}
/****************************************************************************** /******************************************************************************
* TAB_EnsureSelectionVisible * TAB_EnsureSelectionVisible
* *
@ -2333,7 +2318,7 @@ static void TAB_EnsureSelectionVisible(
if (newselected != iTargetRow) if (newselected != iTargetRow)
{ {
INT i; UINT i;
if(lStyle & TCS_VERTICAL) if(lStyle & TCS_VERTICAL)
{ {
for (i=0; i < infoPtr->uNumItem; i++) for (i=0; i < infoPtr->uNumItem; i++)
@ -2379,7 +2364,8 @@ static void TAB_EnsureSelectionVisible(
else else
{ {
RECT r; RECT r;
INT width, i; INT width;
UINT i;
/* Calculate the part of the client area that is visible */ /* Calculate the part of the client area that is visible */
GetClientRect(hwnd, &r); GetClientRect(hwnd, &r);
@ -2411,7 +2397,7 @@ static void TAB_EnsureSelectionVisible(
if (infoPtr->leftmostVisible != iOrigLeftmostVisible) if (infoPtr->leftmostVisible != iOrigLeftmostVisible)
TAB_RecalcHotTrack(hwnd, NULL, NULL, NULL); TAB_RecalcHotTrack(hwnd, NULL, NULL, NULL);
SendMessageA(infoPtr->hwndUpDown, UDM_SETPOS, 0, SendMessageW(infoPtr->hwndUpDown, UDM_SETPOS, 0,
MAKELONG(infoPtr->leftmostVisible, 0)); MAKELONG(infoPtr->leftmostVisible, 0));
} }
@ -2494,10 +2480,6 @@ TAB_Paint (HWND hwnd, WPARAM wParam)
TRACE("erase %d, rect=(%ld,%ld)-(%ld,%ld)\n", TRACE("erase %d, rect=(%ld,%ld)-(%ld,%ld)\n",
ps.fErase, ps.fErase,
ps.rcPaint.left,ps.rcPaint.top,ps.rcPaint.right,ps.rcPaint.bottom); ps.rcPaint.left,ps.rcPaint.top,ps.rcPaint.right,ps.rcPaint.bottom);
if (ps.fErase)
TAB_EraseBackground (hwnd, hdc);
} else { } else {
hdc = (HDC)wParam; hdc = (HDC)wParam;
} }
@ -3122,12 +3104,12 @@ TAB_Create (HWND hwnd, WPARAM wParam, LPARAM lParam)
NMTOOLTIPSCREATED nmttc; NMTOOLTIPSCREATED nmttc;
nmttc.hdr.hwndFrom = hwnd; nmttc.hdr.hwndFrom = hwnd;
nmttc.hdr.idFrom = GetWindowLongA(hwnd, GWL_ID); nmttc.hdr.idFrom = GetWindowLongPtrW(hwnd, GWLP_ID);
nmttc.hdr.code = NM_TOOLTIPSCREATED; nmttc.hdr.code = NM_TOOLTIPSCREATED;
nmttc.hwndToolTips = infoPtr->hwndToolTip; nmttc.hwndToolTips = infoPtr->hwndToolTip;
SendMessageA (infoPtr->hwndNotify, WM_NOTIFY, SendMessageW (infoPtr->hwndNotify, WM_NOTIFY,
(WPARAM)GetWindowLongA(hwnd, GWL_ID), (LPARAM)&nmttc); (WPARAM)GetWindowLongPtrW(hwnd, GWLP_ID), (LPARAM)&nmttc);
} }
} }
@ -3165,7 +3147,7 @@ static LRESULT
TAB_Destroy (HWND hwnd, WPARAM wParam, LPARAM lParam) TAB_Destroy (HWND hwnd, WPARAM wParam, LPARAM lParam)
{ {
TAB_INFO *infoPtr = TAB_GetInfoPtr(hwnd); TAB_INFO *infoPtr = TAB_GetInfoPtr(hwnd);
INT iItem; UINT iItem;
if (!infoPtr) if (!infoPtr)
return 0; return 0;
@ -3218,7 +3200,7 @@ TAB_WindowProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
TRACE("hwnd=%p msg=%x wParam=%x lParam=%lx\n", hwnd, uMsg, wParam, lParam); TRACE("hwnd=%p msg=%x wParam=%x lParam=%lx\n", hwnd, uMsg, wParam, lParam);
if (!TAB_GetInfoPtr(hwnd) && (uMsg != WM_CREATE)) if (!TAB_GetInfoPtr(hwnd) && (uMsg != WM_CREATE))
return DefWindowProcA (hwnd, uMsg, wParam, lParam); return DefWindowProcW (hwnd, uMsg, wParam, lParam);
switch (uMsg) switch (uMsg)
{ {
@ -3344,7 +3326,7 @@ TAB_WindowProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
return TAB_LButtonUp (hwnd, wParam, lParam); return TAB_LButtonUp (hwnd, wParam, lParam);
case WM_NOTIFY: case WM_NOTIFY:
return SendMessageA(infoPtr->hwndNotify, WM_NOTIFY, wParam, lParam); return SendMessageW(infoPtr->hwndNotify, WM_NOTIFY, wParam, lParam);
case WM_RBUTTONDOWN: case WM_RBUTTONDOWN:
return TAB_RButtonDown (hwnd, wParam, lParam); return TAB_RButtonDown (hwnd, wParam, lParam);
@ -3352,9 +3334,6 @@ TAB_WindowProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
case WM_MOUSEMOVE: case WM_MOUSEMOVE:
return TAB_MouseMove (hwnd, wParam, lParam); return TAB_MouseMove (hwnd, wParam, lParam);
case WM_ERASEBKGND:
return TAB_EraseBackground (hwnd, (HDC)wParam);
case WM_PAINT: case WM_PAINT:
return TAB_Paint (hwnd, wParam); return TAB_Paint (hwnd, wParam);
@ -3389,7 +3368,7 @@ TAB_WindowProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
if ((uMsg >= WM_USER) && (uMsg < WM_APP)) if ((uMsg >= WM_USER) && (uMsg < WM_APP))
WARN("unknown msg %04x wp=%08x lp=%08lx\n", WARN("unknown msg %04x wp=%08x lp=%08lx\n",
uMsg, wParam, lParam); uMsg, wParam, lParam);
return DefWindowProcA(hwnd, uMsg, wParam, lParam); return DefWindowProcW(hwnd, uMsg, wParam, lParam);
} }
return 0; return 0;
@ -3399,23 +3378,23 @@ TAB_WindowProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
VOID VOID
TAB_Register (void) TAB_Register (void)
{ {
WNDCLASSA wndClass; WNDCLASSW wndClass;
ZeroMemory (&wndClass, sizeof(WNDCLASSA)); ZeroMemory (&wndClass, sizeof(WNDCLASSW));
wndClass.style = CS_GLOBALCLASS | CS_DBLCLKS | CS_HREDRAW | CS_VREDRAW; wndClass.style = CS_GLOBALCLASS | CS_DBLCLKS | CS_HREDRAW | CS_VREDRAW;
wndClass.lpfnWndProc = (WNDPROC)TAB_WindowProc; wndClass.lpfnWndProc = TAB_WindowProc;
wndClass.cbClsExtra = 0; wndClass.cbClsExtra = 0;
wndClass.cbWndExtra = sizeof(TAB_INFO *); wndClass.cbWndExtra = sizeof(TAB_INFO *);
wndClass.hCursor = LoadCursorA (0, (LPSTR)IDC_ARROW); wndClass.hCursor = LoadCursorW (0, (LPWSTR)IDC_ARROW);
wndClass.hbrBackground = NULL; wndClass.hbrBackground = (HBRUSH)(COLOR_BTNFACE+1);
wndClass.lpszClassName = WC_TABCONTROLA; wndClass.lpszClassName = WC_TABCONTROLW;
RegisterClassA (&wndClass); RegisterClassW (&wndClass);
} }
VOID VOID
TAB_Unregister (void) TAB_Unregister (void)
{ {
UnregisterClassA (WC_TABCONTROLA, NULL); UnregisterClassW (WC_TABCONTROLW, NULL);
} }

File diff suppressed because it is too large Load diff

View file

@ -2,6 +2,7 @@
* Tool tip control * Tool tip control
* *
* Copyright 1998, 1999 Eric Kohl * Copyright 1998, 1999 Eric Kohl
* Copyright 2004 Robert Shearman
* *
* This library is free software; you can redistribute it and/or * This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public * modify it under the terms of the GNU Lesser General Public
@ -17,10 +18,26 @@
* License along with this library; if not, write to the Free Software * License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
* *
* This code was audited for completeness against the documented features
* of Comctl32.dll version 6.0 on Sep. 08, 2004, by Robert Shearman.
*
* Unless otherwise noted, we believe this code to be complete, as per
* the specification mentioned above.
* If you discover missing features or bugs please note them below.
*
* TODO: * TODO:
* - Custom draw support. * - Custom draw support.
* - Balloon tips. * - Animation.
* - Messages. * - Links.
* - Messages:
* o TTM_ADJUSTRECT
* o TTM_GETTITLEA
* o TTM_GETTTILEW
* o TTM_POPUP
* - Styles:
* o TTS_NOANIMATE
* o TTS_NOFADE
* o TTS_CLOSE
* *
* Testing: * Testing:
* - Run tests using Waite Group Windows95 API Bible Volume 2. * - Run tests using Waite Group Windows95 API Bible Volume 2.
@ -87,6 +104,8 @@
WINE_DEFAULT_DEBUG_CHANNEL(tooltips); WINE_DEFAULT_DEBUG_CHANNEL(tooltips);
static HICON hTooltipIcons[TTI_ERROR+1];
typedef struct typedef struct
{ {
UINT uFlags; UINT uFlags;
@ -109,6 +128,7 @@ typedef struct
COLORREF clrBk; COLORREF clrBk;
COLORREF clrText; COLORREF clrText;
HFONT hFont; HFONT hFont;
HFONT hTitleFont;
INT xTrackPos; INT xTrackPos;
INT yTrackPos; INT yTrackPos;
INT nMaxTipWidth; INT nMaxTipWidth;
@ -120,6 +140,8 @@ typedef struct
INT nInitialTime; INT nInitialTime;
RECT rcMargin; RECT rcMargin;
BOOL bToolBelow; BOOL bToolBelow;
LPWSTR pszTitle;
HICON hTitleIcon;
TTTOOL_INFO *tools; TTTOOL_INFO *tools;
} TOOLTIPS_INFO; } TOOLTIPS_INFO;
@ -129,7 +151,7 @@ typedef struct
#define ID_TIMERLEAVE 3 /* tool leave timer */ #define ID_TIMERLEAVE 3 /* tool leave timer */
#define TOOLTIPS_GetInfoPtr(hWindow) ((TOOLTIPS_INFO *)GetWindowLongA (hWindow, 0)) #define TOOLTIPS_GetInfoPtr(hWindow) ((TOOLTIPS_INFO *)GetWindowLongPtrW (hWindow, 0))
/* offsets from window edge to start of text */ /* offsets from window edge to start of text */
#define NORMAL_TEXT_MARGIN 2 #define NORMAL_TEXT_MARGIN 2
@ -141,11 +163,44 @@ typedef struct
#define BALLOON_STEMWIDTH 10 #define BALLOON_STEMWIDTH 10
#define BALLOON_STEMINDENT 20 #define BALLOON_STEMINDENT 20
LRESULT CALLBACK #define BALLOON_ICON_TITLE_SPACING 8 /* horizontal spacing between icon and title */
#define BALLOON_TITLE_TEXT_SPACING 8 /* vertical spacing between icon/title and main text */
#define ICON_HEIGHT 16
#define ICON_WIDTH 16
static LRESULT CALLBACK
TOOLTIPS_SubclassProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam, UINT_PTR uId, DWORD_PTR dwRef); TOOLTIPS_SubclassProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam, UINT_PTR uId, DWORD_PTR dwRef);
static VOID inline static UINT_PTR
TOOLTIPS_GetTitleIconIndex(HICON hIcon)
{
UINT i;
for (i = 0; i <= TTI_ERROR; i++)
if (hTooltipIcons[i] == hIcon)
return i;
return (UINT_PTR)hIcon;
}
static void
TOOLTIPS_InitSystemSettings (TOOLTIPS_INFO *infoPtr)
{
NONCLIENTMETRICSW nclm;
infoPtr->clrBk = GetSysColor (COLOR_INFOBK);
infoPtr->clrText = GetSysColor (COLOR_INFOTEXT);
DeleteObject (infoPtr->hFont);
nclm.cbSize = sizeof(nclm);
SystemParametersInfoW (SPI_GETNONCLIENTMETRICS, 0, &nclm, 0);
infoPtr->hFont = CreateFontIndirectW (&nclm.lfStatusFont);
DeleteObject (infoPtr->hTitleFont);
nclm.lfStatusFont.lfWeight = FW_BOLD;
infoPtr->hTitleFont = CreateFontIndirectW (&nclm.lfStatusFont);
}
static void
TOOLTIPS_Refresh (HWND hwnd, HDC hdc) TOOLTIPS_Refresh (HWND hwnd, HDC hdc)
{ {
TOOLTIPS_INFO *infoPtr = TOOLTIPS_GetInfoPtr(hwnd); TOOLTIPS_INFO *infoPtr = TOOLTIPS_GetInfoPtr(hwnd);
@ -165,6 +220,9 @@ TOOLTIPS_Refresh (HWND hwnd, HDC hdc)
hBrush = CreateSolidBrush(infoPtr->clrBk); hBrush = CreateSolidBrush(infoPtr->clrBk);
oldBkMode = SetBkMode (hdc, TRANSPARENT);
SetTextColor (hdc, infoPtr->clrText);
if (dwStyle & TTS_BALLOON) if (dwStyle & TTS_BALLOON)
{ {
/* create a region to store result into */ /* create a region to store result into */
@ -176,13 +234,6 @@ TOOLTIPS_Refresh (HWND hwnd, HDC hdc)
FillRgn(hdc, hRgn, hBrush); FillRgn(hdc, hRgn, hBrush);
DeleteObject(hBrush); DeleteObject(hBrush);
hBrush = NULL; hBrush = NULL;
/* calculate text rectangle */
rc.left += (BALLOON_TEXT_MARGIN + infoPtr->rcMargin.left);
rc.top += (BALLOON_TEXT_MARGIN + infoPtr->rcMargin.top);
rc.right -= (BALLOON_TEXT_MARGIN + infoPtr->rcMargin.right);
rc.bottom -= (BALLOON_TEXT_MARGIN + infoPtr->rcMargin.bottom);
if(infoPtr->bToolBelow) rc.top += BALLOON_STEMHEIGHT;
} }
else else
{ {
@ -190,7 +241,41 @@ TOOLTIPS_Refresh (HWND hwnd, HDC hdc)
FillRect(hdc, &rc, hBrush); FillRect(hdc, &rc, hBrush);
DeleteObject(hBrush); DeleteObject(hBrush);
hBrush = NULL; hBrush = NULL;
}
if ((dwStyle & TTS_BALLOON) || infoPtr->pszTitle)
{
/* calculate text rectangle */
rc.left += (BALLOON_TEXT_MARGIN + infoPtr->rcMargin.left);
rc.top += (BALLOON_TEXT_MARGIN + infoPtr->rcMargin.top);
rc.right -= (BALLOON_TEXT_MARGIN + infoPtr->rcMargin.right);
rc.bottom -= (BALLOON_TEXT_MARGIN + infoPtr->rcMargin.bottom);
if(infoPtr->bToolBelow) rc.top += BALLOON_STEMHEIGHT;
if (infoPtr->pszTitle)
{
RECT rcTitle = {rc.left, rc.top, rc.right, rc.bottom};
int height;
BOOL icon_present;
/* draw icon */
icon_present = infoPtr->hTitleIcon &&
DrawIconEx(hdc, rc.left, rc.top, infoPtr->hTitleIcon,
ICON_WIDTH, ICON_HEIGHT, 0, NULL, DI_NORMAL);
if (icon_present)
rcTitle.left += ICON_WIDTH + BALLOON_ICON_TITLE_SPACING;
rcTitle.bottom = rc.top + ICON_HEIGHT;
/* draw title text */
hOldFont = SelectObject (hdc, infoPtr->hTitleFont);
height = DrawTextW(hdc, infoPtr->pszTitle, -1, &rcTitle, DT_BOTTOM | DT_SINGLELINE | DT_NOPREFIX);
SelectObject (hdc, hOldFont);
rc.top += height + BALLOON_TITLE_TEXT_SPACING;
}
}
else
{
/* calculate text rectangle */ /* calculate text rectangle */
rc.left += (NORMAL_TEXT_MARGIN + infoPtr->rcMargin.left); rc.left += (NORMAL_TEXT_MARGIN + infoPtr->rcMargin.left);
rc.top += (NORMAL_TEXT_MARGIN + infoPtr->rcMargin.top); rc.top += (NORMAL_TEXT_MARGIN + infoPtr->rcMargin.top);
@ -198,12 +283,8 @@ TOOLTIPS_Refresh (HWND hwnd, HDC hdc)
rc.bottom -= (NORMAL_TEXT_MARGIN + infoPtr->rcMargin.bottom); rc.bottom -= (NORMAL_TEXT_MARGIN + infoPtr->rcMargin.bottom);
} }
/* already drawn the background; don't need to draw it again
* when drawing text */
oldBkMode = SetBkMode (hdc, TRANSPARENT);
SetTextColor (hdc, infoPtr->clrText);
hOldFont = SelectObject (hdc, infoPtr->hFont);
/* draw text */ /* draw text */
hOldFont = SelectObject (hdc, infoPtr->hFont);
DrawTextW (hdc, infoPtr->szTipText, -1, &rc, uFlags); DrawTextW (hdc, infoPtr->szTipText, -1, &rc, uFlags);
/* be polite and reset the things we changed in the dc */ /* be polite and reset the things we changed in the dc */
SelectObject (hdc, hOldFont); SelectObject (hdc, hOldFont);
@ -318,12 +399,12 @@ static void TOOLTIPS_GetDispInfoW(HWND hwnd, TOOLTIPS_INFO *infoPtr, TTTOOL_INFO
} }
} }
static VOID static void
TOOLTIPS_GetTipText (HWND hwnd, TOOLTIPS_INFO *infoPtr, INT nTool) TOOLTIPS_GetTipText (HWND hwnd, TOOLTIPS_INFO *infoPtr, INT nTool)
{ {
TTTOOL_INFO *toolPtr = &infoPtr->tools[nTool]; TTTOOL_INFO *toolPtr = &infoPtr->tools[nTool];
if (HIWORD((UINT)toolPtr->lpszText) == 0) { if (HIWORD((UINT)toolPtr->lpszText) == 0 && toolPtr->hinst) {
/* load a resource */ /* load a resource */
TRACE("load res string %p %x\n", TRACE("load res string %p %x\n",
toolPtr->hinst, (int)toolPtr->lpszText); toolPtr->hinst, (int)toolPtr->lpszText);
@ -351,7 +432,7 @@ TOOLTIPS_GetTipText (HWND hwnd, TOOLTIPS_INFO *infoPtr, INT nTool)
} }
static VOID static void
TOOLTIPS_CalcTipSize (HWND hwnd, TOOLTIPS_INFO *infoPtr, LPSIZE lpSize) TOOLTIPS_CalcTipSize (HWND hwnd, TOOLTIPS_INFO *infoPtr, LPSIZE lpSize)
{ {
HDC hdc; HDC hdc;
@ -359,6 +440,7 @@ TOOLTIPS_CalcTipSize (HWND hwnd, TOOLTIPS_INFO *infoPtr, LPSIZE lpSize)
DWORD style = GetWindowLongW(hwnd, GWL_STYLE); DWORD style = GetWindowLongW(hwnd, GWL_STYLE);
UINT uFlags = DT_EXTERNALLEADING | DT_CALCRECT; UINT uFlags = DT_EXTERNALLEADING | DT_CALCRECT;
RECT rc = {0, 0, 0, 0}; RECT rc = {0, 0, 0, 0};
SIZE title = {0, 0};
if (infoPtr->nMaxTipWidth > -1) { if (infoPtr->nMaxTipWidth > -1) {
rc.right = infoPtr->nMaxTipWidth; rc.right = infoPtr->nMaxTipWidth;
@ -369,16 +451,32 @@ TOOLTIPS_CalcTipSize (HWND hwnd, TOOLTIPS_INFO *infoPtr, LPSIZE lpSize)
TRACE("%s\n", debugstr_w(infoPtr->szTipText)); TRACE("%s\n", debugstr_w(infoPtr->szTipText));
hdc = GetDC (hwnd); hdc = GetDC (hwnd);
if (infoPtr->pszTitle)
{
RECT rcTitle = {0, 0, 0, 0};
TRACE("title %s\n", debugstr_w(infoPtr->pszTitle));
if (infoPtr->hTitleIcon)
{
title.cx = ICON_WIDTH;
title.cy = ICON_HEIGHT;
}
if (title.cx != 0) title.cx += BALLOON_ICON_TITLE_SPACING;
hOldFont = SelectObject (hdc, infoPtr->hTitleFont);
DrawTextW(hdc, infoPtr->pszTitle, -1, &rcTitle, DT_SINGLELINE | DT_NOPREFIX | DT_CALCRECT);
SelectObject (hdc, hOldFont);
title.cy = max(title.cy, rcTitle.bottom - rcTitle.top) + BALLOON_TITLE_TEXT_SPACING;
title.cx += (rcTitle.right - rcTitle.left);
}
hOldFont = SelectObject (hdc, infoPtr->hFont); hOldFont = SelectObject (hdc, infoPtr->hFont);
DrawTextW (hdc, infoPtr->szTipText, -1, &rc, uFlags); DrawTextW (hdc, infoPtr->szTipText, -1, &rc, uFlags);
SelectObject (hdc, hOldFont); SelectObject (hdc, hOldFont);
ReleaseDC (hwnd, hdc); ReleaseDC (hwnd, hdc);
if (style & TTS_BALLOON) if ((style & TTS_BALLOON) || infoPtr->pszTitle)
{ {
lpSize->cx = rc.right - rc.left + 2*BALLOON_TEXT_MARGIN + lpSize->cx = max(rc.right - rc.left, title.cx) + 2*BALLOON_TEXT_MARGIN +
infoPtr->rcMargin.left + infoPtr->rcMargin.right; infoPtr->rcMargin.left + infoPtr->rcMargin.right;
lpSize->cy = rc.bottom - rc.top + 2*BALLOON_TEXT_MARGIN + lpSize->cy = title.cy + rc.bottom - rc.top + 2*BALLOON_TEXT_MARGIN +
infoPtr->rcMargin.bottom + infoPtr->rcMargin.top + infoPtr->rcMargin.bottom + infoPtr->rcMargin.top +
BALLOON_STEMHEIGHT; BALLOON_STEMHEIGHT;
} }
@ -392,7 +490,7 @@ TOOLTIPS_CalcTipSize (HWND hwnd, TOOLTIPS_INFO *infoPtr, LPSIZE lpSize)
} }
static VOID static void
TOOLTIPS_Show (HWND hwnd, TOOLTIPS_INFO *infoPtr) TOOLTIPS_Show (HWND hwnd, TOOLTIPS_INFO *infoPtr)
{ {
TTTOOL_INFO *toolPtr; TTTOOL_INFO *toolPtr;
@ -583,7 +681,7 @@ TOOLTIPS_Show (HWND hwnd, TOOLTIPS_INFO *infoPtr)
} }
static VOID static void
TOOLTIPS_Hide (HWND hwnd, TOOLTIPS_INFO *infoPtr) TOOLTIPS_Hide (HWND hwnd, TOOLTIPS_INFO *infoPtr)
{ {
TTTOOL_INFO *toolPtr; TTTOOL_INFO *toolPtr;
@ -610,7 +708,7 @@ TOOLTIPS_Hide (HWND hwnd, TOOLTIPS_INFO *infoPtr)
} }
static VOID static void
TOOLTIPS_TrackShow (HWND hwnd, TOOLTIPS_INFO *infoPtr) TOOLTIPS_TrackShow (HWND hwnd, TOOLTIPS_INFO *infoPtr)
{ {
TTTOOL_INFO *toolPtr; TTTOOL_INFO *toolPtr;
@ -708,7 +806,7 @@ TOOLTIPS_TrackShow (HWND hwnd, TOOLTIPS_INFO *infoPtr)
} }
static VOID static void
TOOLTIPS_TrackHide (HWND hwnd, TOOLTIPS_INFO *infoPtr) TOOLTIPS_TrackHide (HWND hwnd, TOOLTIPS_INFO *infoPtr)
{ {
TTTOOL_INFO *toolPtr; TTTOOL_INFO *toolPtr;
@ -1056,7 +1154,8 @@ TOOLTIPS_AddToolW (HWND hwnd, WPARAM wParam, LPARAM lParam)
} }
static void TOOLTIPS_DelToolCommon (HWND hwnd, TOOLTIPS_INFO *infoPtr, INT nTool) static void
TOOLTIPS_DelToolCommon (HWND hwnd, TOOLTIPS_INFO *infoPtr, INT nTool)
{ {
TTTOOL_INFO *toolPtr; TTTOOL_INFO *toolPtr;
@ -1720,6 +1819,10 @@ TOOLTIPS_RelayEvent (HWND hwnd, WPARAM wParam, LPARAM lParam)
KillTimer(hwnd, ID_TIMERPOP); KillTimer(hwnd, ID_TIMERPOP);
SetTimer(hwnd, ID_TIMERPOP, infoPtr->nAutoPopTime, 0); SetTimer(hwnd, ID_TIMERPOP, infoPtr->nAutoPopTime, 0);
TRACE("timer 2 restarted\n"); TRACE("timer 2 restarted\n");
} else if(infoPtr->nTool != -1 && infoPtr->bActive) {
/* previous show attempt didn't result in tooltip so try again */
SetTimer(hwnd, ID_TIMERSHOW, infoPtr->nInitialTime, 0);
TRACE("timer 1 started!\n");
} }
break; break;
} }
@ -1819,6 +1922,56 @@ TOOLTIPS_SetTipTextColor (HWND hwnd, WPARAM wParam, LPARAM lParam)
} }
static LRESULT
TOOLTIPS_SetTitleA (HWND hwnd, WPARAM wParam, LPARAM lParam)
{
TOOLTIPS_INFO *infoPtr = TOOLTIPS_GetInfoPtr (hwnd);
LPCSTR pszTitle = (LPCSTR)lParam;
UINT uTitleIcon = (UINT)wParam;
UINT size;
TRACE("hwnd = %p, title = %s, icon = %p\n", hwnd, pszTitle, (void*)uTitleIcon);
size = sizeof(WCHAR)*MultiByteToWideChar(CP_ACP, 0, pszTitle, -1, NULL, 0);
infoPtr->pszTitle = Alloc(size);
if (!infoPtr->pszTitle)
return FALSE;
MultiByteToWideChar(CP_ACP, 0, pszTitle, -1, infoPtr->pszTitle, size/sizeof(WCHAR));
if (uTitleIcon <= TTI_ERROR)
infoPtr->hTitleIcon = hTooltipIcons[uTitleIcon];
else
infoPtr->hTitleIcon = CopyIcon((HICON)wParam);
return TRUE;
}
static LRESULT
TOOLTIPS_SetTitleW (HWND hwnd, WPARAM wParam, LPARAM lParam)
{
TOOLTIPS_INFO *infoPtr = TOOLTIPS_GetInfoPtr (hwnd);
LPCWSTR pszTitle = (LPCWSTR)lParam;
UINT uTitleIcon = (UINT)wParam;
UINT size;
TRACE("hwnd = %p, title = %s, icon = %p\n", hwnd, debugstr_w(pszTitle), (void*)uTitleIcon);
size = (strlenW(pszTitle)+1)*sizeof(WCHAR);
infoPtr->pszTitle = Alloc(size);
if (!infoPtr->pszTitle)
return FALSE;
memcpy(infoPtr->pszTitle, pszTitle, size);
if (uTitleIcon <= TTI_ERROR)
infoPtr->hTitleIcon = hTooltipIcons[uTitleIcon];
else
infoPtr->hTitleIcon = CopyIcon((HICON)wParam);
TRACE("icon = %p\n", infoPtr->hTitleIcon);
return TRUE;
}
static LRESULT static LRESULT
TOOLTIPS_SetToolInfoA (HWND hwnd, WPARAM wParam, LPARAM lParam) TOOLTIPS_SetToolInfoA (HWND hwnd, WPARAM wParam, LPARAM lParam)
{ {
@ -1907,7 +2060,7 @@ TOOLTIPS_SetToolInfoW (HWND hwnd, WPARAM wParam, LPARAM lParam)
TRACE("set string id %x!\n", (INT)lpToolInfo->lpszText); TRACE("set string id %x!\n", (INT)lpToolInfo->lpszText);
toolPtr->lpszText = lpToolInfo->lpszText; toolPtr->lpszText = lpToolInfo->lpszText;
} }
else if (lpToolInfo->lpszText) { else {
if (lpToolInfo->lpszText == LPSTR_TEXTCALLBACKW) if (lpToolInfo->lpszText == LPSTR_TEXTCALLBACKW)
toolPtr->lpszText = LPSTR_TEXTCALLBACKW; toolPtr->lpszText = LPSTR_TEXTCALLBACKW;
else { else {
@ -1927,6 +2080,16 @@ TOOLTIPS_SetToolInfoW (HWND hwnd, WPARAM wParam, LPARAM lParam)
if (lpToolInfo->cbSize >= sizeof(TTTOOLINFOW)) if (lpToolInfo->cbSize >= sizeof(TTTOOLINFOW))
toolPtr->lParam = lpToolInfo->lParam; toolPtr->lParam = lpToolInfo->lParam;
if (infoPtr->nCurrentTool == nTool)
{
TOOLTIPS_GetTipText (hwnd, infoPtr, infoPtr->nCurrentTool);
if (infoPtr->szTipText[0] == 0)
TOOLTIPS_Hide(hwnd, infoPtr);
else
TOOLTIPS_Show (hwnd, infoPtr);
}
return 0; return 0;
} }
@ -2120,27 +2283,23 @@ static LRESULT
TOOLTIPS_Create (HWND hwnd, const CREATESTRUCTW *lpcs) TOOLTIPS_Create (HWND hwnd, const CREATESTRUCTW *lpcs)
{ {
TOOLTIPS_INFO *infoPtr; TOOLTIPS_INFO *infoPtr;
NONCLIENTMETRICSA nclm;
/* allocate memory for info structure */ /* allocate memory for info structure */
infoPtr = (TOOLTIPS_INFO *)Alloc (sizeof(TOOLTIPS_INFO)); infoPtr = (TOOLTIPS_INFO *)Alloc (sizeof(TOOLTIPS_INFO));
SetWindowLongA (hwnd, 0, (DWORD)infoPtr); SetWindowLongPtrW (hwnd, 0, (DWORD_PTR)infoPtr);
/* initialize info structure */ /* initialize info structure */
infoPtr->bActive = TRUE; infoPtr->bActive = TRUE;
infoPtr->bTrackActive = FALSE; infoPtr->bTrackActive = FALSE;
infoPtr->clrBk = GetSysColor (COLOR_INFOBK);
infoPtr->clrText = GetSysColor (COLOR_INFOTEXT);
nclm.cbSize = sizeof(NONCLIENTMETRICSA);
SystemParametersInfoA (SPI_GETNONCLIENTMETRICS, 0, &nclm, 0);
infoPtr->hFont = CreateFontIndirectA (&nclm.lfStatusFont);
infoPtr->nMaxTipWidth = -1; infoPtr->nMaxTipWidth = -1;
infoPtr->nTool = -1; infoPtr->nTool = -1;
infoPtr->nCurrentTool = -1; infoPtr->nCurrentTool = -1;
infoPtr->nTrackTool = -1; infoPtr->nTrackTool = -1;
/* initialize colours and fonts */
TOOLTIPS_InitSystemSettings(infoPtr);
TOOLTIPS_SetDelayTime(hwnd, TTDT_AUTOMATIC, 0L); TOOLTIPS_SetDelayTime(hwnd, TTDT_AUTOMATIC, 0L);
SetWindowPos (hwnd, HWND_TOP, 0, 0, 0, 0, SWP_NOZORDER | SWP_HIDEWINDOW | SWP_NOACTIVATE); SetWindowPos (hwnd, HWND_TOP, 0, 0, 0, 0, SWP_NOZORDER | SWP_HIDEWINDOW | SWP_NOACTIVATE);
@ -2154,7 +2313,7 @@ TOOLTIPS_Destroy (HWND hwnd, WPARAM wParam, LPARAM lParam)
{ {
TOOLTIPS_INFO *infoPtr = TOOLTIPS_GetInfoPtr (hwnd); TOOLTIPS_INFO *infoPtr = TOOLTIPS_GetInfoPtr (hwnd);
TTTOOL_INFO *toolPtr; TTTOOL_INFO *toolPtr;
INT i; UINT i;
/* free tools */ /* free tools */
if (infoPtr->tools) { if (infoPtr->tools) {
@ -2182,12 +2341,19 @@ TOOLTIPS_Destroy (HWND hwnd, WPARAM wParam, LPARAM lParam)
Free (infoPtr->tools); Free (infoPtr->tools);
} }
/* delete font */ /* free title string */
Free (infoPtr->pszTitle);
/* free title icon if not a standard one */
if (TOOLTIPS_GetTitleIconIndex(infoPtr->hTitleIcon) > TTI_ERROR)
DeleteObject(infoPtr->hTitleIcon);
/* delete fonts */
DeleteObject (infoPtr->hFont); DeleteObject (infoPtr->hFont);
DeleteObject (infoPtr->hTitleFont);
/* free tool tips info data */ /* free tool tips info data */
Free (infoPtr); Free (infoPtr);
SetWindowLongA(hwnd, 0, 0); SetWindowLongPtrW(hwnd, 0, 0);
return 0; return 0;
} }
@ -2285,9 +2451,13 @@ TOOLTIPS_SetFont (HWND hwnd, WPARAM wParam, LPARAM lParam)
if(!GetObjectW((HFONT)wParam, sizeof(lf), &lf)) if(!GetObjectW((HFONT)wParam, sizeof(lf), &lf))
return 0; return 0;
if(infoPtr->hFont) DeleteObject (infoPtr->hFont); DeleteObject (infoPtr->hFont);
infoPtr->hFont = CreateFontIndirectW(&lf); infoPtr->hFont = CreateFontIndirectW(&lf);
DeleteObject (infoPtr->hTitleFont);
lf.lfWeight = FW_BOLD;
infoPtr->hTitleFont = CreateFontIndirectW(&lf);
if ((LOWORD(lParam)) & (infoPtr->nCurrentTool != -1)) { if ((LOWORD(lParam)) & (infoPtr->nCurrentTool != -1)) {
FIXME("full redraw needed!\n"); FIXME("full redraw needed!\n");
} }
@ -2388,21 +2558,14 @@ static LRESULT
TOOLTIPS_WinIniChange (HWND hwnd, WPARAM wParam, LPARAM lParam) TOOLTIPS_WinIniChange (HWND hwnd, WPARAM wParam, LPARAM lParam)
{ {
TOOLTIPS_INFO *infoPtr = TOOLTIPS_GetInfoPtr (hwnd); TOOLTIPS_INFO *infoPtr = TOOLTIPS_GetInfoPtr (hwnd);
NONCLIENTMETRICSA nclm;
infoPtr->clrBk = GetSysColor (COLOR_INFOBK); TOOLTIPS_InitSystemSettings (infoPtr);
infoPtr->clrText = GetSysColor (COLOR_INFOTEXT);
DeleteObject (infoPtr->hFont);
nclm.cbSize = sizeof(NONCLIENTMETRICSA);
SystemParametersInfoA (SPI_GETNONCLIENTMETRICS, 0, &nclm, 0);
infoPtr->hFont = CreateFontIndirectA (&nclm.lfStatusFont);
return 0; return 0;
} }
LRESULT CALLBACK static LRESULT CALLBACK
TOOLTIPS_SubclassProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam, UINT_PTR uID, DWORD_PTR dwRef) TOOLTIPS_SubclassProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam, UINT_PTR uID, DWORD_PTR dwRef)
{ {
MSG msg; MSG msg;
@ -2530,6 +2693,12 @@ TOOLTIPS_WindowProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
case TTM_SETTIPTEXTCOLOR: case TTM_SETTIPTEXTCOLOR:
return TOOLTIPS_SetTipTextColor (hwnd, wParam, lParam); return TOOLTIPS_SetTipTextColor (hwnd, wParam, lParam);
case TTM_SETTITLEA:
return TOOLTIPS_SetTitleA (hwnd, wParam, lParam);
case TTM_SETTITLEW:
return TOOLTIPS_SetTitleW (hwnd, wParam, lParam);
case TTM_SETTOOLINFOA: case TTM_SETTOOLINFOA:
return TOOLTIPS_SetToolInfoA (hwnd, wParam, lParam); return TOOLTIPS_SetToolInfoA (hwnd, wParam, lParam);
@ -2568,12 +2737,11 @@ TOOLTIPS_WindowProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
case WM_GETFONT: case WM_GETFONT:
return TOOLTIPS_GetFont (hwnd, wParam, lParam); return TOOLTIPS_GetFont (hwnd, wParam, lParam);
case WM_GETTEXT: case WM_GETTEXT:
return TOOLTIPS_OnWMGetText (hwnd, wParam, lParam); return TOOLTIPS_OnWMGetText (hwnd, wParam, lParam);
case WM_GETTEXTLENGTH:
return TOOLTIPS_OnWMGetTextLength (hwnd, wParam, lParam);
case WM_GETTEXTLENGTH:
return TOOLTIPS_OnWMGetTextLength (hwnd, wParam, lParam);
case WM_LBUTTONDOWN: case WM_LBUTTONDOWN:
case WM_LBUTTONUP: case WM_LBUTTONUP:
@ -2630,11 +2798,22 @@ TOOLTIPS_Register (void)
wndClass.lpszClassName = TOOLTIPS_CLASSA; wndClass.lpszClassName = TOOLTIPS_CLASSA;
RegisterClassA (&wndClass); RegisterClassA (&wndClass);
hTooltipIcons[TTI_NONE] = NULL;
hTooltipIcons[TTI_INFO] = LoadImageW(COMCTL32_hModule,
(LPCWSTR)MAKEINTRESOURCE(IDI_TT_INFO_SM), IMAGE_ICON, 0, 0, 0);
hTooltipIcons[TTI_WARNING] = LoadImageW(COMCTL32_hModule,
(LPCWSTR)MAKEINTRESOURCE(IDI_TT_WARN_SM), IMAGE_ICON, 0, 0, 0);
hTooltipIcons[TTI_ERROR] = LoadImageW(COMCTL32_hModule,
(LPCWSTR)MAKEINTRESOURCE(IDI_TT_ERROR_SM), IMAGE_ICON, 0, 0, 0);
} }
VOID VOID
TOOLTIPS_Unregister (void) TOOLTIPS_Unregister (void)
{ {
int i;
for (i = 0; i < TTI_ERROR+1; i++)
DeleteObject(hTooltipIcons[i]);
UnregisterClassA (TOOLTIPS_CLASSA, NULL); UnregisterClassA (TOOLTIPS_CLASSA, NULL);
} }

View file

@ -112,7 +112,7 @@ static LRESULT notify_hdr(TRACKBAR_INFO *infoPtr, INT code, LPNMHDR pnmh)
TRACE("(code=%d)\n", code); TRACE("(code=%d)\n", code);
pnmh->hwndFrom = infoPtr->hwndSelf; pnmh->hwndFrom = infoPtr->hwndSelf;
pnmh->idFrom = GetWindowLongW(infoPtr->hwndSelf, GWL_ID); pnmh->idFrom = GetWindowLongPtrW(infoPtr->hwndSelf, GWLP_ID);
pnmh->code = code; pnmh->code = code;
result = SendMessageW(infoPtr->hwndNotify, WM_NOTIFY, result = SendMessageW(infoPtr->hwndNotify, WM_NOTIFY,
(WPARAM)pnmh->idFrom, (LPARAM)pnmh); (WPARAM)pnmh->idFrom, (LPARAM)pnmh);
@ -563,7 +563,8 @@ TRACKBAR_DrawTic (TRACKBAR_INFO *infoPtr, HDC hdc, LONG ticPos, int flags)
static void static void
TRACKBAR_DrawTics (TRACKBAR_INFO *infoPtr, HDC hdc, DWORD dwStyle) TRACKBAR_DrawTics (TRACKBAR_INFO *infoPtr, HDC hdc, DWORD dwStyle)
{ {
int i, ticFlags = dwStyle & 0x0f; unsigned int i;
int ticFlags = dwStyle & 0x0f;
LOGPEN ticPen = { PS_SOLID, {1, 0}, GetSysColor (COLOR_3DDKSHADOW) }; LOGPEN ticPen = { PS_SOLID, {1, 0}, GetSysColor (COLOR_3DDKSHADOW) };
HPEN hOldPen, hTicPen; HPEN hOldPen, hTicPen;
@ -809,7 +810,7 @@ TRACKBAR_Refresh (TRACKBAR_INFO *infoPtr, HDC hdcDst)
ZeroMemory(&nmcd, sizeof(nmcd)); ZeroMemory(&nmcd, sizeof(nmcd));
nmcd.hdr.hwndFrom = infoPtr->hwndSelf; nmcd.hdr.hwndFrom = infoPtr->hwndSelf;
nmcd.hdr.idFrom = GetWindowLongW (infoPtr->hwndSelf, GWL_ID); nmcd.hdr.idFrom = GetWindowLongPtrW (infoPtr->hwndSelf, GWLP_ID);
nmcd.hdr.code = NM_CUSTOMDRAW; nmcd.hdr.code = NM_CUSTOMDRAW;
nmcd.hdc = hdc; nmcd.hdc = hdc;
@ -1339,7 +1340,7 @@ TRACKBAR_Create (HWND hwnd, LPCREATESTRUCTW lpcs)
infoPtr = (TRACKBAR_INFO *)Alloc (sizeof(TRACKBAR_INFO)); infoPtr = (TRACKBAR_INFO *)Alloc (sizeof(TRACKBAR_INFO));
if (!infoPtr) return -1; if (!infoPtr) return -1;
SetWindowLongW (hwnd, 0, (DWORD)infoPtr); SetWindowLongPtrW (hwnd, 0, (DWORD_PTR)infoPtr);
/* set default values */ /* set default values */
infoPtr->hwndSelf = hwnd; infoPtr->hwndSelf = hwnd;
@ -1401,7 +1402,7 @@ TRACKBAR_Destroy (TRACKBAR_INFO *infoPtr)
DestroyWindow (infoPtr->hwndToolTip); DestroyWindow (infoPtr->hwndToolTip);
Free (infoPtr); Free (infoPtr);
SetWindowLongW (infoPtr->hwndSelf, 0, 0); SetWindowLongPtrW (infoPtr->hwndSelf, 0, 0);
return 0; return 0;
} }
@ -1635,7 +1636,7 @@ TRACKBAR_KeyUp (TRACKBAR_INFO *infoPtr, INT nVirtKey, DWORD lKeyData)
static LRESULT WINAPI static LRESULT WINAPI
TRACKBAR_WindowProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) TRACKBAR_WindowProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{ {
TRACKBAR_INFO *infoPtr = (TRACKBAR_INFO *)GetWindowLongW (hwnd, 0); TRACKBAR_INFO *infoPtr = (TRACKBAR_INFO *)GetWindowLongPtrW (hwnd, 0);
TRACE("hwnd=%p msg=%x wparam=%x lparam=%lx\n", hwnd, uMsg, wParam, lParam); TRACE("hwnd=%p msg=%x wparam=%x lparam=%lx\n", hwnd, uMsg, wParam, lParam);
@ -1815,11 +1816,11 @@ void TRACKBAR_Register (void)
ZeroMemory (&wndClass, sizeof(WNDCLASSW)); ZeroMemory (&wndClass, sizeof(WNDCLASSW));
wndClass.style = CS_GLOBALCLASS; wndClass.style = CS_GLOBALCLASS;
wndClass.lpfnWndProc = (WNDPROC)TRACKBAR_WindowProc; wndClass.lpfnWndProc = TRACKBAR_WindowProc;
wndClass.cbClsExtra = 0; wndClass.cbClsExtra = 0;
wndClass.cbWndExtra = sizeof(TRACKBAR_INFO *); wndClass.cbWndExtra = sizeof(TRACKBAR_INFO *);
wndClass.hCursor = LoadCursorW (0, (LPWSTR)IDC_ARROW); wndClass.hCursor = LoadCursorW (0, (LPWSTR)IDC_ARROW);
wndClass.hbrBackground = (HBRUSH)(COLOR_3DFACE + 1); wndClass.hbrBackground = (HBRUSH)(COLOR_BTNFACE + 1);
wndClass.lpszClassName = TRACKBAR_CLASSW; wndClass.lpszClassName = TRACKBAR_CLASSW;
RegisterClassW (&wndClass); RegisterClassW (&wndClass);

View file

@ -225,7 +225,7 @@ static void TREEVIEW_VerifyTree(TREEVIEW_INFO *infoPtr);
static TREEVIEW_INFO * static TREEVIEW_INFO *
TREEVIEW_GetInfoPtr(HWND hwnd) TREEVIEW_GetInfoPtr(HWND hwnd)
{ {
return (TREEVIEW_INFO *)GetWindowLongW(hwnd, 0); return (TREEVIEW_INFO *)GetWindowLongPtrW(hwnd, 0);
} }
/* Don't call this. Nothing wants an item index. */ /* Don't call this. Nothing wants an item index. */
@ -458,7 +458,7 @@ TREEVIEW_SendSimpleNotify(TREEVIEW_INFO *infoPtr, UINT code)
TRACE("%d\n", code); TRACE("%d\n", code);
nmhdr.hwndFrom = hwnd; nmhdr.hwndFrom = hwnd;
nmhdr.idFrom = GetWindowLongW(hwnd, GWL_ID); nmhdr.idFrom = GetWindowLongPtrW(hwnd, GWLP_ID);
nmhdr.code = get_notifycode(infoPtr, code); nmhdr.code = get_notifycode(infoPtr, code);
return (BOOL)TREEVIEW_SendRealNotify(infoPtr, return (BOOL)TREEVIEW_SendRealNotify(infoPtr,
@ -513,7 +513,7 @@ TREEVIEW_SendTreeviewNotify(TREEVIEW_INFO *infoPtr, UINT code, UINT action,
ZeroMemory(&nmhdr, sizeof(NMTREEVIEWA)); ZeroMemory(&nmhdr, sizeof(NMTREEVIEWA));
nmhdr.hdr.hwndFrom = hwnd; nmhdr.hdr.hwndFrom = hwnd;
nmhdr.hdr.idFrom = GetWindowLongW(hwnd, GWL_ID); nmhdr.hdr.idFrom = GetWindowLongPtrW(hwnd, GWLP_ID);
nmhdr.hdr.code = get_notifycode(infoPtr, code); nmhdr.hdr.code = get_notifycode(infoPtr, code);
nmhdr.action = action; nmhdr.action = action;
@ -547,7 +547,7 @@ TREEVIEW_SendTreeviewDnDNotify(TREEVIEW_INFO *infoPtr, UINT code,
TRACE("code:%d dragitem:%p\n", code, dragItem); TRACE("code:%d dragitem:%p\n", code, dragItem);
nmhdr.hdr.hwndFrom = hwnd; nmhdr.hdr.hwndFrom = hwnd;
nmhdr.hdr.idFrom = GetWindowLongW(hwnd, GWL_ID); nmhdr.hdr.idFrom = GetWindowLongPtrW(hwnd, GWLP_ID);
nmhdr.hdr.code = get_notifycode(infoPtr, code); nmhdr.hdr.code = get_notifycode(infoPtr, code);
nmhdr.action = 0; nmhdr.action = 0;
nmhdr.itemNew.mask = TVIF_STATE | TVIF_PARAM | TVIF_HANDLE; nmhdr.itemNew.mask = TVIF_STATE | TVIF_PARAM | TVIF_HANDLE;
@ -576,7 +576,7 @@ TREEVIEW_SendCustomDrawNotify(TREEVIEW_INFO *infoPtr, DWORD dwDrawStage,
nmcd = &nmcdhdr.nmcd; nmcd = &nmcdhdr.nmcd;
nmcd->hdr.hwndFrom = hwnd; nmcd->hdr.hwndFrom = hwnd;
nmcd->hdr.idFrom = GetWindowLongW(hwnd, GWL_ID); nmcd->hdr.idFrom = GetWindowLongPtrW(hwnd, GWLP_ID);
nmcd->hdr.code = NM_CUSTOMDRAW; nmcd->hdr.code = NM_CUSTOMDRAW;
nmcd->dwDrawStage = dwDrawStage; nmcd->dwDrawStage = dwDrawStage;
nmcd->hdc = hdc; nmcd->hdc = hdc;
@ -620,7 +620,7 @@ TREEVIEW_SendCustomDrawItemNotify(TREEVIEW_INFO *infoPtr, HDC hdc,
nmcd = &nmcdhdr.nmcd; nmcd = &nmcdhdr.nmcd;
nmcd->hdr.hwndFrom = hwnd; nmcd->hdr.hwndFrom = hwnd;
nmcd->hdr.idFrom = GetWindowLongW(hwnd, GWL_ID); nmcd->hdr.idFrom = GetWindowLongPtrW(hwnd, GWLP_ID);
nmcd->hdr.code = NM_CUSTOMDRAW; nmcd->hdr.code = NM_CUSTOMDRAW;
nmcd->dwDrawStage = dwDrawStage; nmcd->dwDrawStage = dwDrawStage;
nmcd->hdc = hdc; nmcd->hdc = hdc;
@ -653,7 +653,7 @@ TREEVIEW_BeginLabelEditNotify(TREEVIEW_INFO *infoPtr, TREEVIEW_ITEM *editItem)
BOOL ret; BOOL ret;
tvdi.hdr.hwndFrom = hwnd; tvdi.hdr.hwndFrom = hwnd;
tvdi.hdr.idFrom = GetWindowLongW(hwnd, GWL_ID); tvdi.hdr.idFrom = GetWindowLongPtrW(hwnd, GWLP_ID);
tvdi.hdr.code = get_notifycode(infoPtr, TVN_BEGINLABELEDITW); tvdi.hdr.code = get_notifycode(infoPtr, TVN_BEGINLABELEDITW);
TREEVIEW_TVItemFromItem(infoPtr, TVIF_HANDLE | TVIF_STATE | TVIF_PARAM | TVIF_TEXT, TREEVIEW_TVItemFromItem(infoPtr, TVIF_HANDLE | TVIF_STATE | TVIF_PARAM | TVIF_TEXT,
@ -680,7 +680,7 @@ TREEVIEW_UpdateDispInfo(TREEVIEW_INFO *infoPtr, TREEVIEW_ITEM *wineItem,
if (mask == 0) return; if (mask == 0) return;
callback.hdr.hwndFrom = hwnd; callback.hdr.hwndFrom = hwnd;
callback.hdr.idFrom = GetWindowLongW(hwnd, GWL_ID); callback.hdr.idFrom = GetWindowLongPtrW(hwnd, GWLP_ID);
callback.hdr.code = get_notifycode(infoPtr, TVN_GETDISPINFOW); callback.hdr.code = get_notifycode(infoPtr, TVN_GETDISPINFOW);
/* 'state' always contains valid value, as well as 'lParam'. /* 'state' always contains valid value, as well as 'lParam'.
@ -3463,7 +3463,7 @@ TREEVIEW_EditLabel(TREEVIEW_INFO *infoPtr, HTREEITEM hItem)
HWND hwndEdit; HWND hwndEdit;
SIZE sz; SIZE sz;
TREEVIEW_ITEM *editItem = hItem; TREEVIEW_ITEM *editItem = hItem;
HINSTANCE hinst = (HINSTANCE)GetWindowLongW(hwnd, GWL_HINSTANCE); HINSTANCE hinst = (HINSTANCE)GetWindowLongPtrW(hwnd, GWLP_HINSTANCE);
HDC hdc; HDC hdc;
HFONT hOldFont=0; HFONT hOldFont=0;
TEXTMETRICW textMetric; TEXTMETRICW textMetric;
@ -3530,8 +3530,8 @@ TREEVIEW_EditLabel(TREEVIEW_INFO *infoPtr, HTREEITEM hItem)
SendMessageW(hwndEdit, WM_SETFONT, SendMessageW(hwndEdit, WM_SETFONT,
(WPARAM)TREEVIEW_FontForItem(infoPtr, editItem), FALSE); (WPARAM)TREEVIEW_FontForItem(infoPtr, editItem), FALSE);
infoPtr->wpEditOrig = (WNDPROC)SetWindowLongW(hwndEdit, GWL_WNDPROC, infoPtr->wpEditOrig = (WNDPROC)SetWindowLongPtrW(hwndEdit, GWLP_WNDPROC,
(DWORD) (DWORD_PTR)
TREEVIEW_Edit_SubclassProc); TREEVIEW_Edit_SubclassProc);
if (TREEVIEW_BeginLabelEditNotify(infoPtr, editItem)) if (TREEVIEW_BeginLabelEditNotify(infoPtr, editItem))
@ -3566,7 +3566,7 @@ TREEVIEW_EndEditLabelNow(TREEVIEW_INFO *infoPtr, BOOL bCancel)
return FALSE; return FALSE;
tvdi.hdr.hwndFrom = hwnd; tvdi.hdr.hwndFrom = hwnd;
tvdi.hdr.idFrom = GetWindowLongW(hwnd, GWL_ID); tvdi.hdr.idFrom = GetWindowLongPtrW(hwnd, GWLP_ID);
tvdi.hdr.code = get_notifycode(infoPtr, TVN_ENDLABELEDITW); tvdi.hdr.code = get_notifycode(infoPtr, TVN_ENDLABELEDITW);
tvdi.item.mask = 0; tvdi.item.mask = 0;
tvdi.item.hItem = editedItem; tvdi.item.hItem = editedItem;
@ -4190,7 +4190,7 @@ static INT TREEVIEW_ProcessLetterKeys(
if (!hwnd || !charCode || !keyData) if (!hwnd || !charCode || !keyData)
return 0; return 0;
infoPtr=(TREEVIEW_INFO*)GetWindowLongW(hwnd, 0); infoPtr=(TREEVIEW_INFO*)GetWindowLongPtrW(hwnd, 0);
if (!infoPtr) if (!infoPtr)
return 0; return 0;
@ -4436,8 +4436,7 @@ TREEVIEW_SetFirstVisible(TREEVIEW_INFO *infoPtr,
SetScrollPos(infoPtr->hwnd, SB_VERT, SetScrollPos(infoPtr->hwnd, SB_VERT,
newFirstVisible->visibleOrder, TRUE); newFirstVisible->visibleOrder, TRUE);
ScrollWindow(infoPtr->hwnd, 0, scroll, NULL, NULL); ScrollWindowEx(infoPtr->hwnd, 0, scroll, NULL, NULL, NULL, NULL, SW_ERASE | SW_INVALIDATE);
UpdateWindow(infoPtr->hwnd);
} }
} }
} }
@ -4634,6 +4633,7 @@ TREEVIEW_MouseWheel(TREEVIEW_INFO *infoPtr, WPARAM wParam)
static LRESULT static LRESULT
TREEVIEW_Create(HWND hwnd, const CREATESTRUCTW *lpcs) TREEVIEW_Create(HWND hwnd, const CREATESTRUCTW *lpcs)
{ {
static const WCHAR szDisplayW[] = { 'D','I','S','P','L','A','Y','\0' };
RECT rcClient; RECT rcClient;
TREEVIEW_INFO *infoPtr; TREEVIEW_INFO *infoPtr;
@ -4647,7 +4647,7 @@ TREEVIEW_Create(HWND hwnd, const CREATESTRUCTW *lpcs)
return 0; return 0;
} }
SetWindowLongW(hwnd, 0, (DWORD)infoPtr); SetWindowLongPtrW(hwnd, 0, (DWORD_PTR)infoPtr);
infoPtr->hwnd = hwnd; infoPtr->hwnd = hwnd;
infoPtr->dwStyle = GetWindowLongW(hwnd, GWL_STYLE); infoPtr->dwStyle = GetWindowLongW(hwnd, GWL_STYLE);
@ -4737,7 +4737,7 @@ TREEVIEW_Create(HWND hwnd, const CREATESTRUCTW *lpcs)
infoPtr->himlState = infoPtr->himlState =
ImageList_Create(16, 16, ILC_COLOR | ILC_MASK, 3, 0); ImageList_Create(16, 16, ILC_COLOR | ILC_MASK, 3, 0);
hdcScreen = CreateDCA("DISPLAY", NULL, NULL, NULL); hdcScreen = CreateDCW(szDisplayW, NULL, NULL, NULL);
/* Create a coloured bitmap compatible with the screen depth /* Create a coloured bitmap compatible with the screen depth
because checkboxes are not black&white */ because checkboxes are not black&white */
@ -4785,11 +4785,11 @@ TREEVIEW_Destroy(TREEVIEW_INFO *infoPtr)
/* Restore original wndproc */ /* Restore original wndproc */
if (infoPtr->hwndEdit) if (infoPtr->hwndEdit)
SetWindowLongW(infoPtr->hwndEdit, GWL_WNDPROC, SetWindowLongPtrW(infoPtr->hwndEdit, GWLP_WNDPROC,
(LONG)infoPtr->wpEditOrig); (DWORD_PTR)infoPtr->wpEditOrig);
/* Deassociate treeview from the window before doing anything drastic. */ /* Deassociate treeview from the window before doing anything drastic. */
SetWindowLongW(infoPtr->hwnd, 0, (LONG)NULL); SetWindowLongPtrW(infoPtr->hwnd, 0, (DWORD_PTR)NULL);
DeleteObject(infoPtr->hBoldFont); DeleteObject(infoPtr->hBoldFont);
Free(infoPtr); Free(infoPtr);

View file

@ -95,7 +95,7 @@ typedef struct
#define BUDDY_UPDOWN_HWND "buddyUpDownHWND" #define BUDDY_UPDOWN_HWND "buddyUpDownHWND"
#define BUDDY_SUPERCLASS_WNDPROC "buddySupperClassWndProc" #define BUDDY_SUPERCLASS_WNDPROC "buddySupperClassWndProc"
#define UPDOWN_GetInfoPtr(hwnd) ((UPDOWN_INFO *)GetWindowLongA (hwnd,0)) #define UPDOWN_GetInfoPtr(hwnd) ((UPDOWN_INFO *)GetWindowLongPtrW (hwnd,0))
#define COUNT_OF(a) (sizeof(a)/sizeof(a[0])) #define COUNT_OF(a) (sizeof(a)/sizeof(a[0]))
static void UPDOWN_DoAction (UPDOWN_INFO *infoPtr, int delta, int action); static void UPDOWN_DoAction (UPDOWN_INFO *infoPtr, int delta, int action);
@ -491,7 +491,7 @@ static HWND UPDOWN_SetBuddy (UPDOWN_INFO* infoPtr, HWND bud)
when we reset the upDown ctrl buddy to another buddy because it is not when we reset the upDown ctrl buddy to another buddy because it is not
good to break the window proc chain. */ good to break the window proc chain. */
if (!GetPropA(bud, BUDDY_SUPERCLASS_WNDPROC)) { if (!GetPropA(bud, BUDDY_SUPERCLASS_WNDPROC)) {
baseWndProc = (WNDPROC)SetWindowLongW(bud, GWL_WNDPROC, (LPARAM)UPDOWN_Buddy_SubclassProc); baseWndProc = (WNDPROC)SetWindowLongPtrW(bud, GWLP_WNDPROC, (LPARAM)UPDOWN_Buddy_SubclassProc);
SetPropA(bud, BUDDY_SUPERCLASS_WNDPROC, (HANDLE)baseWndProc); SetPropA(bud, BUDDY_SUPERCLASS_WNDPROC, (HANDLE)baseWndProc);
} }
} }
@ -572,7 +572,7 @@ static void UPDOWN_DoAction (UPDOWN_INFO *infoPtr, int delta, int action)
ni.iPos = infoPtr->CurVal; ni.iPos = infoPtr->CurVal;
ni.iDelta = delta; ni.iDelta = delta;
ni.hdr.hwndFrom = infoPtr->Self; ni.hdr.hwndFrom = infoPtr->Self;
ni.hdr.idFrom = GetWindowLongW (infoPtr->Self, GWL_ID); ni.hdr.idFrom = GetWindowLongPtrW (infoPtr->Self, GWLP_ID);
ni.hdr.code = UDN_DELTAPOS; ni.hdr.code = UDN_DELTAPOS;
if (!SendMessageW(infoPtr->Notify, WM_NOTIFY, (WPARAM)ni.hdr.idFrom, (LPARAM)&ni)) { if (!SendMessageW(infoPtr->Notify, WM_NOTIFY, (WPARAM)ni.hdr.idFrom, (LPARAM)&ni)) {
/* Parent said: OK to adjust */ /* Parent said: OK to adjust */
@ -623,7 +623,7 @@ static BOOL UPDOWN_CancelMode (UPDOWN_INFO *infoPtr)
if (GetCapture() == infoPtr->Self) { if (GetCapture() == infoPtr->Self) {
NMHDR hdr; NMHDR hdr;
hdr.hwndFrom = infoPtr->Self; hdr.hwndFrom = infoPtr->Self;
hdr.idFrom = GetWindowLongW (infoPtr->Self, GWL_ID); hdr.idFrom = GetWindowLongPtrW (infoPtr->Self, GWLP_ID);
hdr.code = NM_RELEASEDCAPTURE; hdr.code = NM_RELEASEDCAPTURE;
SendMessageW(infoPtr->Notify, WM_NOTIFY, hdr.idFrom, (LPARAM)&hdr); SendMessageW(infoPtr->Notify, WM_NOTIFY, hdr.idFrom, (LPARAM)&hdr);
ReleaseCapture(); ReleaseCapture();
@ -725,7 +725,7 @@ static LRESULT WINAPI UpDownWindowProc(HWND hwnd, UINT message, WPARAM wParam,
case WM_CREATE: case WM_CREATE:
SetWindowLongW (hwnd, GWL_STYLE, dwStyle & ~WS_BORDER); SetWindowLongW (hwnd, GWL_STYLE, dwStyle & ~WS_BORDER);
infoPtr = (UPDOWN_INFO*)Alloc (sizeof(UPDOWN_INFO)); infoPtr = (UPDOWN_INFO*)Alloc (sizeof(UPDOWN_INFO));
SetWindowLongW (hwnd, 0, (DWORD)infoPtr); SetWindowLongPtrW (hwnd, 0, (DWORD_PTR)infoPtr);
/* initialize the info struct */ /* initialize the info struct */
infoPtr->Self = hwnd; infoPtr->Self = hwnd;
@ -753,7 +753,7 @@ static LRESULT WINAPI UpDownWindowProc(HWND hwnd, UINT message, WPARAM wParam,
if(infoPtr->Buddy) RemovePropA(infoPtr->Buddy, BUDDY_UPDOWN_HWND); if(infoPtr->Buddy) RemovePropA(infoPtr->Buddy, BUDDY_UPDOWN_HWND);
Free (infoPtr); Free (infoPtr);
SetWindowLongW (hwnd, 0, 0); SetWindowLongPtrW (hwnd, 0, 0);
TRACE("UpDown Ctrl destruction, hwnd=%p\n", hwnd); TRACE("UpDown Ctrl destruction, hwnd=%p\n", hwnd);
break; break;
@ -958,11 +958,11 @@ void UPDOWN_Register(void)
ZeroMemory( &wndClass, sizeof( WNDCLASSW ) ); ZeroMemory( &wndClass, sizeof( WNDCLASSW ) );
wndClass.style = CS_GLOBALCLASS | CS_VREDRAW | CS_HREDRAW; wndClass.style = CS_GLOBALCLASS | CS_VREDRAW | CS_HREDRAW;
wndClass.lpfnWndProc = (WNDPROC)UpDownWindowProc; wndClass.lpfnWndProc = UpDownWindowProc;
wndClass.cbClsExtra = 0; wndClass.cbClsExtra = 0;
wndClass.cbWndExtra = sizeof(UPDOWN_INFO*); wndClass.cbWndExtra = sizeof(UPDOWN_INFO*);
wndClass.hCursor = LoadCursorW( 0, (LPWSTR)IDC_ARROW ); wndClass.hCursor = LoadCursorW( 0, (LPWSTR)IDC_ARROW );
wndClass.hbrBackground = (HBRUSH)(COLOR_3DFACE + 1); wndClass.hbrBackground = (HBRUSH)(COLOR_BTNFACE + 1);
wndClass.lpszClassName = UPDOWN_CLASSW; wndClass.lpszClassName = UPDOWN_CLASSW;
RegisterClassW( &wndClass ); RegisterClassW( &wndClass );