- Sync comctl32 with Wine 1.1.20 (without listview.c)

- Sync comdlg32 with Wine 1.1.20

svn path=/trunk/; revision=40798
This commit is contained in:
Dmitry Chapyshev 2009-05-05 16:26:56 +00:00
parent 57f9b71712
commit 193acd687e
13 changed files with 427 additions and 160 deletions

View file

@ -1669,6 +1669,14 @@ static LRESULT COMBOEX_Size (COMBOEX_INFO *infoPtr, INT width, INT height)
}
static LRESULT COMBOEX_SetRedraw(COMBOEX_INFO *infoPtr, WPARAM wParam, LPARAM lParam)
{
LRESULT ret = DefWindowProcW( infoPtr->hwndSelf, WM_SETREDRAW, wParam, lParam );
if (wParam) RedrawWindow( infoPtr->hwndSelf, NULL, 0, RDW_INVALIDATE|RDW_ERASE|RDW_ALLCHILDREN );
return ret;
}
static LRESULT COMBOEX_WindowPosChanging (COMBOEX_INFO *infoPtr, WINDOWPOS *wp)
{
RECT cbx_wrect, cbx_crect, cb_wrect;
@ -2302,6 +2310,9 @@ COMBOEX_WindowProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
case WM_SIZE:
return COMBOEX_Size (infoPtr, LOWORD(lParam), HIWORD(lParam));
case WM_SETREDRAW:
return COMBOEX_SetRedraw(infoPtr, wParam, lParam);
case WM_WINDOWPOSCHANGING:
return COMBOEX_WindowPosChanging (infoPtr, (WINDOWPOS *)lParam);

View file

@ -155,7 +155,7 @@ static inline void imagelist_copy_images( HIMAGELIST himl, HDC hdcSrc, HDC hdcDe
* This function CANNOT be used to reduce the number of images.
*/
static void
IMAGELIST_InternalExpandBitmaps (HIMAGELIST himl, INT nImageCount, INT cy)
IMAGELIST_InternalExpandBitmaps (HIMAGELIST himl, INT nImageCount, INT cx, INT cy)
{
HDC hdcBitmap;
HBITMAP hbmNewBitmap, hbmNull;
@ -166,14 +166,15 @@ IMAGELIST_InternalExpandBitmaps (HIMAGELIST himl, INT nImageCount, INT cy)
&& (himl->cy >= cy))
return;
if (cx == 0) cx = himl->cx;
nNewCount = himl->cCurImage + nImageCount + himl->cGrow;
imagelist_get_bitmap_size(himl, nNewCount, himl->cx, &sz);
imagelist_get_bitmap_size(himl, nNewCount, cx, &sz);
TRACE("Create expanded bitmaps : himl=%p x=%d y=%d count=%d\n", himl, sz.cx, cy, nNewCount);
hdcBitmap = CreateCompatibleDC (0);
hbmNewBitmap = ImageList_CreateImage(hdcBitmap, himl, nNewCount, himl->cx);
hbmNewBitmap = ImageList_CreateImage(hdcBitmap, himl, nNewCount, cx);
if (hbmNewBitmap == 0)
ERR("creating new image bitmap (x=%d y=%d)!\n", sz.cx, cy);
@ -247,7 +248,7 @@ ImageList_Add (HIMAGELIST himl, HBITMAP hbmImage, HBITMAP hbmMask)
nImageCount = bmp.bmWidth / himl->cx;
IMAGELIST_InternalExpandBitmaps (himl, nImageCount, bmp.bmHeight);
IMAGELIST_InternalExpandBitmaps (himl, nImageCount, bmp.bmWidth, bmp.bmHeight);
hdcBitmap = CreateCompatibleDC(0);
@ -349,7 +350,7 @@ ImageList_AddMasked (HIMAGELIST himl, HBITMAP hBitmap, COLORREF clrMask)
else
nImageCount = 0;
IMAGELIST_InternalExpandBitmaps (himl, nImageCount, bmp.bmHeight);
IMAGELIST_InternalExpandBitmaps (himl, nImageCount, bmp.bmWidth, bmp.bmHeight);
nIndex = himl->cCurImage;
himl->cCurImage += nImageCount;
@ -2303,7 +2304,7 @@ ImageList_ReplaceIcon (HIMAGELIST himl, INT nIndex, HICON hIcon)
if (nIndex == -1) {
if (himl->cCurImage + 1 > himl->cMaxImage)
IMAGELIST_InternalExpandBitmaps (himl, 1, 0);
IMAGELIST_InternalExpandBitmaps (himl, 1, 0, 0);
nIndex = himl->cCurImage;
himl->cCurImage++;

View file

@ -77,6 +77,29 @@ static const WCHAR IP_SUBCLASS_PROP[] =
static LRESULT CALLBACK
IPADDRESS_SubclassProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
static void IPADDRESS_UpdateText (const IPADDRESS_INFO *infoPtr)
{
static const WCHAR zero[2] = {'0', 0};
static const WCHAR dot[2] = {'.', 0};
WCHAR field[4];
WCHAR ip[16];
INT i;
ip[0] = 0;
for (i = 0; i < 4; i++) {
if (GetWindowTextW (infoPtr->Part[i].EditHwnd, field, 4))
strcatW(ip, field);
else
/* empty edit treated as zero */
strcatW(ip, zero);
if (i != 3)
strcatW(ip, dot);
}
SetWindowTextW(infoPtr->Self, ip);
}
static LRESULT IPADDRESS_Notify (const IPADDRESS_INFO *infoPtr, UINT command)
{
HWND hwnd = infoPtr->Self;
@ -219,6 +242,8 @@ static LRESULT IPADDRESS_Create (HWND hwnd, const CREATESTRUCTA *lpCreate)
EnableWindow(part->EditHwnd, infoPtr->Enabled);
}
IPADDRESS_UpdateText (infoPtr);
return 0;
}
@ -483,7 +508,7 @@ IPADDRESS_SubclassProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
return return_val;
} else if (len == 3 && startsel==endsel && endsel==len)
IPADDRESS_GotoNextField (infoPtr, index, POS_SELALL);
else if (len < 3) break;
else if (len < 3 || startsel != endsel) break;
} else if(c == '.' || c == ' ') {
if(len && startsel==endsel && startsel != 0) {
IPADDRESS_GotoNextField(infoPtr, index, POS_SELALL);
@ -561,6 +586,7 @@ IPADDRESS_WindowProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
case WM_COMMAND:
switch(wParam >> 16) {
case EN_CHANGE:
IPADDRESS_UpdateText(infoPtr);
IPADDRESS_Notify(infoPtr, EN_CHANGE);
break;
case EN_KILLFOCUS:

View file

@ -32,7 +32,7 @@
* TODO:
*
* Styles:
* TCS_MULTISELECT
* TCS_MULTISELECT - implement for VK_SPACE selection
* TCS_RIGHT
* TCS_RIGHTJUSTIFY
* TCS_SCROLLOPPOSITE
@ -40,24 +40,14 @@
* TCIF_RTLREADING
*
* Extended Styles:
* TCS_EX_FLATSEPARATORS
* TCS_EX_REGISTERDROP
*
* States:
* TCIS_BUTTONPRESSED
*
* Notifications:
* NM_RELEASEDCAPTURE
* TCN_FOCUSCHANGE
* TCN_GETOBJECT
* TCN_KEYDOWN
*
* Messages:
* TCM_REMOVEIMAGE
* TCM_DESELECTALL
* TCM_GETEXTENDEDSTYLE
* TCM_SETEXTENDEDSTYLE
*
* Macros:
* TabCtrl_AdjustRect
*
@ -127,6 +117,9 @@ typedef struct
BOOL bUnicode; /* Unicode control? */
HWND hwndUpDown; /* Updown control used for scrolling */
INT cbInfo; /* Number of bytes of caller supplied info per tab */
DWORD exStyle; /* Extended style used, currently:
TCS_EX_FLATSEPARATORS, TCS_EX_REGISTERDROP */
} TAB_INFO;
/******************************************************************************
@ -166,6 +159,7 @@ static const WCHAR themeClass[] = { 'T','a','b',0 };
static void TAB_InvalidateTabArea(const TAB_INFO *);
static void TAB_EnsureSelectionVisible(TAB_INFO *);
static void TAB_DrawItemInterior(const TAB_INFO *, HDC, INT, RECT*);
static LRESULT TAB_DeselectAll(TAB_INFO *, BOOL);
static BOOL
TAB_SendSimpleNotify (const TAB_INFO *infoPtr, UINT code)
@ -253,6 +247,9 @@ static inline LRESULT TAB_SetCurSel (TAB_INFO *infoPtr, INT iItem)
return -1;
else {
if (infoPtr->iSelected != iItem) {
TAB_GetItem(infoPtr, prevItem)->dwState &= ~TCIS_BUTTONPRESSED;
TAB_GetItem(infoPtr, iItem)->dwState |= TCIS_BUTTONPRESSED;
infoPtr->iSelected=iItem;
infoPtr->uFocus=iItem;
TAB_EnsureSelectionVisible(infoPtr);
@ -490,12 +487,8 @@ static LRESULT TAB_KeyUp(TAB_INFO* infoPtr, WPARAM keyCode)
{
if (!TAB_SendSimpleNotify(infoPtr, TCN_SELCHANGING))
{
infoPtr->iSelected = newItem;
infoPtr->uFocus = newItem;
TAB_SetCurSel(infoPtr, newItem);
TAB_SendSimpleNotify(infoPtr, TCN_SELCHANGE);
TAB_EnsureSelectionVisible(infoPtr);
TAB_InvalidateTabArea(infoPtr);
}
}
@ -592,6 +585,7 @@ TAB_LButtonDown (TAB_INFO *infoPtr, WPARAM wParam, LPARAM lParam)
POINT pt;
INT newItem;
UINT dummy;
LONG lStyle = GetWindowLongW(infoPtr->hwnd, GWL_STYLE);
if (infoPtr->hwndToolTip)
TAB_RelayEvent (infoPtr->hwndToolTip, infoPtr->hwnd,
@ -612,19 +606,43 @@ TAB_LButtonDown (TAB_INFO *infoPtr, WPARAM wParam, LPARAM lParam)
TRACE("On Tab, item %d\n", newItem);
if (newItem != -1 && infoPtr->iSelected != newItem)
if ((newItem != -1) && (infoPtr->iSelected != newItem))
{
if (!TAB_SendSimpleNotify(infoPtr, TCN_SELCHANGING))
if ((lStyle & TCS_BUTTONS) && (lStyle & TCS_MULTISELECT) &&
(wParam & MK_CONTROL))
{
infoPtr->iSelected = newItem;
infoPtr->uFocus = newItem;
RECT r;
/* toggle multiselection */
TAB_GetItem(infoPtr, newItem)->dwState ^= TCIS_BUTTONPRESSED;
if (TAB_InternalGetItemRect (infoPtr, newItem, &r, NULL))
InvalidateRect (infoPtr->hwnd, &r, TRUE);
}
else
{
INT i;
BOOL pressed = FALSE;
/* any button pressed ? */
for (i = 0; i < infoPtr->uNumItem; i++)
if ((TAB_GetItem (infoPtr, i)->dwState & TCIS_BUTTONPRESSED) &&
(infoPtr->iSelected != i))
{
pressed = TRUE;
break;
}
TAB_SendSimpleNotify(infoPtr, TCN_SELCHANGING);
if (pressed)
TAB_DeselectAll (infoPtr, FALSE);
else
TAB_SetCurSel(infoPtr, newItem);
TAB_SendSimpleNotify(infoPtr, TCN_SELCHANGE);
TAB_EnsureSelectionVisible(infoPtr);
TAB_InvalidateTabArea(infoPtr);
}
}
return 0;
}
@ -1434,7 +1452,6 @@ TAB_EraseTabInterior(const TAB_INFO *infoPtr, HDC hdc, INT iItem, RECT *drawRect
BOOL deleteBrush = TRUE;
RECT rTemp = *drawRect;
InflateRect(&rTemp, -2, -2);
if (lStyle & TCS_BUTTONS)
{
if (iItem == infoPtr->iSelected)
@ -1463,9 +1480,10 @@ TAB_EraseTabInterior(const TAB_INFO *infoPtr, HDC hdc, INT iItem, RECT *drawRect
{
if (lStyle & TCS_FLATBUTTONS)
{
FillRect(hdc, drawRect, hbr);
InflateRect(&rTemp, 2, 2);
FillRect(hdc, &rTemp, hbr);
if (iItem == infoPtr->iHotTracked)
DrawEdge(hdc, drawRect, EDGE_RAISED, BF_SOFT|BF_RECT);
DrawEdge(hdc, &rTemp, BDR_RAISEDINNER, BF_RECT);
}
else
FillRect(hdc, &rTemp, hbr);
@ -1474,10 +1492,23 @@ TAB_EraseTabInterior(const TAB_INFO *infoPtr, HDC hdc, INT iItem, RECT *drawRect
}
else /* !TCS_BUTTONS */
{
InflateRect(&rTemp, -2, -2);
if (!GetWindowTheme (infoPtr->hwnd))
FillRect(hdc, &rTemp, hbr);
}
/* highlighting is drawn on top of previous fills */
if (TAB_GetItem(infoPtr, iItem)->dwState & TCIS_HIGHLIGHTED)
{
if (deleteBrush)
{
DeleteObject(hbr);
deleteBrush = FALSE;
}
hbr = GetSysColorBrush(COLOR_HIGHLIGHT);
FillRect(hdc, &rTemp, hbr);
}
/* Cleanup */
if (deleteBrush) DeleteObject(hbr);
}
@ -1536,7 +1567,22 @@ TAB_DrawItemInterior(const TAB_INFO *infoPtr, HDC hdc, INT iItem, RECT *drawRect
drawRect->left += 4;
drawRect->top += 4;
drawRect->right -= 4;
drawRect->bottom -= 1;
if (lStyle & TCS_VERTICAL)
{
if (!(lStyle & TCS_BOTTOM)) drawRect->right += 1;
drawRect->bottom -= 4;
}
else
{
if (lStyle & TCS_BOTTOM)
{
drawRect->top -= 2;
drawRect->bottom -= 4;
}
else
drawRect->bottom -= 1;
}
}
else
{
@ -1631,10 +1677,15 @@ TAB_DrawItemInterior(const TAB_INFO *infoPtr, HDC hdc, INT iItem, RECT *drawRect
*/
oldBkMode = SetBkMode(hdc, TRANSPARENT);
if (!GetWindowTheme (infoPtr->hwnd) || (lStyle & TCS_BUTTONS))
SetTextColor(hdc, (((lStyle & TCS_HOTTRACK) && (iItem == infoPtr->iHotTracked)
&& !(lStyle & TCS_FLATBUTTONS))
| (TAB_GetItem(infoPtr, iItem)->dwState & TCIS_HIGHLIGHTED)) ?
comctl32_color.clrHighlight : comctl32_color.clrBtnText);
{
if ((lStyle & TCS_HOTTRACK) && (iItem == infoPtr->iHotTracked) &&
!(lStyle & TCS_FLATBUTTONS))
SetTextColor(hdc, comctl32_color.clrHighlight);
else if (TAB_GetItem(infoPtr, iItem)->dwState & TCIS_HIGHLIGHTED)
SetTextColor(hdc, comctl32_color.clrHighlightText);
else
SetTextColor(hdc, comctl32_color.clrBtnText);
}
/*
* if owner draw, tell the owner to draw
@ -1948,7 +1999,7 @@ static void TAB_DrawItem(const TAB_INFO *infoPtr, HDC hdc, INT iItem)
r = itemRect;
/* Separators between flat buttons */
if (lStyle & TCS_FLATBUTTONS)
if ((lStyle & TCS_FLATBUTTONS) && (infoPtr->exStyle & TCS_EX_FLATSEPARATORS))
{
r1 = r;
r1.right += (FLAT_BTN_SPACINGX -2);
@ -1963,8 +2014,13 @@ static void TAB_DrawItem(const TAB_INFO *infoPtr, HDC hdc, INT iItem)
}
else /* ! selected */
{
if (!(lStyle & TCS_FLATBUTTONS))
DrawEdge(hdc, &r, EDGE_RAISED, BF_SOFT|BF_RECT);
DWORD state = TAB_GetItem(infoPtr, iItem)->dwState;
if (state & TCIS_BUTTONPRESSED)
DrawEdge(hdc, &r, EDGE_SUNKEN, BF_SOFT|BF_RECT);
else
if (!(lStyle & TCS_FLATBUTTONS))
DrawEdge(hdc, &r, EDGE_RAISED, BF_SOFT|BF_RECT);
}
}
else /* !TCS_BUTTONS */
@ -2675,6 +2731,8 @@ static inline LRESULT
TAB_HighlightItem (TAB_INFO *infoPtr, INT iItem, BOOL fHighlight)
{
LPDWORD lpState;
DWORD oldState;
RECT r;
TRACE("(%p,%d,%s)\n", infoPtr, iItem, fHighlight ? "true" : "false");
@ -2682,12 +2740,16 @@ TAB_HighlightItem (TAB_INFO *infoPtr, INT iItem, BOOL fHighlight)
return FALSE;
lpState = &TAB_GetItem(infoPtr, iItem)->dwState;
oldState = *lpState;
if (fHighlight)
*lpState |= TCIS_HIGHLIGHTED;
else
*lpState &= ~TCIS_HIGHLIGHTED;
if ((oldState != *lpState) && TAB_InternalGetItemRect (infoPtr, iItem, &r, NULL))
InvalidateRect (infoPtr->hwnd, &r, TRUE);
return TRUE;
}
@ -2715,7 +2777,8 @@ TAB_SetItemT (TAB_INFO *infoPtr, INT iItem, LPTCITEMW tabItem, BOOL bUnicode)
FIXME("TCIF_RTLREADING\n");
if (tabItem->mask & TCIF_STATE)
wineItem->dwState = tabItem->dwState;
wineItem->dwState = (wineItem->dwState & ~tabItem->dwStateMask) |
( tabItem->dwState & tabItem->dwStateMask);
if (tabItem->mask & TCIF_TEXT)
{
@ -2762,7 +2825,7 @@ TAB_GetItemT (TAB_INFO *infoPtr, INT iItem, LPTCITEMW tabItem, BOOL bUnicode)
FIXME("TCIF_RTLREADING\n");
if (tabItem->mask & TCIF_STATE)
tabItem->dwState = wineItem->dwState;
tabItem->dwState = wineItem->dwState & tabItem->dwStateMask;
if (tabItem->mask & TCIF_TEXT)
{
@ -2979,6 +3042,8 @@ static LRESULT TAB_Create (HWND hwnd, LPARAM lParam)
dwStyle = GetWindowLongW(hwnd, GWL_STYLE);
SetWindowLongW(hwnd, GWL_STYLE, dwStyle|WS_CLIPSIBLINGS);
infoPtr->exStyle = (dwStyle & TCS_FLATBUTTONS) ? TCS_EX_FLATSEPARATORS : 0;
if (dwStyle & TCS_TOOLTIPS) {
/* Create tooltip control */
infoPtr->hwndToolTip =
@ -3099,6 +3164,103 @@ TAB_SetItemExtra (TAB_INFO *infoPtr, INT cbInfo)
return TRUE;
}
static LRESULT TAB_RemoveImage (TAB_INFO *infoPtr, INT image)
{
if (!infoPtr)
return 0;
if (ImageList_Remove (infoPtr->himl, image))
{
INT i, *idx;
RECT r;
/* shift indices, repaint items if needed */
for (i = 0; i < infoPtr->uNumItem; i++)
{
idx = &TAB_GetItem(infoPtr, i)->iImage;
if (*idx >= image)
{
if (*idx == image)
*idx = -1;
else
(*idx)--;
/* repaint item */
if (TAB_InternalGetItemRect (infoPtr, i, &r, NULL))
InvalidateRect (infoPtr->hwnd, &r, TRUE);
}
}
}
return 0;
}
static LRESULT
TAB_SetExtendedStyle (TAB_INFO *infoPtr, DWORD exMask, DWORD exStyle)
{
DWORD prevstyle = infoPtr->exStyle;
/* zero mask means all styles */
if (exMask == 0) exMask = ~0;
if (exMask & TCS_EX_REGISTERDROP)
{
FIXME("TCS_EX_REGISTERDROP style unimplemented\n");
exMask &= ~TCS_EX_REGISTERDROP;
exStyle &= ~TCS_EX_REGISTERDROP;
}
if (exMask & TCS_EX_FLATSEPARATORS)
{
if ((prevstyle ^ exStyle) & TCS_EX_FLATSEPARATORS)
{
infoPtr->exStyle ^= TCS_EX_FLATSEPARATORS;
TAB_InvalidateTabArea(infoPtr);
}
}
return prevstyle;
}
static inline LRESULT
TAB_GetExtendedStyle (TAB_INFO *infoPtr)
{
return infoPtr->exStyle;
}
static LRESULT
TAB_DeselectAll (TAB_INFO *infoPtr, BOOL excludesel)
{
LONG style = GetWindowLongW(infoPtr->hwnd, GWL_STYLE);
BOOL paint = FALSE;
INT i, selected = infoPtr->iSelected;
if (!(style & TCS_BUTTONS))
return 0;
for (i = 0; i < infoPtr->uNumItem; i++)
{
if ((TAB_GetItem(infoPtr, i)->dwState & TCIS_BUTTONPRESSED) &&
(selected != i))
{
TAB_GetItem(infoPtr, i)->dwState &= ~TCIS_BUTTONPRESSED;
paint = TRUE;
}
}
if (!excludesel && (selected != -1))
{
TAB_GetItem(infoPtr, selected)->dwState &= ~TCIS_BUTTONPRESSED;
infoPtr->iSelected = -1;
paint = TRUE;
}
if (paint)
TAB_InvalidateTabArea (infoPtr);
return 0;
}
static LRESULT WINAPI
TAB_WindowProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
@ -3159,8 +3321,7 @@ TAB_WindowProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
return TAB_SetItemSize (infoPtr, lParam);
case TCM_REMOVEIMAGE:
FIXME("Unimplemented msg TCM_REMOVEIMAGE\n");
return 0;
return TAB_RemoveImage (infoPtr, wParam);
case TCM_SETPADDING:
return TAB_SetPadding (infoPtr, lParam);
@ -3193,16 +3354,13 @@ TAB_WindowProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
return TAB_SetMinTabWidth(infoPtr, (INT)lParam);
case TCM_DESELECTALL:
FIXME("Unimplemented msg TCM_DESELECTALL\n");
return 0;
return TAB_DeselectAll (infoPtr, (BOOL)wParam);
case TCM_GETEXTENDEDSTYLE:
FIXME("Unimplemented msg TCM_GETEXTENDEDSTYLE\n");
return 0;
return TAB_GetExtendedStyle (infoPtr);
case TCM_SETEXTENDEDSTYLE:
FIXME("Unimplemented msg TCM_SETEXTENDEDSTYLE\n");
return 0;
return TAB_SetExtendedStyle (infoPtr, wParam, lParam);
case WM_GETFONT:
return TAB_GetFont (infoPtr);

View file

@ -492,9 +492,9 @@ TOOLBAR_DrawFlatSeparator (const RECT *lpRect, HDC hdc, const TOOLBAR_INFO *info
/***********************************************************************
* TOOLBAR_DrawDDFlatSeparator
* TOOLBAR_DrawFlatHorizontalSeparator
*
* This function draws the separator that was flagged as BTNS_DROPDOWN.
* This function draws horizontal separator for toolbars having CCS_VERT style.
* In this case, the separator is a pixel high line of COLOR_BTNSHADOW,
* followed by a pixel high line of COLOR_BTNHIGHLIGHT. These separators
* are horizontal as opposed to the vertical separators for not dropdown
@ -503,7 +503,7 @@ TOOLBAR_DrawFlatSeparator (const RECT *lpRect, HDC hdc, const TOOLBAR_INFO *info
* FIXME: It is possible that the height of each line is really SM_CYBORDER.
*/
static void
TOOLBAR_DrawDDFlatSeparator (const RECT *lpRect, HDC hdc,
TOOLBAR_DrawFlatHorizontalSeparator (const RECT *lpRect, HDC hdc,
const TOOLBAR_INFO *infoPtr)
{
RECT myrect;
@ -855,8 +855,8 @@ TOOLBAR_DrawButton (HWND hwnd, TBUTTON_INFO *btnPtr, HDC hdc, DWORD dwBaseCustDr
/* empirical tests show that iBitmap can/will be non-zero */
/* when drawing the vertical bar... */
if ((dwStyle & TBSTYLE_FLAT) /* && (btnPtr->iBitmap == 0) */) {
if (btnPtr->fsStyle & BTNS_DROPDOWN)
TOOLBAR_DrawDDFlatSeparator (&rc, hdc, infoPtr);
if (dwStyle & CCS_VERT)
TOOLBAR_DrawFlatHorizontalSeparator (&rc, hdc, infoPtr);
else
TOOLBAR_DrawFlatSeparator (&rc, hdc, infoPtr);
}
@ -1326,18 +1326,14 @@ TOOLBAR_WrapToolbar( HWND hwnd, DWORD dwStyle )
if (btnPtr[i].fsState & TBSTATE_HIDDEN)
continue;
/* UNDOCUMENTED: If a separator has a non zero bitmap index, */
/* it is the actual width of the separator. This is used for */
/* custom controls in toolbars. */
/* */
/* BTNS_DROPDOWN separators are treated as buttons for */
/* width. - GA 8/01 */
if ((btnPtr[i].fsStyle & BTNS_SEP) &&
!(btnPtr[i].fsStyle & BTNS_DROPDOWN))
cx = (btnPtr[i].iBitmap > 0) ?
btnPtr[i].iBitmap : SEPARATOR_WIDTH;
if (btnPtr[i].cx > 0)
cx = btnPtr[i].cx;
/* horizontal separators are treated as buttons for width */
else if ((btnPtr[i].fsStyle & BTNS_SEP) &&
!(infoPtr->dwStyle & CCS_VERT))
cx = (btnPtr[i].iBitmap > 0) ? btnPtr[i].iBitmap : SEPARATOR_WIDTH;
else
cx = (btnPtr[i].cx) ? btnPtr[i].cx : infoPtr->nButtonWidth;
cx = infoPtr->nButtonWidth;
/* Two or more adjacent separators form a separator group. */
/* The first separator in a group should be wrapped to the */
@ -1685,18 +1681,14 @@ TOOLBAR_LayoutToolbar(HWND hwnd)
cy = infoPtr->nButtonHeight;
/* UNDOCUMENTED: If a separator has a non zero bitmap index, */
/* it is the actual width of the separator. This is used for */
/* custom controls in toolbars. */
if (btnPtr->fsStyle & BTNS_SEP) {
if (btnPtr->fsStyle & BTNS_DROPDOWN) {
cy = (btnPtr->iBitmap > 0) ?
btnPtr->iBitmap : SEPARATOR_WIDTH;
cx = infoPtr->nButtonWidth;
if (infoPtr->dwStyle & CCS_VERT) {
cy = (btnPtr->iBitmap > 0) ? btnPtr->iBitmap : SEPARATOR_WIDTH;
cx = (btnPtr->cx > 0) ? btnPtr->cx : infoPtr->nWidth;
}
else
cx = (btnPtr->iBitmap > 0) ?
btnPtr->iBitmap : SEPARATOR_WIDTH;
cx = (btnPtr->cx > 0) ? btnPtr->cx :
(btnPtr->iBitmap > 0) ? btnPtr->iBitmap : SEPARATOR_WIDTH;
}
else
{
@ -1759,12 +1751,9 @@ TOOLBAR_LayoutToolbar(HWND hwnd)
y += cy;
else
{
/* UNDOCUMENTED: If a separator has a non zero bitmap index, */
/* it is the actual width of the separator. This is used for */
/* custom controls in toolbars. */
if ( !(btnPtr->fsStyle & BTNS_DROPDOWN))
y += cy + ( (btnPtr->iBitmap > 0 ) ?
btnPtr->iBitmap : SEPARATOR_WIDTH) * 2 /3;
if ( !(infoPtr->dwStyle & CCS_VERT))
y += cy + ( (btnPtr->cx > 0 ) ?
btnPtr->cx : SEPARATOR_WIDTH) * 2 /3;
else
y += cy;
@ -1843,9 +1832,10 @@ TOOLBAR_InternalInsertButtonsT(TOOLBAR_INFO *infoPtr, INT iIndex, UINT nAddButto
for (iButton = 0; iButton < nAddButtons; iButton++) {
TBUTTON_INFO *btnPtr = &infoPtr->buttons[iIndex + iButton];
TOOLBAR_DumpTBButton(lpTbb, fUnicode);
TOOLBAR_DumpTBButton(lpTbb + iButton, fUnicode);
ZeroMemory(btnPtr, sizeof(*btnPtr));
btnPtr->iBitmap = lpTbb[iButton].iBitmap;
btnPtr->idCommand = lpTbb[iButton].idCommand;
btnPtr->fsState = lpTbb[iButton].fsState;
@ -3401,7 +3391,11 @@ TOOLBAR_GetButtonInfoT(HWND hwnd, WPARAM wParam, LPARAM lParam, BOOL bUnicode)
if (lpTbInfo->dwMask & TBIF_LPARAM)
lpTbInfo->lParam = btnPtr->dwData;
if (lpTbInfo->dwMask & TBIF_SIZE)
lpTbInfo->cx = (WORD)(btnPtr->rect.right - btnPtr->rect.left);
/* tests show that for separators TBIF_SIZE returns not calculated width,
but cx property, that differs from 0 only if application have
specifically set it */
lpTbInfo->cx = (btnPtr->fsStyle & BTNS_SEP)
? btnPtr->cx : (WORD)(btnPtr->rect.right - btnPtr->rect.left);
if (lpTbInfo->dwMask & TBIF_STATE)
lpTbInfo->fsState = btnPtr->fsState;
if (lpTbInfo->dwMask & TBIF_STYLE)
@ -4241,7 +4235,9 @@ TOOLBAR_Restore(TOOLBAR_INFO *infoPtr, const TBSAVEPARAMSW *lpSave)
{
/* separator */
nmtbr.tbButton.fsStyle = TBSTYLE_SEP;
nmtbr.tbButton.iBitmap = SEPARATOR_WIDTH;
/* when inserting separators, iBitmap controls it's size.
0 sets default size (width) */
nmtbr.tbButton.iBitmap = 0;
}
else if (*nmtbr.pCurrent == (DWORD)-2)
/* hidden button */
@ -4535,7 +4531,7 @@ TOOLBAR_SetButtonSize (HWND hwnd, LPARAM lParam)
* 22 high. Demonstarted in ControlSpy Toolbar. GLA 3/02
*/
if (cx == 0) cx = 24;
if (cy == 0) cx = 22;
if (cy == 0) cy = 22;
cx = max(cx, infoPtr->szPadding.cx + infoPtr->nBitmapWidth);
cy = max(cy, infoPtr->szPadding.cy + infoPtr->nBitmapHeight);
@ -4781,6 +4777,8 @@ TOOLBAR_SetImageList (HWND hwnd, WPARAM wParam, LPARAM lParam)
HIMAGELIST himlTemp;
HIMAGELIST himl = (HIMAGELIST)lParam;
INT oldButtonWidth = infoPtr->nButtonWidth;
INT oldBitmapWidth = infoPtr->nBitmapWidth;
INT oldBitmapHeight = infoPtr->nBitmapHeight;
INT i, id = 0;
if (infoPtr->iVersion >= 5)
@ -4799,9 +4797,12 @@ TOOLBAR_SetImageList (HWND hwnd, WPARAM wParam, LPARAM lParam)
infoPtr->nBitmapWidth = 1;
infoPtr->nBitmapHeight = 1;
}
TOOLBAR_CalcToolbar(hwnd);
if (infoPtr->nButtonWidth < oldButtonWidth)
TOOLBAR_SetButtonSize(hwnd, MAKELONG(oldButtonWidth, infoPtr->nButtonHeight));
if ((oldBitmapWidth != infoPtr->nBitmapWidth) || (oldBitmapHeight != infoPtr->nBitmapHeight))
{
TOOLBAR_CalcToolbar(hwnd);
if (infoPtr->nButtonWidth < oldButtonWidth)
TOOLBAR_SetButtonSize(hwnd, MAKELONG(oldButtonWidth, infoPtr->nButtonHeight));
}
TRACE("hwnd %p, new himl=%p, id = %d, count=%d, bitmap w=%d, h=%d\n",
hwnd, infoPtr->himlDef, id, infoPtr->nNumBitmaps,

View file

@ -81,6 +81,8 @@ typedef struct
#define TOOLTIP_OFFSET 2 /* distance from ctrl edge to tooltip */
#define TB_DEFAULTPAGESIZE 20
/* Used by TRACKBAR_Refresh to find out which parts of the control
need to be recalculated */
@ -1128,7 +1130,10 @@ TRACKBAR_SetPageSize (TRACKBAR_INFO *infoPtr, LONG lPageSize)
{
LONG lTemp = infoPtr->lPageSize;
infoPtr->lPageSize = lPageSize;
if (lPageSize != -1)
infoPtr->lPageSize = lPageSize;
else
infoPtr->lPageSize = TB_DEFAULTPAGESIZE;
return lTemp;
}
@ -1405,7 +1410,7 @@ TRACKBAR_Create (HWND hwnd, const CREATESTRUCTW *lpcs)
infoPtr->lRangeMin = 0;
infoPtr->lRangeMax = 100;
infoPtr->lLineSize = 1;
infoPtr->lPageSize = 20;
infoPtr->lPageSize = TB_DEFAULTPAGESIZE;
infoPtr->lSelMin = 0;
infoPtr->lSelMax = 0;
infoPtr->lPos = 0;

View file

@ -2837,7 +2837,7 @@ TREEVIEW_Refresh(TREEVIEW_INFO *infoPtr, HDC hdc, const RECT *rc)
}
//
// This is correct, but it causes an infinite loop of WM_PAINT messages, resulting
// This is correct, but is causes and infinite loop of WM_PAINT messages, resulting
// in continuous painting of the scroll bar in reactos. Comment out until the real
// bug is found
//
@ -3297,56 +3297,59 @@ TREEVIEW_Expand(TREEVIEW_INFO *infoPtr, TREEVIEW_ITEM *wineItem,
if (bExpandPartial)
FIXME("TVE_EXPANDPARTIAL not implemented\n");
TREEVIEW_RecalculateVisibleOrder(infoPtr, wineItem);
TREEVIEW_UpdateSubTree(infoPtr, wineItem);
TREEVIEW_UpdateScrollBars(infoPtr);
scrollRect.left = 0;
scrollRect.bottom = infoPtr->treeHeight;
scrollRect.right = infoPtr->clientWidth;
if (nextItem)
if (ISVISIBLE(wineItem))
{
scrollDist = nextItem->rect.top - orgNextTop;
scrollRect.top = orgNextTop;
TREEVIEW_RecalculateVisibleOrder(infoPtr, wineItem);
TREEVIEW_UpdateSubTree(infoPtr, wineItem);
TREEVIEW_UpdateScrollBars(infoPtr);
ScrollWindowEx (infoPtr->hwnd, 0, scrollDist, &scrollRect, NULL,
NULL, NULL, SW_ERASE | SW_INVALIDATE);
TREEVIEW_Invalidate (infoPtr, wineItem);
} else {
scrollRect.top = wineItem->rect.top;
InvalidateRect(infoPtr->hwnd, &scrollRect, FALSE);
}
scrollRect.left = 0;
scrollRect.bottom = infoPtr->treeHeight;
scrollRect.right = infoPtr->clientWidth;
if (nextItem)
{
scrollDist = nextItem->rect.top - orgNextTop;
scrollRect.top = orgNextTop;
/* Scroll up so that as many children as possible are visible.
* This fails when expanding causes an HScroll bar to appear, but we
* don't know that yet, so the last item is obscured. */
if (wineItem->firstChild != NULL)
{
int nChildren = wineItem->lastChild->visibleOrder
- wineItem->firstChild->visibleOrder + 1;
ScrollWindowEx (infoPtr->hwnd, 0, scrollDist, &scrollRect, NULL,
NULL, NULL, SW_ERASE | SW_INVALIDATE);
TREEVIEW_Invalidate (infoPtr, wineItem);
} else {
scrollRect.top = wineItem->rect.top;
InvalidateRect(infoPtr->hwnd, &scrollRect, FALSE);
}
int visible_pos = wineItem->visibleOrder
- infoPtr->firstVisible->visibleOrder;
/* Scroll up so that as many children as possible are visible.
* This fails when expanding causes an HScroll bar to appear, but we
* don't know that yet, so the last item is obscured. */
if (wineItem->firstChild != NULL)
{
int nChildren = wineItem->lastChild->visibleOrder
- wineItem->firstChild->visibleOrder + 1;
int rows_below = TREEVIEW_GetVisibleCount(infoPtr) - visible_pos - 1;
int visible_pos = wineItem->visibleOrder
- infoPtr->firstVisible->visibleOrder;
if (visible_pos > 0 && nChildren > rows_below)
{
int scroll = nChildren - rows_below;
int rows_below = TREEVIEW_GetVisibleCount(infoPtr) - visible_pos - 1;
if (scroll > visible_pos)
scroll = visible_pos;
if (visible_pos > 0 && nChildren > rows_below)
{
int scroll = nChildren - rows_below;
if (scroll > 0)
{
TREEVIEW_ITEM *newFirstVisible
= TREEVIEW_GetListItem(infoPtr, infoPtr->firstVisible,
scroll);
if (scroll > visible_pos)
scroll = visible_pos;
if (scroll > 0)
{
TREEVIEW_ITEM *newFirstVisible
= TREEVIEW_GetListItem(infoPtr, infoPtr->firstVisible,
scroll);
TREEVIEW_SetFirstVisible(infoPtr, newFirstVisible, TRUE);
}
}
TREEVIEW_SetFirstVisible(infoPtr, newFirstVisible, TRUE);
}
}
}
}
return TRUE;

View file

@ -469,6 +469,27 @@ static LRESULT UPDOWN_KeyPressed(UPDOWN_INFO *infoPtr, int key)
return 0;
}
/***********************************************************************
* UPDOWN_SetRange
*
* Handle UDM_SETRANGE, UDM_SETRANGE32
*
* FIXME: handle Max == Min properly:
* - arrows should be disabled (without WS_DISABLED set),
* visually they can't be pressed and don't respond;
* - all input messages should still pass in.
*/
static LRESULT UPDOWN_SetRange(UPDOWN_INFO *infoPtr, INT Max, INT Min)
{
infoPtr->MaxVal = Max;
infoPtr->MinVal = Min;
TRACE("UpDown Ctrl new range(%d to %d), hwnd=%p\n",
infoPtr->MinVal, infoPtr->MaxVal, infoPtr->Self);
return 0;
}
/***********************************************************************
* UPDOWN_MouseWheel
*
@ -507,6 +528,7 @@ UPDOWN_Buddy_SubclassProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
HWND upDownHwnd = GetPropW(hwnd, BUDDY_UPDOWN_HWND);
UPDOWN_KeyPressed(UPDOWN_GetInfoPtr(upDownHwnd), (int)wParam);
if ((wParam == VK_UP) || (wParam == VK_DOWN)) return 0;
}
else if (uMsg == WM_MOUSEWHEEL) {
HWND upDownHwnd = GetPropW(hwnd, BUDDY_UPDOWN_HWND);
@ -1044,12 +1066,11 @@ static LRESULT WINAPI UpDownWindowProc(HWND hwnd, UINT message, WPARAM wParam, L
return MAKELONG(infoPtr->MaxVal, infoPtr->MinVal);
case UDM_SETRANGE:
/* we must have: */
infoPtr->MaxVal = (short)(lParam); /* UD_MINVAL <= Max <= UD_MAXVAL */
infoPtr->MinVal = (short)HIWORD(lParam); /* UD_MINVAL <= Min <= UD_MAXVAL */
/* |Max-Min| <= UD_MAXVAL */
TRACE("UpDown Ctrl new range(%d to %d), hwnd=%p\n",
infoPtr->MinVal, infoPtr->MaxVal, hwnd);
/* we must have:
UD_MINVAL <= Max <= UD_MAXVAL
UD_MINVAL <= Min <= UD_MAXVAL
|Max-Min| <= UD_MAXVAL */
UPDOWN_SetRange(infoPtr, (short)lParam, (short)HIWORD(lParam));
break;
case UDM_GETRANGE32:
@ -1058,12 +1079,7 @@ static LRESULT WINAPI UpDownWindowProc(HWND hwnd, UINT message, WPARAM wParam, L
break;
case UDM_SETRANGE32:
infoPtr->MinVal = (INT)wParam;
infoPtr->MaxVal = (INT)lParam;
if (infoPtr->MaxVal <= infoPtr->MinVal)
infoPtr->MaxVal = infoPtr->MinVal + 1;
TRACE("UpDown Ctrl new range(%d to %d), hwnd=%p\n",
infoPtr->MinVal, infoPtr->MaxVal, hwnd);
UPDOWN_SetRange(infoPtr, (INT)lParam, (INT)wParam);
break;
case UDM_GETPOS32:

View file

@ -186,10 +186,10 @@ FONT 8, "MS Shell Dlg"
FINDDLGORD DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 236, 62
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Rasti"
CAPTION "Ieškoti"
FONT 8, "MS Shell Dlg"
{
LTEXT "&Ieškoti ko:", -1, 4, 8, 42, 8
LTEXT "Ko &ieškoti:", -1, 4, 8, 42, 8
EDITTEXT edt1, 47, 7, 128, 12, ES_AUTOHSCROLL | WS_BORDER | WS_GROUP | WS_TABSTOP
CHECKBOX "Tenkina tik &visas žodis", chx1, 4, 26, 82, 12, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP
CHECKBOX "Skirti raidžių &dydį", chx2, 4, 42, 70, 12, BS_AUTOCHECKBOX | WS_TABSTOP
@ -197,7 +197,7 @@ FONT 8, "MS Shell Dlg"
CONTROL "&Aukštyn", rad1, "BUTTON", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE | WS_GROUP | WS_TABSTOP, 93, 38, 40, 12
CONTROL "&Žemyn", rad2, "BUTTON", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 134, 38, 36, 12
DEFPUSHBUTTON "&Rasti kitą", IDOK, 182, 5, 50, 14, WS_GROUP | WS_TABSTOP | BS_DEFPUSHBUTTON
DEFPUSHBUTTON "Ieškoti &kito", IDOK, 182, 5, 50, 14, WS_GROUP | WS_TABSTOP | BS_DEFPUSHBUTTON
PUSHBUTTON "Atsisakyti", IDCANCEL , 182, 23, 50, 14, WS_GROUP | WS_TABSTOP
PUSHBUTTON "&Žinynas", pshHelp , 182, 45, 50, 14, WS_GROUP | WS_TABSTOP
}
@ -208,14 +208,14 @@ STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Pakeisti"
FONT 8, "MS Shell Dlg"
{
LTEXT "&Ieškoti ko:", -1, 4, 9, 48, 8
LTEXT "Ko &ieškoti:", -1, 4, 9, 48, 8
EDITTEXT edt1, 54, 7, 114, 12, ES_AUTOHSCROLL | WS_BORDER | WS_GROUP | WS_TABSTOP
LTEXT "Pa&keisti kuo:", -1, 4, 26, 48, 8
LTEXT "Kuo pa&keisti:", -1, 4, 26, 48, 8
EDITTEXT edt2, 54, 24, 114, 12, ES_AUTOHSCROLL | WS_BORDER | WS_GROUP | WS_TABSTOP
CHECKBOX "Tenkina tik &visas žodis", chx1, 5, 46, 104, 12, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP
CHECKBOX "Skirti raidžių &dydį", chx2, 5, 62, 70, 12, BS_AUTOCHECKBOX | WS_TABSTOP
DEFPUSHBUTTON "&Rasti kitą", IDOK, 174, 4, 50, 14, WS_GROUP | WS_TABSTOP | BS_DEFPUSHBUTTON
DEFPUSHBUTTON "Ieškoti &kito", IDOK, 174, 4, 50, 14, WS_GROUP | WS_TABSTOP | BS_DEFPUSHBUTTON
PUSHBUTTON "&Pakeisti", psh1 , 174, 21, 50, 14, WS_GROUP | WS_TABSTOP
PUSHBUTTON "P&akeisti visus", psh2 , 174, 38, 50, 14, WS_GROUP | WS_TABSTOP
PUSHBUTTON "Atsisakyti", IDCANCEL , 174, 55, 50, 14, WS_GROUP | WS_TABSTOP

View file

@ -316,13 +316,13 @@ BEGIN
AUTORADIOBUTTON "&Landscape", rad2, 16, 190, 52, 12, BS_AUTORADIOBUTTON
GROUPBOX "Borders", grp4, 80, 156, 152, 56, BS_GROUPBOX
LTEXT "L&eft:", stc15, 88, 172, 21, 8
EDITTEXT edt4, 111, 170, 39, 12, WS_TABSTOP|WS_GROUP|WS_BORDER|ES_NUMBER
EDITTEXT edt4, 111, 170, 39, 12, WS_TABSTOP|WS_GROUP|WS_BORDER
LTEXT "&Right:", stc16, 159, 172, 27, 8
EDITTEXT edt6, 187, 170, 39, 12, WS_TABSTOP|WS_GROUP|WS_BORDER|ES_NUMBER
EDITTEXT edt6, 187, 170, 39, 12, WS_TABSTOP|WS_GROUP|WS_BORDER
LTEXT "T&op:", stc17, 88, 192, 21, 8
EDITTEXT edt5, 111, 190, 39, 12, WS_TABSTOP|WS_GROUP|WS_BORDER|ES_NUMBER
EDITTEXT edt5, 111, 190, 39, 12, WS_TABSTOP|WS_GROUP|WS_BORDER
LTEXT "&Bottom:", stc18, 159, 192, 23, 8
EDITTEXT edt7, 187, 190, 39, 12, WS_TABSTOP|WS_GROUP|WS_BORDER|ES_NUMBER
EDITTEXT edt7, 187, 190, 39, 12, WS_TABSTOP|WS_GROUP|WS_BORDER
DEFPUSHBUTTON "OK", IDOK, 71, 220, 50, 14, BS_PUSHBUTTON
PUSHBUTTON "Zruši<C5A1>", IDCANCEL, 126, 220, 50, 14
PUSHBUTTON "P&rinter...", psh3, 184, 220, 48, 14

View file

@ -37,7 +37,7 @@
* FIXME: add to recent docs
*
* FIXME: flags not implemented: OFN_DONTADDTORECENT,
* OFN_ENABLEINCLUDENOTIFY, OFN_ENABLESIZING,
* OFN_ENABLESIZING,
* OFN_NODEREFERENCELINKS, OFN_NOREADONLYRETURN,
* OFN_NOTESTFILECREATE, OFN_USEMONIKERS
*
@ -82,8 +82,7 @@
WINE_DEFAULT_DEBUG_CHANNEL(commdlg);
#define UNIMPLEMENTED_FLAGS \
(OFN_DONTADDTORECENT |\
OFN_ENABLEINCLUDENOTIFY | OFN_ENABLESIZING |\
(OFN_DONTADDTORECENT | OFN_ENABLESIZING |\
OFN_NODEREFERENCELINKS | OFN_NOREADONLYRETURN |\
OFN_NOTESTFILECREATE /*| OFN_USEMONIKERS*/)
@ -2788,6 +2787,8 @@ static BOOL FILEDLG95_LOOKIN_OnCommand(HWND hwnd, WORD wNotifyCode)
iItem = CBGetCurSel(fodInfos->DlgInfos.hwndLookInCB);
if( iItem == CB_ERR) return FALSE;
if(!(tmpFolder = (LPSFOLDER) CBGetItemDataPtr(fodInfos->DlgInfos.hwndLookInCB,
iItem)))
return FALSE;

View file

@ -846,6 +846,47 @@ static HRESULT WINAPI IShellBrowserImpl_ICommDlgBrowser_OnStateChange(ICommDlgBr
return NOERROR;
}
/* send_includeitem_notification
*
* Sends a CDN_INCLUDEITEM notification for "pidl" to hwndParentDlg
*/
static LRESULT send_includeitem_notification(HWND hwndParentDlg, LPCITEMIDLIST pidl)
{
LRESULT hook_result = 0;
FileOpenDlgInfos *fodInfos = GetPropA(hwndParentDlg, FileOpenDlgInfosStr);
if(!fodInfos) return 0;
if(fodInfos->DlgInfos.hwndCustomDlg)
{
TRACE("call notify CDN_INCLUDEITEM for pidl=%p\n", pidl);
if(fodInfos->unicode)
{
OFNOTIFYEXW ofnNotify;
ofnNotify.psf = fodInfos->Shell.FOIShellFolder;
ofnNotify.pidl = (LPITEMIDLIST)pidl;
ofnNotify.hdr.hwndFrom = hwndParentDlg;
ofnNotify.hdr.idFrom = 0;
ofnNotify.hdr.code = CDN_INCLUDEITEM;
ofnNotify.lpOFN = fodInfos->ofnInfos;
hook_result = SendMessageW(fodInfos->DlgInfos.hwndCustomDlg, WM_NOTIFY, 0, (LPARAM)&ofnNotify);
}
else
{
OFNOTIFYEXA ofnNotify;
ofnNotify.psf = fodInfos->Shell.FOIShellFolder;
ofnNotify.pidl = (LPITEMIDLIST)pidl;
ofnNotify.hdr.hwndFrom = hwndParentDlg;
ofnNotify.hdr.idFrom = 0;
ofnNotify.hdr.code = CDN_INCLUDEITEM;
ofnNotify.lpOFN = (LPOPENFILENAMEA)fodInfos->ofnInfos;
hook_result = SendMessageA(fodInfos->DlgInfos.hwndCustomDlg, WM_NOTIFY, 0, (LPARAM)&ofnNotify);
}
}
TRACE("Retval: 0x%08lx\n", hook_result);
return hook_result;
}
/**************************************************************************
* IShellBrowserImpl_ICommDlgBrowser_IncludeObject
*/
@ -875,6 +916,11 @@ static HRESULT WINAPI IShellBrowserImpl_ICommDlgBrowser_IncludeObject(ICommDlgBr
if(ulAttr & (SFGAO_FOLDER | SFGAO_LINK))
return S_OK;
/* if the application takes care of including the item we are done */
if(fodInfos->ofnInfos->Flags & OFN_ENABLEINCLUDENOTIFY &&
send_includeitem_notification(This->hwndOwner, pidl))
return S_OK;
/* Check if there is a mask to apply if not */
if(!fodInfos->ShellInfos.lpstrCurrentFilter || !lstrlenW(fodInfos->ShellInfos.lpstrCurrentFilter))
return S_OK;

View file

@ -3414,8 +3414,7 @@ PRINTDLG_PagePaintProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
*/
static LRESULT CALLBACK pagesetup_margin_editproc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam)
{
switch(msg)
case WM_CHAR:
if (msg == WM_CHAR)
{
WCHAR decimal = get_decimal_sep();
WCHAR wc = (WCHAR)wparam;