mirror of
https://github.com/reactos/reactos.git
synced 2024-07-01 02:10:07 +00:00
[COMCTL32]
* Sync with Wine 1.7.1. svn path=/trunk/; revision=60117
This commit is contained in:
parent
18cfc3961c
commit
1db9e9e88a
|
@ -48,21 +48,12 @@ list(APPEND SOURCE
|
|||
treeview.c
|
||||
updown.c
|
||||
stubs.c
|
||||
rsrc.rc
|
||||
${CMAKE_CURRENT_BINARY_DIR}/comctl32.def)
|
||||
|
||||
add_library(comctl32 SHARED ${SOURCE})
|
||||
add_library(comctl32 SHARED ${SOURCE} rsrc.rc)
|
||||
set_module_type(comctl32 win32dll UNICODE)
|
||||
target_link_libraries(comctl32 uuid wine ${PSEH_LIB})
|
||||
add_delay_importlibs(comctl32 winmm uxtheme)
|
||||
|
||||
add_importlibs(comctl32
|
||||
user32
|
||||
gdi32
|
||||
advapi32
|
||||
msvcrt
|
||||
kernel32
|
||||
ntdll)
|
||||
|
||||
add_importlibs(comctl32 user32 gdi32 advapi32 msvcrt kernel32 ntdll)
|
||||
add_pch(comctl32 comctl32.h)
|
||||
add_cd_file(TARGET comctl32 DESTINATION reactos/system32 FOR all)
|
||||
|
|
|
@ -75,7 +75,7 @@ typedef struct
|
|||
INT nb_items; /* Number of items */
|
||||
BOOL unicode; /* TRUE if this window is Unicode */
|
||||
BOOL NtfUnicode; /* TRUE if parent wants notify in Unicode */
|
||||
CBE_ITEMDATA *edit; /* item data for edit item */
|
||||
CBE_ITEMDATA edit; /* item data for edit item */
|
||||
CBE_ITEMDATA *items; /* Array of items */
|
||||
} COMBOEX_INFO;
|
||||
|
||||
|
@ -273,9 +273,9 @@ static void COMBOEX_NotifyDragBegin(const COMBOEX_INFO *infoPtr, LPCWSTR wstr)
|
|||
static void COMBOEX_FreeText (CBE_ITEMDATA *item)
|
||||
{
|
||||
if (is_textW(item->pszText)) Free(item->pszText);
|
||||
item->pszText = 0;
|
||||
item->pszText = NULL;
|
||||
Free(item->pszTemp);
|
||||
item->pszTemp = 0;
|
||||
item->pszTemp = NULL;
|
||||
}
|
||||
|
||||
|
||||
|
@ -455,15 +455,15 @@ static void COMBOEX_SetEditText (const COMBOEX_INFO *infoPtr, CBE_ITEMDATA *item
|
|||
}
|
||||
|
||||
|
||||
static CBE_ITEMDATA * COMBOEX_FindItem(const COMBOEX_INFO *infoPtr, INT_PTR index)
|
||||
static CBE_ITEMDATA *COMBOEX_FindItem(COMBOEX_INFO *infoPtr, INT_PTR index)
|
||||
{
|
||||
CBE_ITEMDATA *item;
|
||||
INT i;
|
||||
|
||||
if ((index >= infoPtr->nb_items) || (index < -1))
|
||||
return 0;
|
||||
return NULL;
|
||||
if (index == -1)
|
||||
return infoPtr->edit;
|
||||
return &infoPtr->edit;
|
||||
item = infoPtr->items;
|
||||
i = infoPtr->nb_items - 1;
|
||||
|
||||
|
@ -481,7 +481,7 @@ static CBE_ITEMDATA * COMBOEX_FindItem(const COMBOEX_INFO *infoPtr, INT_PTR inde
|
|||
|
||||
/* *** CBEM_xxx message support *** */
|
||||
|
||||
static UINT COMBOEX_GetListboxText(const COMBOEX_INFO *infoPtr, INT_PTR n, LPWSTR buf)
|
||||
static UINT COMBOEX_GetListboxText(COMBOEX_INFO *infoPtr, INT_PTR n, LPWSTR buf)
|
||||
{
|
||||
CBE_ITEMDATA *item;
|
||||
LPCWSTR str;
|
||||
|
@ -519,7 +519,7 @@ static UINT COMBOEX_GetListboxText(const COMBOEX_INFO *infoPtr, INT_PTR n, LPWST
|
|||
}
|
||||
|
||||
|
||||
static INT COMBOEX_DeleteItem (const COMBOEX_INFO *infoPtr, INT_PTR index)
|
||||
static INT COMBOEX_DeleteItem (COMBOEX_INFO *infoPtr, INT_PTR index)
|
||||
{
|
||||
TRACE("(index=%ld)\n", index);
|
||||
|
||||
|
@ -534,7 +534,7 @@ static INT COMBOEX_DeleteItem (const COMBOEX_INFO *infoPtr, INT_PTR index)
|
|||
}
|
||||
|
||||
|
||||
static BOOL COMBOEX_GetItemW (const COMBOEX_INFO *infoPtr, COMBOBOXEXITEMW *cit)
|
||||
static BOOL COMBOEX_GetItemW (COMBOEX_INFO *infoPtr, COMBOBOXEXITEMW *cit)
|
||||
{
|
||||
INT_PTR index = cit->iItem;
|
||||
CBE_ITEMDATA *item;
|
||||
|
@ -555,7 +555,7 @@ static BOOL COMBOEX_GetItemW (const COMBOEX_INFO *infoPtr, COMBOBOXEXITEMW *cit)
|
|||
}
|
||||
|
||||
|
||||
static BOOL COMBOEX_GetItemA (const COMBOEX_INFO *infoPtr, COMBOBOXEXITEMA *cit)
|
||||
static BOOL COMBOEX_GetItemA (COMBOEX_INFO *infoPtr, COMBOBOXEXITEMA *cit)
|
||||
{
|
||||
COMBOBOXEXITEMW tmpcit;
|
||||
|
||||
|
@ -754,7 +754,7 @@ static HIMAGELIST COMBOEX_SetImageList (COMBOEX_INFO *infoPtr, HIMAGELIST himl)
|
|||
return himlTemp;
|
||||
}
|
||||
|
||||
static BOOL COMBOEX_SetItemW (const COMBOEX_INFO *infoPtr, const COMBOBOXEXITEMW *cit)
|
||||
static BOOL COMBOEX_SetItemW (COMBOEX_INFO *infoPtr, const COMBOBOXEXITEMW *cit)
|
||||
{
|
||||
INT_PTR index = cit->iItem;
|
||||
CBE_ITEMDATA *item;
|
||||
|
@ -805,7 +805,7 @@ static BOOL COMBOEX_SetItemW (const COMBOEX_INFO *infoPtr, const COMBOBOXEXITEMW
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
static BOOL COMBOEX_SetItemA (const COMBOEX_INFO *infoPtr, COMBOBOXEXITEMA const *cit)
|
||||
static BOOL COMBOEX_SetItemA (COMBOEX_INFO *infoPtr, COMBOBOXEXITEMA const *cit)
|
||||
{
|
||||
COMBOBOXEXITEMW citW;
|
||||
LPWSTR wstr = NULL;
|
||||
|
@ -863,7 +863,7 @@ COMBOEX_FindStringExact (const COMBOEX_INFO *infoPtr, INT start, LPCWSTR str)
|
|||
}
|
||||
|
||||
|
||||
static DWORD_PTR COMBOEX_GetItemData (const COMBOEX_INFO *infoPtr, INT_PTR index)
|
||||
static DWORD_PTR COMBOEX_GetItemData (COMBOEX_INFO *infoPtr, INT_PTR index)
|
||||
{
|
||||
CBE_ITEMDATA const *item1;
|
||||
CBE_ITEMDATA const *item2;
|
||||
|
@ -903,7 +903,7 @@ static INT COMBOEX_SetCursel (COMBOEX_INFO *infoPtr, INT_PTR index)
|
|||
}
|
||||
|
||||
|
||||
static DWORD_PTR COMBOEX_SetItemData (const COMBOEX_INFO *infoPtr, INT_PTR index, DWORD_PTR data)
|
||||
static DWORD_PTR COMBOEX_SetItemData (COMBOEX_INFO *infoPtr, INT_PTR index, DWORD_PTR data)
|
||||
{
|
||||
CBE_ITEMDATA *item1;
|
||||
CBE_ITEMDATA const *item2;
|
||||
|
@ -1003,24 +1003,14 @@ static LRESULT COMBOEX_Create (HWND hwnd, CREATESTRUCTA const *cs)
|
|||
/* (allow space for the icons). */
|
||||
|
||||
infoPtr->hwndCombo = CreateWindowW (WC_COMBOBOXW, NIL,
|
||||
/* following line added to match native */
|
||||
WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_VSCROLL |
|
||||
CBS_NOINTEGRALHEIGHT | CBS_DROPDOWNLIST |
|
||||
/* was base and is necessary */
|
||||
WS_CHILD | WS_VISIBLE | CBS_OWNERDRAWFIXED |
|
||||
GetWindowLongW (hwnd, GWL_STYLE),
|
||||
cs->y, cs->x, cs->cx, cs->cy, hwnd,
|
||||
(HMENU) GetWindowLongPtrW (hwnd, GWLP_ID),
|
||||
(HINSTANCE)GetWindowLongPtrW (hwnd, GWLP_HINSTANCE), NULL);
|
||||
|
||||
/*
|
||||
* native does the following at this point according to trace:
|
||||
* GetWindowThreadProcessId(hwndCombo,0)
|
||||
* GetCurrentThreadId()
|
||||
* GetWindowThreadProcessId(hwndCombo, &???)
|
||||
* GetCurrentProcessId()
|
||||
*/
|
||||
|
||||
SetWindowSubclass(infoPtr->hwndCombo, COMBOEX_ComboWndProc, COMBO_SUBCLASSID,
|
||||
(DWORD_PTR)hwnd);
|
||||
infoPtr->font = (HFONT)SendMessageW (infoPtr->hwndCombo, WM_GETFONT, 0, 0);
|
||||
|
@ -1037,12 +1027,6 @@ static LRESULT COMBOEX_Create (HWND hwnd, CREATESTRUCTA const *cs)
|
|||
(HMENU) GetWindowLongPtrW (hwnd, GWLP_ID),
|
||||
(HINSTANCE)GetWindowLongPtrW (hwnd, GWLP_HINSTANCE), NULL);
|
||||
|
||||
/* native does the following at this point according to trace:
|
||||
* GetWindowThreadProcessId(hwndEdit,0)
|
||||
* GetCurrentThreadId()
|
||||
* GetWindowThreadProcessId(hwndEdit, &???)
|
||||
* GetCurrentProcessId()
|
||||
*/
|
||||
SetWindowSubclass(infoPtr->hwndEdit, COMBOEX_EditWndProc, EDIT_SUBCLASSID,
|
||||
(DWORD_PTR)hwnd);
|
||||
|
||||
|
@ -1090,16 +1074,6 @@ static LRESULT COMBOEX_Create (HWND hwnd, CREATESTRUCTA const *cs)
|
|||
|
||||
COMBOEX_AdjustEditPos (infoPtr);
|
||||
|
||||
/*
|
||||
* Create an item structure to represent the data in the
|
||||
* EDIT control. It is allocated zero-filled.
|
||||
*/
|
||||
infoPtr->edit = Alloc (sizeof (CBE_ITEMDATA));
|
||||
if (!infoPtr->edit) {
|
||||
COMBOEX_Destroy(infoPtr);
|
||||
return -1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -1127,19 +1101,6 @@ static LRESULT COMBOEX_Command (COMBOEX_INFO *infoPtr, WPARAM wParam)
|
|||
return SendMessageW (parent, WM_COMMAND, wParam, (LPARAM)infoPtr->hwndSelf);
|
||||
case CBN_CLOSEUP:
|
||||
SendMessageW (parent, WM_COMMAND, wParam, (LPARAM)infoPtr->hwndSelf);
|
||||
/*
|
||||
* from native trace of first dropdown after typing in URL in IE4
|
||||
* CB_GETCURSEL(Combo)
|
||||
* GetWindowText(Edit)
|
||||
* CB_GETCURSEL(Combo)
|
||||
* CB_GETCOUNT(Combo)
|
||||
* CB_GETITEMDATA(Combo, n)
|
||||
* WM_NOTIFY(parent, CBEN_ENDEDITA|W)
|
||||
* CB_GETCURSEL(Combo)
|
||||
* CB_SETCURSEL(COMBOEX, n)
|
||||
* SetFocus(Combo)
|
||||
* the rest is supposition
|
||||
*/
|
||||
ShowWindow (infoPtr->hwndEdit, SW_SHOW);
|
||||
InvalidateRect (infoPtr->hwndCombo, 0, TRUE);
|
||||
if (infoPtr->hwndEdit) InvalidateRect (infoPtr->hwndEdit, 0, TRUE);
|
||||
|
@ -1225,17 +1186,6 @@ static LRESULT COMBOEX_Command (COMBOEX_INFO *infoPtr, WPARAM wParam)
|
|||
return SendMessageW (parent, WM_COMMAND, wParam, (LPARAM)infoPtr->hwndSelf);
|
||||
|
||||
case CBN_KILLFOCUS:
|
||||
/*
|
||||
* from native trace:
|
||||
*
|
||||
* pass to parent
|
||||
* WM_GETTEXT(Edit, 104)
|
||||
* CB_GETCURSEL(Combo) rets -1
|
||||
* WM_NOTIFY(CBEN_ENDEDITA) with CBENF_KILLFOCUS
|
||||
* CB_GETCURSEL(Combo)
|
||||
* InvalidateRect(Combo, 0, 0)
|
||||
* return 0
|
||||
*/
|
||||
SendMessageW (parent, WM_COMMAND, wParam, (LPARAM)infoPtr->hwndSelf);
|
||||
if (infoPtr->flags & WCBE_ACTEDIT) {
|
||||
GetWindowTextW (infoPtr->hwndEdit, wintext, 260);
|
||||
|
@ -1316,17 +1266,17 @@ static BOOL COMBOEX_WM_DeleteItem (COMBOEX_INFO *infoPtr, DELETEITEMSTRUCT const
|
|||
}
|
||||
|
||||
|
||||
static LRESULT COMBOEX_DrawItem (const COMBOEX_INFO *infoPtr, DRAWITEMSTRUCT const *dis)
|
||||
static LRESULT COMBOEX_DrawItem (COMBOEX_INFO *infoPtr, DRAWITEMSTRUCT const *dis)
|
||||
{
|
||||
static const WCHAR nil[] = { 0 };
|
||||
CBE_ITEMDATA *item = 0;
|
||||
CBE_ITEMDATA *item = NULL;
|
||||
SIZE txtsize;
|
||||
RECT rect;
|
||||
LPCWSTR str = nil;
|
||||
UINT xbase, x, y;
|
||||
INT len;
|
||||
COLORREF nbkc, ntxc, bkc, txc;
|
||||
int drawimage, drawstate, xioff;
|
||||
int drawimage, drawstate, xioff, selected;
|
||||
|
||||
TRACE("DRAWITEMSTRUCT: CtlType=0x%08x CtlID=0x%08x\n",
|
||||
dis->CtlType, dis->CtlID);
|
||||
|
@ -1378,7 +1328,7 @@ static LRESULT COMBOEX_DrawItem (const COMBOEX_INFO *infoPtr, DRAWITEMSTRUCT con
|
|||
|
||||
/* If draw item is -1 (edit control) setup the item pointer */
|
||||
if (dis->itemID == 0xffffffff) {
|
||||
item = infoPtr->edit;
|
||||
item = &infoPtr->edit;
|
||||
|
||||
if (infoPtr->hwndEdit) {
|
||||
/* free previous text of edit item */
|
||||
|
@ -1427,36 +1377,30 @@ static LRESULT COMBOEX_DrawItem (const COMBOEX_INFO *infoPtr, DRAWITEMSTRUCT con
|
|||
|
||||
drawimage = -2;
|
||||
drawstate = ILD_NORMAL;
|
||||
selected = infoPtr->selected == dis->itemID;
|
||||
|
||||
if (item->mask & CBEIF_IMAGE)
|
||||
drawimage = item->iImage;
|
||||
if (item->mask & CBEIF_SELECTEDIMAGE && selected)
|
||||
drawimage = item->iSelectedImage;
|
||||
if (dis->itemState & ODS_COMBOEXLBOX) {
|
||||
/* drawing listbox entry */
|
||||
if (dis->itemState & ODS_SELECTED) {
|
||||
if (item->mask & CBEIF_SELECTEDIMAGE)
|
||||
drawimage = item->iSelectedImage;
|
||||
if (dis->itemState & ODS_SELECTED)
|
||||
drawstate = ILD_SELECTED;
|
||||
}
|
||||
} else {
|
||||
/* drawing combo/edit entry */
|
||||
if (IsWindowVisible(infoPtr->hwndEdit)) {
|
||||
/* if we have an edit control, the slave the
|
||||
* selection state to the Edit focus state
|
||||
*/
|
||||
if (infoPtr->flags & WCBE_EDITFOCUSED) {
|
||||
if (item->mask & CBEIF_SELECTEDIMAGE)
|
||||
drawimage = item->iSelectedImage;
|
||||
if (infoPtr->flags & WCBE_EDITFOCUSED)
|
||||
drawstate = ILD_SELECTED;
|
||||
}
|
||||
} else {
|
||||
} else
|
||||
/* if we don't have an edit control, use
|
||||
* the requested state.
|
||||
*/
|
||||
if (dis->itemState & ODS_SELECTED) {
|
||||
if (item->mask & CBEIF_SELECTEDIMAGE)
|
||||
drawimage = item->iSelectedImage;
|
||||
if (dis->itemState & ODS_SELECTED)
|
||||
drawstate = ILD_SELECTED;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (infoPtr->himl && !(infoPtr->dwExtStyle & CBES_EX_NOEDITIMAGEINDENT)) {
|
||||
|
@ -1479,17 +1423,17 @@ static LRESULT COMBOEX_DrawItem (const COMBOEX_INFO *infoPtr, DRAWITEMSTRUCT con
|
|||
if (drawimage == I_IMAGECALLBACK) {
|
||||
NMCOMBOBOXEXW nmce;
|
||||
ZeroMemory(&nmce, sizeof(nmce));
|
||||
nmce.ceItem.mask = (drawstate == ILD_NORMAL) ? CBEIF_IMAGE : CBEIF_SELECTEDIMAGE;
|
||||
nmce.ceItem.mask = selected ? CBEIF_SELECTEDIMAGE : CBEIF_IMAGE;
|
||||
nmce.ceItem.lParam = item->lParam;
|
||||
nmce.ceItem.iItem = dis->itemID;
|
||||
COMBOEX_NotifyItem(infoPtr, CBEN_GETDISPINFOW, &nmce);
|
||||
if (drawstate == ILD_NORMAL) {
|
||||
if (!selected) {
|
||||
if (nmce.ceItem.mask & CBEIF_DI_SETITEM) item->iImage = nmce.ceItem.iImage;
|
||||
drawimage = nmce.ceItem.iImage;
|
||||
} else if (drawstate == ILD_SELECTED) {
|
||||
} else {
|
||||
if (nmce.ceItem.mask & CBEIF_DI_SETITEM) item->iSelectedImage = nmce.ceItem.iSelectedImage;
|
||||
drawimage = nmce.ceItem.iSelectedImage;
|
||||
} else ERR("Bad draw state = %d\n", drawstate);
|
||||
drawimage = nmce.ceItem.iSelectedImage;
|
||||
}
|
||||
}
|
||||
|
||||
if (overlay == I_IMAGECALLBACK) {
|
||||
|
@ -1576,10 +1520,7 @@ static LRESULT COMBOEX_Destroy (COMBOEX_INFO *infoPtr)
|
|||
if (infoPtr->hwndEdit)
|
||||
RemoveWindowSubclass(infoPtr->hwndEdit, COMBOEX_EditWndProc, EDIT_SUBCLASSID);
|
||||
|
||||
COMBOEX_FreeText (infoPtr->edit);
|
||||
Free (infoPtr->edit);
|
||||
infoPtr->edit = 0;
|
||||
|
||||
COMBOEX_FreeText (&infoPtr->edit);
|
||||
COMBOEX_ResetContent (infoPtr);
|
||||
|
||||
if (infoPtr->defaultFont)
|
||||
|
@ -1666,6 +1607,15 @@ static LRESULT COMBOEX_Size (COMBOEX_INFO *infoPtr, INT width, INT height)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static LRESULT COMBOEX_SetFont( COMBOEX_INFO *infoPtr, HFONT font, BOOL redraw )
|
||||
{
|
||||
infoPtr->font = font;
|
||||
SendMessageW( infoPtr->hwndCombo, WM_SETFONT, (WPARAM)font, 0 );
|
||||
if (infoPtr->hwndEdit) SendMessageW( infoPtr->hwndEdit, WM_SETFONT, (WPARAM)font, 0 );
|
||||
COMBOEX_ReSize( infoPtr );
|
||||
if (redraw) InvalidateRect( infoPtr->hwndCombo, NULL, TRUE );
|
||||
return 0;
|
||||
}
|
||||
|
||||
static LRESULT COMBOEX_SetRedraw(const COMBOEX_INFO *infoPtr, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
|
@ -1743,9 +1693,6 @@ COMBOEX_EditWndProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam,
|
|||
return DefSubclassProc(hwnd, uMsg, wParam, lParam);
|
||||
|
||||
case WM_ERASEBKGND:
|
||||
/*
|
||||
* The following was determined by traces of the native
|
||||
*/
|
||||
hDC = (HDC) wParam;
|
||||
obkc = SetBkColor (hDC, comctl32_color.clrWindow);
|
||||
GetClientRect (hwnd, &rect);
|
||||
|
@ -1761,23 +1708,6 @@ COMBOEX_EditWndProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam,
|
|||
switch ((INT)wParam)
|
||||
{
|
||||
case VK_ESCAPE:
|
||||
/* native version seems to do following for COMBOEX */
|
||||
/*
|
||||
* GetWindowTextW(Edit,&?, 0x104) x
|
||||
* CB_GETCURSEL to Combo rets -1 x
|
||||
* WM_NOTIFY to COMBOEX parent (rebar) x
|
||||
* (CBEN_ENDEDIT{A|W}
|
||||
* fChanged = FALSE x
|
||||
* inewSelection = -1 x
|
||||
* txt="www.hoho" x
|
||||
* iWhy = 3 x
|
||||
* CB_GETCURSEL to Combo rets -1 x
|
||||
* InvalidateRect(Combo, 0) x
|
||||
* WM_SETTEXT to Edit x
|
||||
* EM_SETSEL to Edit (0,0) x
|
||||
* EM_SETSEL to Edit (0,-1) x
|
||||
* RedrawWindow(Combo, 0, 0, 5) x
|
||||
*/
|
||||
TRACE("special code for VK_ESCAPE\n");
|
||||
|
||||
GetWindowTextW (infoPtr->hwndEdit, edit_text, 260);
|
||||
|
@ -1802,27 +1732,6 @@ COMBOEX_EditWndProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam,
|
|||
break;
|
||||
|
||||
case VK_RETURN:
|
||||
/* native version seems to do following for COMBOEX */
|
||||
/*
|
||||
* GetWindowTextW(Edit,&?, 0x104) x
|
||||
* CB_GETCURSEL to Combo rets -1 x
|
||||
* CB_GETCOUNT to Combo rets 0
|
||||
* if >0 loop
|
||||
* CB_GETITEMDATA to match
|
||||
* *** above 3 lines simulated by FindItem x
|
||||
* WM_NOTIFY to COMBOEX parent (rebar) x
|
||||
* (CBEN_ENDEDIT{A|W} x
|
||||
* fChanged = TRUE (-1) x
|
||||
* iNewSelection = -1 or selected x
|
||||
* txt= x
|
||||
* iWhy = 2 (CBENF_RETURN) x
|
||||
* CB_GETCURSEL to Combo rets -1 x
|
||||
* if -1 send CB_SETCURSEL to Combo -1 x
|
||||
* InvalidateRect(Combo, 0, 0) x
|
||||
* SetFocus(Edit) x
|
||||
* CallWindowProc(406615a8, Edit, 0x100, 0xd, 0x1c0001)
|
||||
*/
|
||||
|
||||
TRACE("special code for VK_RETURN\n");
|
||||
|
||||
GetWindowTextW (infoPtr->hwndEdit, edit_text, 260);
|
||||
|
@ -1850,7 +1759,7 @@ COMBOEX_EditWndProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam,
|
|||
if (COMBOEX_NotifyEndEdit (infoPtr, &cbeend, edit_text)) {
|
||||
/* abort the change, restore previous */
|
||||
TRACE("Notify requested abort of change\n");
|
||||
COMBOEX_SetEditText (infoPtr, infoPtr->edit);
|
||||
COMBOEX_SetEditText (infoPtr, &infoPtr->edit);
|
||||
RedrawWindow (infoPtr->hwndCombo, 0, 0, RDW_ERASE |
|
||||
RDW_INVALIDATE);
|
||||
return 0;
|
||||
|
@ -1942,9 +1851,6 @@ COMBOEX_ComboWndProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam,
|
|||
return DefSubclassProc(hwnd, uMsg, wParam, lParam);
|
||||
|
||||
case WM_ERASEBKGND:
|
||||
/*
|
||||
* The following was determined by traces of the native
|
||||
*/
|
||||
hDC = (HDC) wParam;
|
||||
obkc = SetBkColor (hDC, comctl32_color.clrWindow);
|
||||
GetClientRect (hwnd, &rect);
|
||||
|
@ -2013,18 +1919,6 @@ COMBOEX_ComboWndProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam,
|
|||
return 0;
|
||||
|
||||
case EN_KILLFOCUS:
|
||||
/*
|
||||
* Native does:
|
||||
*
|
||||
* GetFocus() retns AA
|
||||
* GetWindowTextW(Edit)
|
||||
* CB_GETCURSEL(Combo) (got -1)
|
||||
* WM_NOTIFY(CBEN_ENDEDITA) with CBENF_KILLFOCUS
|
||||
* CB_GETCURSEL(Combo) (got -1)
|
||||
* InvalidateRect(Combo, 0, 0)
|
||||
* WM_KILLFOCUS(Combo, AA)
|
||||
* return 0;
|
||||
*/
|
||||
focusedhwnd = GetFocus();
|
||||
if (infoPtr->flags & WCBE_ACTEDIT) {
|
||||
GetWindowTextW (infoPtr->hwndEdit, edit_text, 260);
|
||||
|
@ -2044,21 +1938,6 @@ COMBOEX_ComboWndProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam,
|
|||
return 0;
|
||||
|
||||
case EN_SETFOCUS: {
|
||||
/*
|
||||
* For EN_SETFOCUS this issues the same calls and messages
|
||||
* as the native seems to do.
|
||||
*
|
||||
* for some cases however native does the following:
|
||||
* (noticed after SetFocus during LBUTTONDOWN on
|
||||
* on dropdown arrow)
|
||||
* WM_GETTEXTLENGTH (Edit);
|
||||
* WM_GETTEXT (Edit, len+1, str);
|
||||
* EM_SETSEL (Edit, 0, 0);
|
||||
* WM_GETTEXTLENGTH (Edit);
|
||||
* WM_GETTEXT (Edit, len+1, str);
|
||||
* EM_SETSEL (Edit, 0, len);
|
||||
* WM_NOTIFY (parent, CBEN_BEGINEDIT)
|
||||
*/
|
||||
NMHDR hdr;
|
||||
|
||||
SendMessageW (infoPtr->hwndEdit, EM_SETSEL, 0, 0);
|
||||
|
@ -2070,10 +1949,6 @@ COMBOEX_ComboWndProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam,
|
|||
}
|
||||
|
||||
case EN_CHANGE: {
|
||||
/*
|
||||
* For EN_CHANGE this issues the same calls and messages
|
||||
* as the native seems to do.
|
||||
*/
|
||||
LPCWSTR lastwrk;
|
||||
cmp_func_t cmptext = get_cmp_func(infoPtr);
|
||||
|
||||
|
@ -2084,7 +1959,7 @@ COMBOEX_ComboWndProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam,
|
|||
|
||||
GetWindowTextW (infoPtr->hwndEdit, edit_text, 260);
|
||||
if (selected == -1) {
|
||||
lastwrk = infoPtr->edit->pszText;
|
||||
lastwrk = infoPtr->edit.pszText;
|
||||
}
|
||||
else {
|
||||
CBE_ITEMDATA *item = COMBOEX_FindItem (infoPtr, selected);
|
||||
|
@ -2109,37 +1984,6 @@ COMBOEX_ComboWndProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam,
|
|||
}
|
||||
|
||||
case LBN_SELCHANGE:
|
||||
/*
|
||||
* Therefore from traces there is no additional code here
|
||||
*/
|
||||
|
||||
/*
|
||||
* Using native COMCTL32 gets the following:
|
||||
* 1 == SHDOCVW.DLL issues call/message
|
||||
* 2 == COMCTL32.DLL issues call/message
|
||||
* 3 == WINE issues call/message
|
||||
*
|
||||
*
|
||||
* for LBN_SELCHANGE:
|
||||
* 1 CB_GETCURSEL(ComboEx)
|
||||
* 1 CB_GETDROPPEDSTATE(ComboEx)
|
||||
* 1 CallWindowProc( *2* for WM_COMMAND(LBN_SELCHANGE)
|
||||
* 2 CallWindowProc( *3* for WM_COMMAND(LBN_SELCHANGE)
|
||||
** call CBRollUp( xxx, TRUE for LBN_SELCHANGE, TRUE)
|
||||
* 3 WM_COMMAND(ComboEx, CBN_SELENDOK)
|
||||
* WM_USER+49(ComboLB, 1,0) <=============!!!!!!!!!!!
|
||||
* 3 ShowWindow(ComboLB, SW_HIDE)
|
||||
* 3 RedrawWindow(Combo, RDW_UPDATENOW)
|
||||
* 3 WM_COMMAND(ComboEX, CBN_CLOSEUP)
|
||||
** end of CBRollUp
|
||||
* 3 WM_COMMAND(ComboEx, CBN_SELCHANGE) (echo to parent)
|
||||
* ? LB_GETCURSEL <==|
|
||||
* ? LB_GETTEXTLEN |
|
||||
* ? LB_GETTEXT | Needs to be added to
|
||||
* ? WM_CTLCOLOREDIT(ComboEx) | Combo processing
|
||||
* ? LB_GETITEMDATA |
|
||||
* ? WM_DRAWITEM(ComboEx) <==|
|
||||
*/
|
||||
default:
|
||||
break;
|
||||
}/* fall through */
|
||||
|
@ -2301,6 +2145,12 @@ COMBOEX_WindowProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
|||
case WM_SIZE:
|
||||
return COMBOEX_Size (infoPtr, LOWORD(lParam), HIWORD(lParam));
|
||||
|
||||
case WM_GETFONT:
|
||||
return (LRESULT)infoPtr->font;
|
||||
|
||||
case WM_SETFONT:
|
||||
return COMBOEX_SetFont( infoPtr, (HFONT)wParam, LOWORD(lParam) != 0 );
|
||||
|
||||
case WM_SETREDRAW:
|
||||
return COMBOEX_SetRedraw(infoPtr, wParam, lParam);
|
||||
|
||||
|
|
|
@ -42,9 +42,6 @@
|
|||
extern HMODULE COMCTL32_hModule DECLSPEC_HIDDEN;
|
||||
extern HBRUSH COMCTL32_hPattern55AABrush DECLSPEC_HIDDEN;
|
||||
|
||||
/* has a value of: 0, CCS_TOP, CCS_NOMOVEY, CCS_BOTTOM */
|
||||
#define CCS_LAYOUT_MASK 0x3
|
||||
|
||||
/* Property sheet / Wizard */
|
||||
#define IDD_PROPSHEET 1006
|
||||
#define IDD_WIZARD 1020
|
||||
|
@ -80,23 +77,6 @@ extern HBRUSH COMCTL32_hPattern55AABrush DECLSPEC_HIDDEN;
|
|||
#define IDB_HIST_SMALL 130
|
||||
#define IDB_HIST_LARGE 131
|
||||
|
||||
|
||||
/* Month calendar month menu popup */
|
||||
#define IDD_MCMONTHMENU 300
|
||||
|
||||
#define IDM_JAN 301
|
||||
#define IDM_FEB 302
|
||||
#define IDM_MAR 303
|
||||
#define IDM_APR 304
|
||||
#define IDM_MAY 305
|
||||
#define IDM_JUN 306
|
||||
#define IDM_JUL 307
|
||||
#define IDM_AUG 308
|
||||
#define IDM_SEP 309
|
||||
#define IDM_OCT 310
|
||||
#define IDM_NOV 311
|
||||
#define IDM_DEC 312
|
||||
|
||||
#define IDM_TODAY 4163
|
||||
#define IDM_GOTODAY 4164
|
||||
|
||||
|
|
|
@ -61,6 +61,7 @@
|
|||
340 stdcall -ordinal DPA_CreateEx(long long)
|
||||
341 stdcall -noname SendNotify(long long long ptr)
|
||||
342 stdcall -noname SendNotifyEx(long long long ptr long)
|
||||
345 stdcall -ordinal TaskDialogIndirect(ptr ptr ptr ptr)
|
||||
350 stdcall -noname StrChrA(str str)
|
||||
351 stdcall -noname StrRChrA(str str long)
|
||||
352 stdcall -noname StrCmpNA(str str long)
|
||||
|
@ -189,6 +190,5 @@
|
|||
@ stdcall PropertySheetA(ptr)
|
||||
@ stdcall PropertySheetW(ptr)
|
||||
@ stdcall RegisterClassNameW(wstr)
|
||||
@ stdcall TaskDialogIndirect(ptr ptr ptr ptr)
|
||||
@ stdcall UninitializeFlatSB(long)
|
||||
@ stdcall _TrackMouseEvent(ptr)
|
||||
|
|
|
@ -235,7 +235,8 @@ BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
|
|||
break;
|
||||
|
||||
case DLL_PROCESS_DETACH:
|
||||
/* clean up subclassing */
|
||||
if (lpvReserved) break;
|
||||
/* clean up subclassing */
|
||||
THEMING_Uninitialize();
|
||||
|
||||
/* unregister all common control classes */
|
||||
|
@ -263,14 +264,11 @@ BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
|
|||
|
||||
/* delete local pattern brush */
|
||||
DeleteObject (COMCTL32_hPattern55AABrush);
|
||||
COMCTL32_hPattern55AABrush = NULL;
|
||||
DeleteObject (COMCTL32_hPattern55AABitmap);
|
||||
COMCTL32_hPattern55AABitmap = NULL;
|
||||
|
||||
/* delete global subclassing atom */
|
||||
GlobalDeleteAtom (LOWORD(COMCTL32_wSubclass));
|
||||
TRACE("Subclassing atom deleted: %p\n", COMCTL32_wSubclass);
|
||||
COMCTL32_wSubclass = NULL;
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -1013,7 +1011,7 @@ HRESULT WINAPI DllInstall(BOOL bInstall, LPCWSTR cmdline)
|
|||
ERR("create_manifest failed!\n");
|
||||
return HRESULT_FROM_WIN32(GetLastError());
|
||||
}
|
||||
|
||||
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
|
|
|
@ -293,6 +293,41 @@ static void HEADER_GetHotDividerRect(const HEADER_INFO *infoPtr, RECT *r)
|
|||
}
|
||||
}
|
||||
|
||||
static void
|
||||
HEADER_FillItemFrame(HEADER_INFO *infoPtr, HDC hdc, RECT *r, const HEADER_ITEM *item, BOOL hottrack)
|
||||
{
|
||||
HTHEME theme = GetWindowTheme (infoPtr->hwndSelf);
|
||||
|
||||
if (theme) {
|
||||
int state = (item->bDown) ? HIS_PRESSED : (hottrack ? HIS_HOT : HIS_NORMAL);
|
||||
DrawThemeBackground (theme, hdc, HP_HEADERITEM, state, r, NULL);
|
||||
GetThemeBackgroundContentRect (theme, hdc, HP_HEADERITEM, state, r, r);
|
||||
}
|
||||
else
|
||||
{
|
||||
HBRUSH hbr = CreateSolidBrush(GetBkColor(hdc));
|
||||
FillRect(hdc, r, hbr);
|
||||
DeleteObject(hbr);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
HEADER_DrawItemFrame(HEADER_INFO *infoPtr, HDC hdc, RECT *r, const HEADER_ITEM *item)
|
||||
{
|
||||
if (GetWindowTheme(infoPtr->hwndSelf)) return;
|
||||
|
||||
if (!(infoPtr->dwStyle & HDS_FLAT))
|
||||
{
|
||||
if (infoPtr->dwStyle & HDS_BUTTONS) {
|
||||
if (item->bDown)
|
||||
DrawEdge (hdc, r, BDR_RAISEDOUTER, BF_RECT | BF_FLAT | BF_ADJUST);
|
||||
else
|
||||
DrawEdge (hdc, r, EDGE_RAISED, BF_RECT | BF_SOFT | BF_ADJUST);
|
||||
}
|
||||
else
|
||||
DrawEdge (hdc, r, EDGE_ETCHED, BF_BOTTOM | BF_RIGHT | BF_ADJUST);
|
||||
}
|
||||
}
|
||||
|
||||
static INT
|
||||
HEADER_DrawItem (HEADER_INFO *infoPtr, HDC hdc, INT iItem, BOOL bHotTrack, LRESULT lCDFlags)
|
||||
|
@ -329,43 +364,13 @@ HEADER_DrawItem (HEADER_INFO *infoPtr, HDC hdc, INT iItem, BOOL bHotTrack, LRESU
|
|||
return phdi->rect.right;
|
||||
}
|
||||
|
||||
if (theme != NULL) {
|
||||
int state = (phdi->bDown) ? HIS_PRESSED :
|
||||
(bHotTrack ? HIS_HOT : HIS_NORMAL);
|
||||
DrawThemeBackground (theme, hdc, HP_HEADERITEM, state,
|
||||
&r, NULL);
|
||||
GetThemeBackgroundContentRect (theme, hdc, HP_HEADERITEM, state,
|
||||
&r, &r);
|
||||
}
|
||||
else {
|
||||
HBRUSH hbr;
|
||||
/* Fill background, owner could draw over it. */
|
||||
HEADER_FillItemFrame(infoPtr, hdc, &r, phdi, bHotTrack);
|
||||
|
||||
if (!(infoPtr->dwStyle & HDS_FLAT))
|
||||
{
|
||||
if (infoPtr->dwStyle & HDS_BUTTONS) {
|
||||
if (phdi->bDown) {
|
||||
DrawEdge (hdc, &r, BDR_RAISEDOUTER,
|
||||
BF_RECT | BF_FLAT | BF_MIDDLE | BF_ADJUST);
|
||||
}
|
||||
else
|
||||
DrawEdge (hdc, &r, EDGE_RAISED,
|
||||
BF_RECT | BF_SOFT | BF_MIDDLE | BF_ADJUST);
|
||||
}
|
||||
else
|
||||
DrawEdge (hdc, &r, EDGE_ETCHED, BF_BOTTOM | BF_RIGHT | BF_ADJUST);
|
||||
}
|
||||
|
||||
hbr = CreateSolidBrush(GetBkColor(hdc));
|
||||
FillRect(hdc, &r, hbr);
|
||||
DeleteObject(hbr);
|
||||
}
|
||||
if (phdi->bDown) {
|
||||
r.left += 2;
|
||||
r.top += 2;
|
||||
}
|
||||
|
||||
if (phdi->fmt & HDF_OWNERDRAW) {
|
||||
if (phdi->fmt & HDF_OWNERDRAW)
|
||||
{
|
||||
DRAWITEMSTRUCT dis;
|
||||
BOOL ret;
|
||||
|
||||
dis.CtlType = ODT_HEADER;
|
||||
dis.CtlID = GetWindowLongPtrW (infoPtr->hwndSelf, GWLP_ID);
|
||||
|
@ -377,11 +382,32 @@ HEADER_DrawItem (HEADER_INFO *infoPtr, HDC hdc, INT iItem, BOOL bHotTrack, LRESU
|
|||
dis.rcItem = phdi->rect;
|
||||
dis.itemData = phdi->lParam;
|
||||
oldBkMode = SetBkMode(hdc, TRANSPARENT);
|
||||
SendMessageW (infoPtr->hwndNotify, WM_DRAWITEM, dis.CtlID, (LPARAM)&dis);
|
||||
ret = SendMessageW (infoPtr->hwndNotify, WM_DRAWITEM, dis.CtlID, (LPARAM)&dis);
|
||||
if (oldBkMode != TRANSPARENT)
|
||||
SetBkMode(hdc, oldBkMode);
|
||||
|
||||
if (!ret)
|
||||
HEADER_FillItemFrame(infoPtr, hdc, &r, phdi, bHotTrack);
|
||||
|
||||
/* Edges are always drawn if we don't have attached theme. */
|
||||
HEADER_DrawItemFrame(infoPtr, hdc, &r, phdi);
|
||||
/* If application processed WM_DRAWITEM we should skip label painting,
|
||||
edges are drawn no matter what. */
|
||||
if (ret) return phdi->rect.right;
|
||||
}
|
||||
else {
|
||||
else
|
||||
{
|
||||
HEADER_FillItemFrame(infoPtr, hdc, &r, phdi, bHotTrack);
|
||||
HEADER_DrawItemFrame(infoPtr, hdc, &r, phdi);
|
||||
}
|
||||
|
||||
if (phdi->bDown) {
|
||||
r.left += 2;
|
||||
r.top += 2;
|
||||
}
|
||||
|
||||
/* Now text and image */
|
||||
{
|
||||
UINT rw, rh, /* width and height of r */
|
||||
*x = NULL, *w = NULL; /* x and width of the pic (bmp or img) which is part of cnt */
|
||||
/* cnt,txt,img,bmp */
|
||||
|
@ -499,7 +525,7 @@ HEADER_DrawItem (HEADER_INFO *infoPtr, HDC hdc, INT iItem, BOOL bHotTrack, LRESU
|
|||
SetBkMode(hdc, oldBkMode);
|
||||
}
|
||||
HEADER_FreeCallbackItems(phdi);
|
||||
}/*Ownerdrawn*/
|
||||
}
|
||||
|
||||
return phdi->rect.right;
|
||||
}
|
||||
|
|
|
@ -132,13 +132,6 @@
|
|||
*
|
||||
* Functions:
|
||||
* -- LVGroupComparE
|
||||
*
|
||||
* Known differences in message stream from native control (not known if
|
||||
* these differences cause problems):
|
||||
* LVM_INSERTITEM issues LVM_SETITEMSTATE and LVM_SETITEM in certain cases.
|
||||
* LVM_SETITEM does not always issue LVN_ITEMCHANGING/LVN_ITEMCHANGED.
|
||||
* WM_CREATE does not issue WM_QUERYUISTATE and associated registry
|
||||
* processing for "USEDOUBLECLICKTIME".
|
||||
*/
|
||||
|
||||
#include <config.h>
|
||||
|
@ -6284,6 +6277,7 @@ again:
|
|||
{
|
||||
lvItem.iItem = nItem;
|
||||
lvItem.iSubItem = 0;
|
||||
lvItem.pszText = szDispText;
|
||||
if (!LISTVIEW_GetItemW(infoPtr, &lvItem)) continue;
|
||||
|
||||
if (lvItem.mask & LVIF_PARAM)
|
||||
|
@ -7923,17 +7917,6 @@ static BOOL LISTVIEW_RedrawItems(const LISTVIEW_INFO *infoPtr, INT nFirst, INT n
|
|||
* nearest number of pixels that are a whole line. Ex: if line height
|
||||
* is 16 and an 8 is passed, the list will be scrolled by 16. If a 7
|
||||
* is passed, then the scroll will be 0. (per MSDN 7/2002)
|
||||
*
|
||||
* For: (per experimentation with native control and CSpy ListView)
|
||||
* LV_VIEW_ICON scrolling in any direction is allowed
|
||||
* LV_VIEW_SMALLICON scrolling in any direction is allowed
|
||||
* LV_VIEW_LIST dx=1 = 1 column (horizontal only)
|
||||
* but will only scroll 1 column per message
|
||||
* no matter what the value.
|
||||
* dy must be 0 or FALSE returned.
|
||||
* LV_VIEW_DETAILS dx=1 = 1 pixel
|
||||
* dy= see above
|
||||
*
|
||||
*/
|
||||
static BOOL LISTVIEW_Scroll(LISTVIEW_INFO *infoPtr, INT dx, INT dy)
|
||||
{
|
||||
|
|
|
@ -123,7 +123,6 @@ typedef struct
|
|||
int width_increment;
|
||||
INT delta; /* scroll rate; # of months that the */
|
||||
/* control moves when user clicks a scroll button */
|
||||
int visible; /* # of months visible */
|
||||
int firstDay; /* Start month calendar with firstDay's day,
|
||||
stored in SYSTEMTIME format */
|
||||
BOOL firstDaySet; /* first week day differs from locale defined */
|
||||
|
@ -1302,8 +1301,8 @@ MONTHCAL_GetMonthDelta(const MONTHCAL_INFO *infoPtr)
|
|||
|
||||
if(infoPtr->delta)
|
||||
return infoPtr->delta;
|
||||
else
|
||||
return infoPtr->visible;
|
||||
|
||||
return MONTHCAL_GetMonthRange(infoPtr, GMR_VISIBLE, NULL);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -544,7 +544,7 @@ static LRESULT WINAPI ProgressWindowProc(HWND hwnd, UINT message,
|
|||
case WM_CREATE:
|
||||
{
|
||||
DWORD dwExStyle = GetWindowLongW (hwnd, GWL_EXSTYLE);
|
||||
|
||||
|
||||
theme = OpenThemeData (hwnd, themeClass);
|
||||
|
||||
dwExStyle &= ~(WS_EX_CLIENTEDGE | WS_EX_WINDOWEDGE);
|
||||
|
@ -690,17 +690,25 @@ static LRESULT WINAPI ProgressWindowProc(HWND hwnd, UINT message,
|
|||
return infoPtr->CurVal;
|
||||
|
||||
case PBM_SETBARCOLOR:
|
||||
{
|
||||
COLORREF clr = infoPtr->ColorBar;
|
||||
|
||||
infoPtr->ColorBar = (COLORREF)lParam;
|
||||
InvalidateRect(hwnd, NULL, TRUE);
|
||||
return 0;
|
||||
return clr;
|
||||
}
|
||||
|
||||
case PBM_GETBARCOLOR:
|
||||
return infoPtr->ColorBar;
|
||||
|
||||
case PBM_SETBKCOLOR:
|
||||
{
|
||||
COLORREF clr = infoPtr->ColorBk;
|
||||
|
||||
infoPtr->ColorBk = (COLORREF)lParam;
|
||||
InvalidateRect(hwnd, NULL, TRUE);
|
||||
return 0;
|
||||
return clr;
|
||||
}
|
||||
|
||||
case PBM_GETBKCOLOR:
|
||||
return infoPtr->ColorBk;
|
||||
|
|
|
@ -46,11 +46,11 @@
|
|||
* - RB_SETTOOLTIPS
|
||||
* - WM_CHARTOITEM
|
||||
* - WM_LBUTTONDBLCLK
|
||||
* - WM_MEASUREITEM
|
||||
* - WM_PALETTECHANGED
|
||||
* - WM_QUERYNEWPALETTE
|
||||
* - WM_RBUTTONDOWN
|
||||
* - WM_RBUTTONUP
|
||||
* - WM_SYSCOLORCHANGE
|
||||
* - WM_VKEYTOITEM
|
||||
* - WM_WININICHANGE
|
||||
* Notifications:
|
||||
|
@ -137,6 +137,9 @@ typedef struct
|
|||
HWND hwndPrevParent;
|
||||
} REBAR_BAND;
|
||||
|
||||
/* has a value of: 0, CCS_TOP, CCS_NOMOVEY, CCS_BOTTOM */
|
||||
#define CCS_LAYOUT_MASK 0x3
|
||||
|
||||
/* fStatus flags */
|
||||
#define HAS_GRIPPER 0x00000001
|
||||
#define HAS_IMAGE 0x00000002
|
||||
|
@ -1049,14 +1052,6 @@ REBAR_MoveChildWindows (const REBAR_INFO *infoPtr, UINT start, UINT endplus)
|
|||
lpBand->rcChild = rbcz.rcChild; /* *** ??? */
|
||||
}
|
||||
|
||||
/* native (IE4 in "Favorites" frame **1) does:
|
||||
* SetRect (&rc, -1, -1, -1, -1)
|
||||
* EqualRect (&rc,band->rc???)
|
||||
* if ret==0
|
||||
* CopyRect (band->rc????, &rc)
|
||||
* set flag outside of loop
|
||||
*/
|
||||
|
||||
GetClassNameW (lpBand->hwndChild, szClassName, sizeof(szClassName)/sizeof(szClassName[0]));
|
||||
if (!lstrcmpW (szClassName, strComboBox) ||
|
||||
!lstrcmpW (szClassName, WC_COMBOBOXEXW)) {
|
||||
|
@ -1108,15 +1103,6 @@ REBAR_MoveChildWindows (const REBAR_INFO *infoPtr, UINT start, UINT endplus)
|
|||
|
||||
if (infoPtr->DoRedraw)
|
||||
UpdateWindow (infoPtr->hwndSelf);
|
||||
|
||||
/* native (from **1 above) does:
|
||||
* UpdateWindow(rebar)
|
||||
* REBAR_ForceResize
|
||||
* RBN_HEIGHTCHANGE if necessary
|
||||
* if ret from any EqualRect was 0
|
||||
* Goto "BeginDeferWindowPos"
|
||||
*/
|
||||
|
||||
}
|
||||
|
||||
/* Returns the next visible band (the first visible band in [i+1; infoPtr->uNumBands) )
|
||||
|
@ -3317,29 +3303,6 @@ REBAR_NCCreate (HWND hwnd, const CREATESTRUCTW *cs)
|
|||
infoPtr->hFont = infoPtr->hDefaultFont = tfont;
|
||||
}
|
||||
|
||||
/* native does:
|
||||
GetSysColor (numerous);
|
||||
GetSysColorBrush (numerous) (see WM_SYSCOLORCHANGE);
|
||||
*GetStockObject (SYSTEM_FONT);
|
||||
*SetWindowLong (hwnd, 0, info ptr);
|
||||
*WM_NOTIFYFORMAT;
|
||||
*SetWindowLong (hwnd, GWL_STYLE, style+0x10000001);
|
||||
WS_VISIBLE = 0x10000000;
|
||||
CCS_TOP = 0x00000001;
|
||||
*SystemParametersInfo (SPI_GETNONCLIENTMETRICS...);
|
||||
*CreateFontIndirect (lfCaptionFont from above);
|
||||
GetDC ();
|
||||
SelectObject (hdc, fontabove);
|
||||
GetTextMetrics (hdc, ); guessing is tmHeight
|
||||
SelectObject (hdc, oldfont);
|
||||
ReleaseDC ();
|
||||
GetWindowRect ();
|
||||
MapWindowPoints (0, parent, rectabove, 2);
|
||||
GetWindowRect ();
|
||||
GetClientRect ();
|
||||
ClientToScreen (clientrect);
|
||||
SetWindowPos (hwnd, 0, 0, 0, 0, 0, SWP_NOZORDER);
|
||||
*/
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
@ -3725,6 +3688,7 @@ REBAR_WindowProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
|||
case WM_COMMAND:
|
||||
case WM_DRAWITEM:
|
||||
case WM_NOTIFY:
|
||||
case WM_MEASUREITEM:
|
||||
return SendMessageW(REBAR_GetNotifyParent (infoPtr), uMsg, wParam, lParam);
|
||||
|
||||
|
||||
|
@ -3750,8 +3714,6 @@ REBAR_WindowProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
|||
case WM_LBUTTONUP:
|
||||
return REBAR_LButtonUp (infoPtr);
|
||||
|
||||
/* case WM_MEASUREITEM: supported according to ControlSpy */
|
||||
|
||||
case WM_MOUSEMOVE:
|
||||
return REBAR_MouseMove (infoPtr, lParam);
|
||||
|
||||
|
|
|
@ -1023,37 +1023,18 @@ static void TAB_SetupScrolling(
|
|||
/*
|
||||
* Calculate the position of the scroll control.
|
||||
*/
|
||||
if(infoPtr->dwStyle & TCS_VERTICAL)
|
||||
{
|
||||
controlPos.right = clientRect->right;
|
||||
controlPos.left = controlPos.right - 2 * GetSystemMetrics(SM_CXHSCROLL);
|
||||
controlPos.right = clientRect->right;
|
||||
controlPos.left = controlPos.right - 2 * GetSystemMetrics(SM_CXHSCROLL);
|
||||
|
||||
if (infoPtr->dwStyle & TCS_BOTTOM)
|
||||
{
|
||||
controlPos.top = clientRect->bottom - infoPtr->tabHeight;
|
||||
controlPos.bottom = controlPos.top + GetSystemMetrics(SM_CYHSCROLL);
|
||||
}
|
||||
else
|
||||
{
|
||||
controlPos.bottom = clientRect->top + infoPtr->tabHeight;
|
||||
controlPos.top = controlPos.bottom - GetSystemMetrics(SM_CYHSCROLL);
|
||||
}
|
||||
if (infoPtr->dwStyle & TCS_BOTTOM)
|
||||
{
|
||||
controlPos.top = clientRect->bottom - infoPtr->tabHeight;
|
||||
controlPos.bottom = controlPos.top + GetSystemMetrics(SM_CYHSCROLL);
|
||||
}
|
||||
else
|
||||
{
|
||||
controlPos.right = clientRect->right;
|
||||
controlPos.left = controlPos.right - 2 * GetSystemMetrics(SM_CXHSCROLL);
|
||||
|
||||
if (infoPtr->dwStyle & TCS_BOTTOM)
|
||||
{
|
||||
controlPos.top = clientRect->bottom - infoPtr->tabHeight;
|
||||
controlPos.bottom = controlPos.top + GetSystemMetrics(SM_CYHSCROLL);
|
||||
}
|
||||
else
|
||||
{
|
||||
controlPos.bottom = clientRect->top + infoPtr->tabHeight;
|
||||
controlPos.top = controlPos.bottom - GetSystemMetrics(SM_CYHSCROLL);
|
||||
}
|
||||
controlPos.bottom = clientRect->top + infoPtr->tabHeight;
|
||||
controlPos.top = controlPos.bottom - GetSystemMetrics(SM_CYHSCROLL);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -1917,9 +1898,8 @@ TAB_DrawItemInterior(const TAB_INFO *infoPtr, HDC hdc, INT iItem, RECT *drawRect
|
|||
/* Draw the text */
|
||||
if(infoPtr->dwStyle & TCS_VERTICAL) /* if we are vertical rotate the text and each character */
|
||||
{
|
||||
static const WCHAR ArialW[] = { 'A','r','i','a','l',0 };
|
||||
LOGFONTW logfont;
|
||||
HFONT hFont = 0;
|
||||
HFONT hFont;
|
||||
INT nEscapement = 900;
|
||||
INT nOrientation = 900;
|
||||
|
||||
|
@ -1930,21 +1910,9 @@ TAB_DrawItemInterior(const TAB_INFO *infoPtr, HDC hdc, INT iItem, RECT *drawRect
|
|||
}
|
||||
|
||||
/* to get a font with the escapement and orientation we are looking for, we need to */
|
||||
/* call CreateFontIndirectA, which requires us to set the values of the logfont we pass in */
|
||||
if (!GetObjectW((infoPtr->hFont) ?
|
||||
infoPtr->hFont : GetStockObject(SYSTEM_FONT),
|
||||
sizeof(LOGFONTW),&logfont))
|
||||
{
|
||||
INT iPointSize = 9;
|
||||
|
||||
lstrcpyW(logfont.lfFaceName, ArialW);
|
||||
logfont.lfHeight = -MulDiv(iPointSize, GetDeviceCaps(hdc, LOGPIXELSY),
|
||||
72);
|
||||
logfont.lfWeight = FW_NORMAL;
|
||||
logfont.lfItalic = 0;
|
||||
logfont.lfUnderline = 0;
|
||||
logfont.lfStrikeOut = 0;
|
||||
}
|
||||
/* call CreateFontIndirect, which requires us to set the values of the logfont we pass in */
|
||||
if (!GetObjectW(infoPtr->hFont, sizeof(logfont), &logfont))
|
||||
GetObjectW(GetStockObject(DEFAULT_GUI_FONT), sizeof(logfont), &logfont);
|
||||
|
||||
logfont.lfEscapement = nEscapement;
|
||||
logfont.lfOrientation = nOrientation;
|
||||
|
|
|
@ -945,11 +945,6 @@ TOOLBAR_DrawButton (const TOOLBAR_INFO *infoPtr, TBUTTON_INFO *btnPtr, HDC hdc,
|
|||
tbcd.clrHighlightHotTrack = 0;
|
||||
tbcd.nStringBkMode = TRANSPARENT;
|
||||
tbcd.nHLStringBkMode = OPAQUE;
|
||||
/* MSDN says that this is the text rectangle.
|
||||
* But (why always a but) tracing of v5.7 of native shows
|
||||
* that this is really a *relative* rectangle based on the
|
||||
* the nmcd.rc. Also the left and top are always 0 ignoring
|
||||
* any bitmap that might be present. */
|
||||
tbcd.rcText.left = 0;
|
||||
tbcd.rcText.top = 0;
|
||||
tbcd.rcText.right = rcText.right - rc.left;
|
||||
|
@ -5118,7 +5113,6 @@ TOOLBAR_GetIdealSize (const TOOLBAR_INFO *infoPtr, WPARAM wParam, LPARAM lParam)
|
|||
switch(wParam) {
|
||||
case 0:
|
||||
if (lpsize->cx == -1) {
|
||||
/* **** this is wrong, native measures each button and sets it */
|
||||
lpsize->cx = infoPtr->rcBound.right - infoPtr->rcBound.left;
|
||||
}
|
||||
else if(HIWORD(lpsize->cx)) {
|
||||
|
@ -5481,8 +5475,7 @@ TOOLBAR_LButtonDown (TOOLBAR_INFO *infoPtr, WPARAM wParam, LPARAM lParam)
|
|||
btnPtr->bDropDownPressed = FALSE;
|
||||
InvalidateRect(infoPtr->hwndSelf, &btnPtr->rect, TRUE);
|
||||
|
||||
/* find and set hot item
|
||||
* NOTE: native doesn't do this, but that is a bug */
|
||||
/* find and set hot item */
|
||||
GetCursorPos(&pt);
|
||||
ScreenToClient(infoPtr->hwndSelf, &pt);
|
||||
nHit = TOOLBAR_InternalHitTest(infoPtr, &pt, &button);
|
||||
|
@ -5663,9 +5656,6 @@ TOOLBAR_LButtonUp (TOOLBAR_INFO *infoPtr, WPARAM wParam, LPARAM lParam)
|
|||
TOOLBAR_SendNotify (&hdr, infoPtr,
|
||||
NM_RELEASEDCAPTURE);
|
||||
|
||||
/* native issues TBN_ENDDRAG here, if _LBUTTONDOWN issued the
|
||||
* TBN_BEGINDRAG
|
||||
*/
|
||||
memset(&nmtb, 0, sizeof(nmtb));
|
||||
nmtb.iItem = btnPtr->idCommand;
|
||||
TOOLBAR_SendNotify ((NMHDR *) &nmtb, infoPtr,
|
||||
|
@ -5957,39 +5947,6 @@ TOOLBAR_NCCreate (HWND hwnd, WPARAM wParam, const CREATESTRUCTW *lpcs)
|
|||
SetWindowLongPtrW (hwnd, GWLP_HINSTANCE, (LONG_PTR)hInst);
|
||||
}
|
||||
|
||||
/* native control does:
|
||||
* Get a lot of colors and brushes
|
||||
* WM_NOTIFYFORMAT
|
||||
* SystemParametersInfoW(0x1f, 0x3c, adr1, 0)
|
||||
* CreateFontIndirectW(adr1)
|
||||
* CreateBitmap(0x27, 0x24, 1, 1, 0)
|
||||
* hdc = GetDC(toolbar)
|
||||
* GetSystemMetrics(0x48)
|
||||
* fnt2=CreateFontW(0xe, 0, 0, 0, 0x190, 0, 0, 0, 0, 2,
|
||||
* 0, 0, 0, 0, "MARLETT")
|
||||
* oldfnt = SelectObject(hdc, fnt2)
|
||||
* GetCharWidthW(hdc, 0x36, 0x36, adr2)
|
||||
* GetTextMetricsW(hdc, adr3)
|
||||
* SelectObject(hdc, oldfnt)
|
||||
* DeleteObject(fnt2)
|
||||
* ReleaseDC(hdc)
|
||||
* InvalidateRect(toolbar, 0, 1)
|
||||
* SetWindowLongW(toolbar, 0, addr)
|
||||
* SetWindowLongW(toolbar, -16, xxx) **sometimes**
|
||||
* WM_STYLECHANGING
|
||||
* CallWinEx old new
|
||||
* ie 1 0x56000a4c 0x46000a4c 0x56008a4d
|
||||
* ie 2 0x4600094c 0x4600094c 0x4600894d
|
||||
* ie 3 0x56000b4c 0x46000b4c 0x56008b4d
|
||||
* rebar 0x50008844 0x40008844 0x50008845
|
||||
* pager 0x50000844 0x40000844 0x50008845
|
||||
* IC35mgr 0x5400084e **nochange**
|
||||
* on entry to _NCCREATE 0x5400084e
|
||||
* rowlist 0x5400004e **nochange**
|
||||
* on entry to _NCCREATE 0x5400004e
|
||||
*
|
||||
*/
|
||||
|
||||
/* I think the code below is a bug, but it is the way that the native
|
||||
* controls seem to work. The effect is that if the user of TBSTYLE_FLAT
|
||||
* forgets to specify TBSTYLE_TRANSPARENT but does specify either
|
||||
|
|
|
@ -499,12 +499,12 @@ TRACKBAR_DrawOneTic (const TRACKBAR_INFO *infoPtr, HDC hdc, LONG ticPos, int fla
|
|||
offsetthumb = (infoPtr->rcThumb.bottom - infoPtr->rcThumb.top)/2;
|
||||
rcTics.left = infoPtr->rcThumb.left - 2;
|
||||
rcTics.right = infoPtr->rcThumb.right + 2;
|
||||
rcTics.top = infoPtr->rcChannel.top + offsetthumb + 1;
|
||||
rcTics.bottom = infoPtr->rcChannel.bottom - offsetthumb;
|
||||
rcTics.top = infoPtr->rcChannel.top + offsetthumb;
|
||||
rcTics.bottom = infoPtr->rcChannel.bottom - offsetthumb - 1;
|
||||
} else {
|
||||
offsetthumb = (infoPtr->rcThumb.right - infoPtr->rcThumb.left)/2;
|
||||
rcTics.left = infoPtr->rcChannel.left + offsetthumb + 1;
|
||||
rcTics.right = infoPtr->rcChannel.right - offsetthumb;
|
||||
rcTics.left = infoPtr->rcChannel.left + offsetthumb;
|
||||
rcTics.right = infoPtr->rcChannel.right - offsetthumb - 1;
|
||||
rcTics.top = infoPtr->rcThumb.top - 2;
|
||||
rcTics.bottom = infoPtr->rcThumb.bottom + 2;
|
||||
}
|
||||
|
@ -612,19 +612,105 @@ TRACKBAR_DrawTics (const TRACKBAR_INFO *infoPtr, HDC hdc)
|
|||
}
|
||||
}
|
||||
|
||||
static void
|
||||
TRACKBAR_DrawThumb (const TRACKBAR_INFO *infoPtr, HDC hdc)
|
||||
#define POINT_COUNT 6
|
||||
static int
|
||||
TRACKBAR_FillThumb (const TRACKBAR_INFO *infoPtr, HDC hdc, HBRUSH hbrush)
|
||||
{
|
||||
HBRUSH oldbr;
|
||||
HPEN oldpen;
|
||||
RECT thumb = infoPtr->rcThumb;
|
||||
int BlackUntil = 3;
|
||||
int PointCount = 6;
|
||||
const RECT *thumb = &infoPtr->rcThumb;
|
||||
POINT points[6];
|
||||
int fillClr;
|
||||
int PointDepth;
|
||||
HBRUSH oldbr;
|
||||
|
||||
if (infoPtr->dwStyle & TBS_BOTH)
|
||||
{
|
||||
FillRect(hdc, thumb, hbrush);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (infoPtr->dwStyle & TBS_VERT)
|
||||
{
|
||||
PointDepth = (thumb->bottom - thumb->top) / 2;
|
||||
if (infoPtr->dwStyle & TBS_LEFT)
|
||||
{
|
||||
points[0].x = thumb->right-1;
|
||||
points[0].y = thumb->top;
|
||||
points[1].x = thumb->right-1;
|
||||
points[1].y = thumb->bottom-1;
|
||||
points[2].x = thumb->left + PointDepth;
|
||||
points[2].y = thumb->bottom-1;
|
||||
points[3].x = thumb->left;
|
||||
points[3].y = thumb->top + PointDepth;
|
||||
points[4].x = thumb->left + PointDepth;
|
||||
points[4].y = thumb->top;
|
||||
points[5].x = points[0].x;
|
||||
points[5].y = points[0].y;
|
||||
}
|
||||
else
|
||||
{
|
||||
points[0].x = thumb->right;
|
||||
points[0].y = thumb->top + PointDepth;
|
||||
points[1].x = thumb->right - PointDepth;
|
||||
points[1].y = thumb->bottom-1;
|
||||
points[2].x = thumb->left;
|
||||
points[2].y = thumb->bottom-1;
|
||||
points[3].x = thumb->left;
|
||||
points[3].y = thumb->top;
|
||||
points[4].x = thumb->right - PointDepth;
|
||||
points[4].y = thumb->top;
|
||||
points[5].x = points[0].x;
|
||||
points[5].y = points[0].y;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
PointDepth = (thumb->right - thumb->left) / 2;
|
||||
if (infoPtr->dwStyle & TBS_TOP)
|
||||
{
|
||||
points[0].x = thumb->left + PointDepth;
|
||||
points[0].y = thumb->top+1;
|
||||
points[1].x = thumb->right-1;
|
||||
points[1].y = thumb->top + PointDepth + 1;
|
||||
points[2].x = thumb->right-1;
|
||||
points[2].y = thumb->bottom-1;
|
||||
points[3].x = thumb->left;
|
||||
points[3].y = thumb->bottom-1;
|
||||
points[4].x = thumb->left;
|
||||
points[4].y = thumb->top + PointDepth + 1;
|
||||
points[5].x = points[0].x;
|
||||
points[5].y = points[0].y;
|
||||
}
|
||||
else
|
||||
{
|
||||
points[0].x = thumb->right-1;
|
||||
points[0].y = thumb->top;
|
||||
points[1].x = thumb->right-1;
|
||||
points[1].y = thumb->bottom - PointDepth - 1;
|
||||
points[2].x = thumb->left + PointDepth;
|
||||
points[2].y = thumb->bottom-1;
|
||||
points[3].x = thumb->left;
|
||||
points[3].y = thumb->bottom - PointDepth - 1;
|
||||
points[4].x = thumb->left;
|
||||
points[4].y = thumb->top;
|
||||
points[5].x = points[0].x;
|
||||
points[5].y = points[0].y;
|
||||
}
|
||||
}
|
||||
|
||||
oldbr = SelectObject(hdc, hbrush);
|
||||
SetPolyFillMode(hdc, WINDING);
|
||||
Polygon(hdc, points, sizeof(points) / sizeof(points[0]));
|
||||
SelectObject(hdc, oldbr);
|
||||
|
||||
return PointDepth;
|
||||
}
|
||||
|
||||
static void
|
||||
TRACKBAR_DrawThumb (TRACKBAR_INFO *infoPtr, HDC hdc)
|
||||
{
|
||||
HTHEME theme = GetWindowTheme (infoPtr->hwndSelf);
|
||||
|
||||
int PointDepth;
|
||||
HBRUSH brush;
|
||||
|
||||
if (theme)
|
||||
{
|
||||
int partId;
|
||||
|
@ -645,113 +731,115 @@ TRACKBAR_DrawThumb (const TRACKBAR_INFO *infoPtr, HDC hdc)
|
|||
else
|
||||
stateId = TUS_NORMAL;
|
||||
|
||||
DrawThemeBackground (theme, hdc, partId, stateId, &thumb, 0);
|
||||
DrawThemeBackground (theme, hdc, partId, stateId, &infoPtr->rcThumb, NULL);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
fillClr = infoPtr->flags & TB_DRAG_MODE ? COLOR_BTNHILIGHT : COLOR_BTNFACE;
|
||||
oldbr = SelectObject (hdc, GetSysColorBrush(fillClr));
|
||||
SetPolyFillMode (hdc, WINDING);
|
||||
if (infoPtr->dwStyle & WS_DISABLED || infoPtr->flags & TB_DRAG_MODE)
|
||||
{
|
||||
if (comctl32_color.clr3dHilight == comctl32_color.clrWindow)
|
||||
brush = COMCTL32_hPattern55AABrush;
|
||||
else
|
||||
brush = GetSysColorBrush(COLOR_SCROLLBAR);
|
||||
|
||||
SetTextColor(hdc, comctl32_color.clr3dFace);
|
||||
SetBkColor(hdc, comctl32_color.clr3dHilight);
|
||||
}
|
||||
else
|
||||
brush = GetSysColorBrush(COLOR_BTNFACE);
|
||||
|
||||
PointDepth = TRACKBAR_FillThumb(infoPtr, hdc, brush);
|
||||
|
||||
if (infoPtr->dwStyle & TBS_BOTH)
|
||||
{
|
||||
points[0].x=thumb.right;
|
||||
points[0].y=thumb.top;
|
||||
points[1].x=thumb.right;
|
||||
points[1].y=thumb.bottom;
|
||||
points[2].x=thumb.left;
|
||||
points[2].y=thumb.bottom;
|
||||
points[3].x=thumb.left;
|
||||
points[3].y=thumb.top;
|
||||
points[4].x=points[0].x;
|
||||
points[4].y=points[0].y;
|
||||
PointCount = 5;
|
||||
BlackUntil = 3;
|
||||
DrawEdge(hdc, &infoPtr->rcThumb, EDGE_RAISED, BF_RECT | BF_SOFT);
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
RECT thumb = infoPtr->rcThumb;
|
||||
|
||||
if (infoPtr->dwStyle & TBS_VERT)
|
||||
{
|
||||
PointDepth = (thumb.bottom - thumb.top) / 2;
|
||||
if (infoPtr->dwStyle & TBS_LEFT)
|
||||
{
|
||||
points[0].x=thumb.right;
|
||||
points[0].y=thumb.top;
|
||||
points[1].x=thumb.right;
|
||||
points[1].y=thumb.bottom;
|
||||
points[2].x=thumb.left + PointDepth;
|
||||
points[2].y=thumb.bottom;
|
||||
points[3].x=thumb.left;
|
||||
points[3].y=(thumb.bottom - thumb.top) / 2 + thumb.top + 1;
|
||||
points[4].x=thumb.left + PointDepth;
|
||||
points[4].y=thumb.top;
|
||||
points[5].x=points[0].x;
|
||||
points[5].y=points[0].y;
|
||||
BlackUntil = 4;
|
||||
/* rectangular part */
|
||||
thumb.left += PointDepth;
|
||||
DrawEdge(hdc, &thumb, EDGE_RAISED, BF_TOP | BF_RIGHT | BF_BOTTOM | BF_SOFT);
|
||||
|
||||
/* light edge */
|
||||
thumb.left -= PointDepth;
|
||||
thumb.right = thumb.left + PointDepth;
|
||||
thumb.bottom = infoPtr->rcThumb.top + PointDepth + 1;
|
||||
thumb.top = infoPtr->rcThumb.top;
|
||||
DrawEdge(hdc, &thumb, EDGE_RAISED, BF_DIAGONAL_ENDTOPRIGHT | BF_SOFT);
|
||||
|
||||
/* shadowed edge */
|
||||
thumb.top += PointDepth;
|
||||
thumb.bottom += PointDepth;
|
||||
DrawEdge(hdc, &thumb, EDGE_SUNKEN, BF_DIAGONAL_ENDTOPLEFT | BF_SOFT);
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
points[0].x=thumb.right;
|
||||
points[0].y=(thumb.bottom - thumb.top) / 2 + thumb.top + 1;
|
||||
points[1].x=thumb.right - PointDepth;
|
||||
points[1].y=thumb.bottom;
|
||||
points[2].x=thumb.left;
|
||||
points[2].y=thumb.bottom;
|
||||
points[3].x=thumb.left;
|
||||
points[3].y=thumb.top;
|
||||
points[4].x=thumb.right - PointDepth;
|
||||
points[4].y=thumb.top;
|
||||
points[5].x=points[0].x;
|
||||
points[5].y=points[0].y;
|
||||
/* rectangular part */
|
||||
thumb.right -= PointDepth;
|
||||
DrawEdge(hdc, &thumb, EDGE_RAISED, BF_TOP | BF_LEFT | BF_BOTTOM | BF_SOFT);
|
||||
|
||||
/* light edge */
|
||||
thumb.left = thumb.right;
|
||||
thumb.right += PointDepth + 1;
|
||||
thumb.bottom = infoPtr->rcThumb.top + PointDepth + 1;
|
||||
thumb.top = infoPtr->rcThumb.top;
|
||||
DrawEdge(hdc, &thumb, EDGE_RAISED, BF_DIAGONAL_ENDTOPLEFT | BF_SOFT);
|
||||
|
||||
/* shadowed edge */
|
||||
thumb.top += PointDepth;
|
||||
thumb.bottom += PointDepth;
|
||||
DrawEdge(hdc, &thumb, EDGE_RAISED, BF_DIAGONAL_ENDBOTTOMLEFT | BF_SOFT);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
PointDepth = (thumb.right - thumb.left) / 2;
|
||||
if (infoPtr->dwStyle & TBS_TOP)
|
||||
{
|
||||
points[0].x=(thumb.right - thumb.left) / 2 + thumb.left + 1;
|
||||
points[0].y=thumb.top;
|
||||
points[1].x=thumb.right;
|
||||
points[1].y=thumb.top + PointDepth;
|
||||
points[2].x=thumb.right;
|
||||
points[2].y=thumb.bottom;
|
||||
points[3].x=thumb.left;
|
||||
points[3].y=thumb.bottom;
|
||||
points[4].x=thumb.left;
|
||||
points[4].y=thumb.top + PointDepth;
|
||||
points[5].x=points[0].x;
|
||||
points[5].y=points[0].y;
|
||||
BlackUntil = 4;
|
||||
/* rectangular part */
|
||||
thumb.top += PointDepth;
|
||||
DrawEdge(hdc, &thumb, EDGE_RAISED, BF_LEFT | BF_BOTTOM | BF_RIGHT | BF_SOFT);
|
||||
|
||||
/* light edge */
|
||||
thumb.left = infoPtr->rcThumb.left;
|
||||
thumb.right = thumb.left + PointDepth;
|
||||
thumb.bottom = infoPtr->rcThumb.top + PointDepth + 1;
|
||||
thumb.top -= PointDepth;
|
||||
DrawEdge(hdc, &thumb, EDGE_RAISED, BF_DIAGONAL_ENDTOPRIGHT | BF_SOFT);
|
||||
|
||||
/* shadowed edge */
|
||||
thumb.left += PointDepth;
|
||||
thumb.right += PointDepth;
|
||||
DrawEdge(hdc, &thumb, EDGE_RAISED, BF_DIAGONAL_ENDBOTTOMRIGHT | BF_SOFT);
|
||||
}
|
||||
else
|
||||
{
|
||||
points[0].x=thumb.right;
|
||||
points[0].y=thumb.top;
|
||||
points[1].x=thumb.right;
|
||||
points[1].y=thumb.bottom - PointDepth;
|
||||
points[2].x=(thumb.right - thumb.left) / 2 + thumb.left + 1;
|
||||
points[2].y=thumb.bottom;
|
||||
points[3].x=thumb.left;
|
||||
points[3].y=thumb.bottom - PointDepth;
|
||||
points[4].x=thumb.left;
|
||||
points[4].y=thumb.top;
|
||||
points[5].x=points[0].x;
|
||||
points[5].y=points[0].y;
|
||||
/* rectangular part */
|
||||
thumb.bottom -= PointDepth;
|
||||
DrawEdge(hdc, &thumb, EDGE_RAISED, BF_LEFT | BF_TOP | BF_RIGHT | BF_SOFT);
|
||||
|
||||
/* light edge */
|
||||
thumb.left = infoPtr->rcThumb.left;
|
||||
thumb.right = thumb.left + PointDepth;
|
||||
thumb.top = infoPtr->rcThumb.bottom - PointDepth - 1;
|
||||
thumb.bottom += PointDepth;
|
||||
DrawEdge(hdc, &thumb, EDGE_RAISED, BF_DIAGONAL_ENDTOPLEFT | BF_SOFT);
|
||||
|
||||
/* shadowed edge */
|
||||
thumb.left += PointDepth;
|
||||
thumb.right += PointDepth;
|
||||
DrawEdge(hdc, &thumb, EDGE_RAISED, BF_DIAGONAL_ENDBOTTOMLEFT | BF_SOFT);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/* Draw the thumb now */
|
||||
Polygon (hdc, points, PointCount);
|
||||
oldpen = SelectObject(hdc, GetStockObject(BLACK_PEN));
|
||||
Polyline(hdc,points, BlackUntil);
|
||||
SelectObject(hdc, GetStockObject(WHITE_PEN));
|
||||
Polyline(hdc, &points[BlackUntil-1], PointCount+1-BlackUntil);
|
||||
SelectObject(hdc, oldpen);
|
||||
SelectObject(hdc, oldbr);
|
||||
}
|
||||
|
||||
|
||||
|
@ -1295,9 +1383,11 @@ static inline LRESULT
|
|||
TRACKBAR_SetThumbLength (TRACKBAR_INFO *infoPtr, UINT iLength)
|
||||
{
|
||||
if (infoPtr->dwStyle & TBS_FIXEDLENGTH) {
|
||||
/* We're not supposed to check if it's really changed or not,
|
||||
just repaint in any case. */
|
||||
infoPtr->uThumbLen = iLength;
|
||||
infoPtr->flags |= TB_THUMBSIZECHANGED;
|
||||
InvalidateRect (infoPtr->hwndSelf, &infoPtr->rcThumb, FALSE);
|
||||
TRACKBAR_InvalidateAll(infoPtr);
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
@ -1571,9 +1661,15 @@ TRACKBAR_SetFocus (TRACKBAR_INFO *infoPtr)
|
|||
static LRESULT
|
||||
TRACKBAR_Size (TRACKBAR_INFO *infoPtr)
|
||||
{
|
||||
TRACKBAR_CalcChannel (infoPtr);
|
||||
TRACKBAR_UpdateThumb (infoPtr);
|
||||
if (infoPtr->dwStyle & TBS_FIXEDLENGTH)
|
||||
{
|
||||
TRACKBAR_CalcChannel(infoPtr);
|
||||
TRACKBAR_UpdateThumb(infoPtr);
|
||||
}
|
||||
else
|
||||
TRACKBAR_InitializeThumb(infoPtr);
|
||||
TRACKBAR_AlignBuddies (infoPtr);
|
||||
TRACKBAR_InvalidateAll(infoPtr);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -1747,6 +1843,19 @@ TRACKBAR_KeyUp (const TRACKBAR_INFO *infoPtr, INT nVirtKey)
|
|||
}
|
||||
|
||||
|
||||
static LRESULT
|
||||
TRACKBAR_Enable (TRACKBAR_INFO *infoPtr, BOOL enable)
|
||||
{
|
||||
if (enable)
|
||||
infoPtr->dwStyle &= ~WS_DISABLED;
|
||||
else
|
||||
infoPtr->dwStyle |= WS_DISABLED;
|
||||
|
||||
InvalidateRect(infoPtr->hwndSelf, &infoPtr->rcThumb, TRUE);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
static LRESULT WINAPI
|
||||
TRACKBAR_WindowProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
|
@ -1874,7 +1983,8 @@ TRACKBAR_WindowProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
|||
case WM_DESTROY:
|
||||
return TRACKBAR_Destroy (infoPtr);
|
||||
|
||||
/* case WM_ENABLE: */
|
||||
case WM_ENABLE:
|
||||
return TRACKBAR_Enable (infoPtr, (BOOL)wParam);
|
||||
|
||||
case WM_ERASEBKGND:
|
||||
return 0;
|
||||
|
|
|
@ -2526,7 +2526,7 @@ TREEVIEW_DrawItem(const TREEVIEW_INFO *infoPtr, HDC hdc, TREEVIEW_ITEM *item)
|
|||
* - Otherwise - use background color
|
||||
*/
|
||||
if ((item->state & TVIS_DROPHILITED) || ((item == infoPtr->focusedItem) && !(item->state & TVIS_SELECTED)) ||
|
||||
((item->state & TVIS_SELECTED) && (!infoPtr->focusedItem) &&
|
||||
((item->state & TVIS_SELECTED) && (!infoPtr->focusedItem || item == infoPtr->focusedItem) &&
|
||||
(inFocus || (infoPtr->dwStyle & TVS_SHOWSELALWAYS))))
|
||||
{
|
||||
if ((item->state & TVIS_DROPHILITED) || inFocus)
|
||||
|
@ -3301,6 +3301,8 @@ TREEVIEW_Collapse(TREEVIEW_INFO *infoPtr, TREEVIEW_ITEM *item,
|
|||
TREEVIEW_RemoveAllChildren(infoPtr, item);
|
||||
item->cChildren = old_cChildren;
|
||||
}
|
||||
if (!wasExpanded)
|
||||
return FALSE;
|
||||
|
||||
if (item->firstChild)
|
||||
{
|
||||
|
|
|
@ -59,7 +59,7 @@ reactos/dll/win32/browseui # Out of sync
|
|||
reactos/dll/win32/cabinet # Synced to Wine-1.5.26
|
||||
reactos/dll/win32/clusapi # Synced to Wine-1.7.1
|
||||
reactos/dll/win32/comcat # Synced to Wine-1.7.1
|
||||
reactos/dll/win32/comctl32 # Synced to Wine 1.5.26
|
||||
reactos/dll/win32/comctl32 # Synced to Wine 1.7.1
|
||||
reactos/dll/win32/comdlg32 # Synced to Wine 1.3.37
|
||||
reactos/dll/win32/compstui # Synced to Wine-1.5.19
|
||||
reactos/dll/win32/credui # Synced to Wine-1.5.4
|
||||
|
|
Loading…
Reference in a new issue