ReactOS  0.4.14-dev-49-gfb4591c
status.c
Go to the documentation of this file.
1 /*
2  * Interface code to StatusWindow widget/control
3  *
4  * Copyright 1996 Bruce Milner
5  * Copyright 1998, 1999 Eric Kohl
6  * Copyright 2002 Dimitrie O. Paun
7  *
8  * This library is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU Lesser General Public
10  * License as published by the Free Software Foundation; either
11  * version 2.1 of the License, or (at your option) any later version.
12  *
13  * This library is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16  * Lesser General Public License for more details.
17  *
18  * You should have received a copy of the GNU Lesser General Public
19  * License along with this library; if not, write to the Free Software
20  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
21  *
22  * TODO:
23  * -- CCS_BOTTOM (default)
24  * -- CCS_LEFT
25  * -- CCS_NODIVIDER
26  * -- CCS_NOMOVEX
27  * -- CCS_NOMOVEY
28  * -- CCS_NOPARENTALIGN
29  * -- CCS_RIGHT
30  * -- CCS_TOP
31  * -- CCS_VERT (defaults to RIGHT)
32  */
33 
34 #include <stdarg.h>
35 #include <string.h>
36 
37 #include "windef.h"
38 #include "winbase.h"
39 #include "wine/unicode.h"
40 #include "wingdi.h"
41 #include "winuser.h"
42 #include "winnls.h"
43 #include "commctrl.h"
44 #include "comctl32.h"
45 #include "uxtheme.h"
46 #include "vssym32.h"
47 #include "wine/debug.h"
48 
50 
51 typedef struct
52 {
53  INT x;
59 
60 typedef struct
61 {
66  UINT minHeight; /* at least MIN_PANE_HEIGHT, can be increased by SB_SETMINHEIGHT */
71  COLORREF clrBk; /* background color */
72  BOOL bUnicode; /* notify format. TRUE if notifies in Unicode */
73  STATUSWINDOWPART part0; /* simple window */
78 } STATUS_INFO;
79 
80 /*
81  * Run tests using Waite Group Windows95 API Bible Vol. 1&2
82  * The second cdrom contains executables drawstat.exe, gettext.exe,
83  * simple.exe, getparts.exe, setparts.exe, statwnd.exe
84  */
85 
86 #define HORZ_BORDER 0
87 #define VERT_BORDER 2
88 #define HORZ_GAP 2
89 
90 static const WCHAR themeClass[] = { 'S','t','a','t','u','s',0 };
91 
92 /* prototype */
93 static void
95 static LRESULT
97 
99 {
100  return isW ? debugstr_w(text) : debugstr_a((LPCSTR)text);
101 }
102 
103 static UINT
105 {
106  HTHEME theme;
107  UINT height;
108  TEXTMETRICW tm;
109  int margin;
110 
111  COMCTL32_GetFontMetrics(infoPtr->hFont ? infoPtr->hFont : infoPtr->hDefaultFont, &tm);
112  margin = (tm.tmInternalLeading ? tm.tmInternalLeading : 2);
113  height = max(tm.tmHeight + margin + 2*GetSystemMetrics(SM_CYBORDER), infoPtr->minHeight) + infoPtr->verticalBorder;
114 
115  if ((theme = GetWindowTheme(infoPtr->Self)))
116  {
117  /* Determine bar height from theme such that the content area is
118  * textHeight pixels large */
119  HDC hdc = GetDC(infoPtr->Self);
120  RECT r;
121 
122  SetRect(&r, 0, 0, 0, max(infoPtr->minHeight, tm.tmHeight));
123  if (SUCCEEDED(GetThemeBackgroundExtent(theme, hdc, SP_PANE, 0, &r, &r)))
124  {
125  height = r.bottom - r.top;
126  }
127  ReleaseDC(infoPtr->Self, hdc);
128  }
129 
130  TRACE(" textHeight=%d+%d, final height=%d\n", tm.tmHeight, tm.tmInternalLeading, height);
131  return height;
132 }
133 
134 static void
136 {
137  RECT rc = *lpRect;
138 
139  TRACE("draw size grip %s\n", wine_dbgstr_rect(lpRect));
140 
141  if (theme)
142  {
143  SIZE gripperSize;
144  if (SUCCEEDED (GetThemePartSize (theme, hdc, SP_GRIPPER, 0, lpRect,
145  TS_DRAW, &gripperSize)))
146  {
147  rc.left = rc.right - gripperSize.cx;
148  rc.top = rc.bottom - gripperSize.cy;
149  if (SUCCEEDED (DrawThemeBackground(theme, hdc, SP_GRIPPER, 0, &rc, NULL)))
150  return;
151  }
152  }
153 
154  rc.left = max( rc.left, rc.right - GetSystemMetrics(SM_CXVSCROLL) - 1 );
155  rc.top = max( rc.top, rc.bottom - GetSystemMetrics(SM_CYHSCROLL) - 1 );
157 }
158 
159 
160 static void
161 STATUSBAR_DrawPart (const STATUS_INFO *infoPtr, HDC hdc, const STATUSWINDOWPART *part, int itemID)
162 {
163  RECT r = part->bound;
165  HTHEME theme = GetWindowTheme (infoPtr->Self);
166  int themePart = SP_PANE;
167  int x = 0;
168 
169  TRACE("part bound %s\n", wine_dbgstr_rect(&r));
170  if (part->style & SBT_POPOUT)
172  else if (part->style & SBT_NOBORDERS)
173  border = 0;
174 
175  if (theme)
176  {
177  if ((GetWindowLongW (infoPtr->Self, GWL_STYLE) & SBARS_SIZEGRIP)
178  && (infoPtr->simple || (itemID == (infoPtr->numParts-1))))
179  themePart = SP_GRIPPERPANE;
180  DrawThemeBackground(theme, hdc, themePart, 0, &r, NULL);
181  }
182  else
184 
185  if (part->hIcon) {
186  INT cy = r.bottom - r.top;
187  DrawIconEx (hdc, r.left + 2, r.top, part->hIcon, cy, cy, 0, 0, DI_NORMAL);
188  x = 2 + cy;
189  }
190 
191  if (part->style & SBT_OWNERDRAW) {
192  DRAWITEMSTRUCT dis;
193 
194  dis.CtlID = GetWindowLongPtrW (infoPtr->Self, GWLP_ID);
195  dis.itemID = itemID;
196  dis.hwndItem = infoPtr->Self;
197  dis.hDC = hdc;
198  dis.rcItem = r;
199  dis.itemData = (ULONG_PTR)part->text;
200  SendMessageW (infoPtr->Notify, WM_DRAWITEM, dis.CtlID, (LPARAM)&dis);
201  } else {
202  r.left += x;
203 #ifdef __REACTOS__
204  if (!theme)
205  {
206  r.left -= 2;
207  DrawStatusTextW (hdc, &r, part->text, SBT_NOBORDERS);
208  }
209  else
210  {
211  r.left += 2;
212  r.right -= 2;
213  DrawThemeText(theme, hdc, SP_PANE, 0, part->text, -1, DT_VCENTER|DT_SINGLELINE|DT_NOPREFIX, 0, &r);
214  }
215 #else
216  DrawStatusTextW (hdc, &r, part->text, SBT_NOBORDERS);
217 #endif
218  }
219 }
220 
221 
222 static void
223 STATUSBAR_RefreshPart (const STATUS_INFO *infoPtr, HDC hdc, const STATUSWINDOWPART *part, int itemID)
224 {
225  HBRUSH hbrBk;
226  HTHEME theme;
227 
228  TRACE("item %d\n", itemID);
229 
230  if (part->bound.right < part->bound.left) return;
231 
232  if (!RectVisible(hdc, &part->bound))
233  return;
234 
235  if ((theme = GetWindowTheme (infoPtr->Self)))
236  {
237  RECT cr;
238  GetClientRect (infoPtr->Self, &cr);
239  DrawThemeBackground(theme, hdc, 0, 0, &cr, &part->bound);
240  }
241  else
242  {
243  if (infoPtr->clrBk != CLR_DEFAULT)
244  hbrBk = CreateSolidBrush (infoPtr->clrBk);
245  else
246  hbrBk = GetSysColorBrush (COLOR_3DFACE);
247  FillRect(hdc, &part->bound, hbrBk);
248  if (infoPtr->clrBk != CLR_DEFAULT)
249  DeleteObject (hbrBk);
250  }
251 
252  STATUSBAR_DrawPart (infoPtr, hdc, part, itemID);
253 }
254 
255 
256 static LRESULT
258 {
259  RECT rect;
260  HBRUSH hbrBk;
261  HFONT hOldFont;
262  HTHEME theme;
263 
264  TRACE("\n");
265  if (!IsWindowVisible(infoPtr->Self))
266  return 0;
267 
268  STATUSBAR_SetPartBounds(infoPtr);
269 
270  GetClientRect (infoPtr->Self, &rect);
271 
272  if ((theme = GetWindowTheme (infoPtr->Self)))
273  {
274  DrawThemeBackground(theme, hdc, 0, 0, &rect, NULL);
275  }
276  else
277  {
278  if (infoPtr->clrBk != CLR_DEFAULT)
279  hbrBk = CreateSolidBrush (infoPtr->clrBk);
280  else
281  hbrBk = GetSysColorBrush (COLOR_3DFACE);
282  FillRect(hdc, &rect, hbrBk);
283  if (infoPtr->clrBk != CLR_DEFAULT)
284  DeleteObject (hbrBk);
285  }
286 
287  hOldFont = SelectObject (hdc, infoPtr->hFont ? infoPtr->hFont : infoPtr->hDefaultFont);
288 
289  if (infoPtr->simple) {
290  STATUSBAR_RefreshPart (infoPtr, hdc, &infoPtr->part0, 0);
291  } else {
292  unsigned int i;
293 
294  for (i = 0; i < infoPtr->numParts; i++) {
295  STATUSBAR_RefreshPart (infoPtr, hdc, &infoPtr->parts[i], i);
296  }
297  }
298 
299  SelectObject (hdc, hOldFont);
300 
301  if ((GetWindowLongW (infoPtr->Self, GWL_STYLE) & SBARS_SIZEGRIP)
302  && !(GetWindowLongW (infoPtr->Notify, GWL_STYLE) & WS_MAXIMIZE))
303  STATUSBAR_DrawSizeGrip (theme, hdc, &rect);
304 
305  return 0;
306 }
307 
308 
309 static int
311 {
312  unsigned int i;
313 
314  if (infoPtr->simple)
315  return 255;
316 
317  for (i = 0; i < infoPtr->numParts; i++)
318  if (pt->x >= infoPtr->parts[i].bound.left && pt->x <= infoPtr->parts[i].bound.right)
319  return i;
320  return -2;
321 }
322 
323 
324 static void
326 {
327  STATUSWINDOWPART *part;
328  RECT rect, *r;
329  UINT i;
330 
331  /* get our window size */
332  GetClientRect (infoPtr->Self, &rect);
333  TRACE("client wnd size is %s\n", wine_dbgstr_rect(&rect));
334 
335  rect.left += infoPtr->horizontalBorder;
336  rect.top += infoPtr->verticalBorder;
337 
338  /* set bounds for simple rectangle */
339  infoPtr->part0.bound = rect;
340 
341  /* set bounds for non-simple rectangles */
342  for (i = 0; i < infoPtr->numParts; i++) {
343  part = &infoPtr->parts[i];
344  r = &infoPtr->parts[i].bound;
345  r->top = rect.top;
346  r->bottom = rect.bottom;
347  if (i == 0)
348  r->left = 0;
349  else
350  r->left = infoPtr->parts[i-1].bound.right + infoPtr->horizontalGap;
351  if (part->x == -1)
352  r->right = rect.right;
353  else
354  r->right = part->x;
355 
356  if (infoPtr->hwndToolTip) {
357  TTTOOLINFOW ti;
358 
359  ti.cbSize = sizeof(TTTOOLINFOW);
360  ti.hwnd = infoPtr->Self;
361  ti.uId = i;
362  ti.rect = *r;
364  0, (LPARAM)&ti);
365  }
366  }
367 }
368 
369 
370 static LRESULT
371 STATUSBAR_Relay2Tip (const STATUS_INFO *infoPtr, UINT uMsg,
373 {
374  MSG msg;
375 
376  msg.hwnd = infoPtr->Self;
377  msg.message = uMsg;
378  msg.wParam = wParam;
379  msg.lParam = lParam;
380  msg.time = GetMessageTime ();
381  msg.pt.x = (short)LOWORD(GetMessagePos ());
382  msg.pt.y = (short)HIWORD(GetMessagePos ());
383 
384  return SendMessageW (infoPtr->hwndToolTip, TTM_RELAYEVENT, 0, (LPARAM)&msg);
385 }
386 
387 
388 static BOOL
390 {
391  TRACE("\n");
392  out[0] = infoPtr->horizontalBorder;
393  out[1] = infoPtr->verticalBorder;
394  out[2] = infoPtr->horizontalGap;
395 
396  return TRUE;
397 }
398 
399 
400 static BOOL
402 {
403  TRACE("\n");
404  infoPtr->horizontalBorder = in[0];
405  infoPtr->verticalBorder = in[1];
406  infoPtr->horizontalGap = in[2];
407  InvalidateRect(infoPtr->Self, NULL, FALSE);
408 
409  return TRUE;
410 }
411 
412 
413 static HICON
414 STATUSBAR_GetIcon (const STATUS_INFO *infoPtr, INT nPart)
415 {
416  TRACE("%d\n", nPart);
417  /* MSDN says: "simple parts are indexed with -1" */
418  if ((nPart < -1) || (nPart >= infoPtr->numParts))
419  return 0;
420 
421  if (nPart == -1)
422  return (infoPtr->part0.hIcon);
423  else
424  return (infoPtr->parts[nPart].hIcon);
425 }
426 
427 
428 static INT
429 STATUSBAR_GetParts (const STATUS_INFO *infoPtr, INT num_parts, INT parts[])
430 {
431  INT i;
432 
433  TRACE("(%d)\n", num_parts);
434  if (parts) {
435  for (i = 0; i < num_parts; i++) {
436  parts[i] = infoPtr->parts[i].x;
437  }
438  }
439  return infoPtr->numParts;
440 }
441 
442 
443 static BOOL
444 STATUSBAR_GetRect (const STATUS_INFO *infoPtr, INT nPart, LPRECT rect)
445 {
446  TRACE("part %d\n", nPart);
447  if(nPart >= infoPtr->numParts || nPart < 0)
448  return FALSE;
449  if (infoPtr->simple)
450  *rect = infoPtr->part0.bound;
451  else
452  *rect = infoPtr->parts[nPart].bound;
453  return TRUE;
454 }
455 
456 
457 static LRESULT
459 {
460  STATUSWINDOWPART *part;
461  LRESULT result;
462 
463  TRACE("part %d\n", nPart);
464 
465  /* MSDN says: "simple parts use index of 0", so this check is ok. */
466  if (nPart < 0 || nPart >= infoPtr->numParts) return 0;
467 
468  if (infoPtr->simple)
469  part = &infoPtr->part0;
470  else
471  part = &infoPtr->parts[nPart];
472 
473  if (part->style & SBT_OWNERDRAW)
474  result = (LRESULT)part->text;
475  else {
476  DWORD len = part->text ? WideCharToMultiByte( CP_ACP, 0, part->text, -1,
477  NULL, 0, NULL, NULL ) - 1 : 0;
478  result = MAKELONG( len, part->style );
479  if (part->text && buf)
480  WideCharToMultiByte( CP_ACP, 0, part->text, -1, buf, len+1, NULL, NULL );
481  }
482  return result;
483 }
484 
485 
486 static LRESULT
488 {
489  STATUSWINDOWPART *part;
490  LRESULT result;
491 
492  TRACE("part %d\n", nPart);
493  if (nPart < 0 || nPart >= infoPtr->numParts) return 0;
494 
495  if (infoPtr->simple)
496  part = &infoPtr->part0;
497  else
498  part = &infoPtr->parts[nPart];
499 
500  if (part->style & SBT_OWNERDRAW)
501  result = (LRESULT)part->text;
502  else {
503  result = part->text ? strlenW (part->text) : 0;
504  result |= (part->style << 16);
505  if (part->text && buf)
506  strcpyW (buf, part->text);
507  }
508  return result;
509 }
510 
511 
512 static LRESULT
514 {
515  STATUSWINDOWPART *part;
516  DWORD result;
517 
518  TRACE("part %d\n", nPart);
519 
520  /* MSDN says: "simple parts use index of 0", so this check is ok. */
521  if (nPart < 0 || nPart >= infoPtr->numParts) return 0;
522 
523  if (infoPtr->simple)
524  part = &infoPtr->part0;
525  else
526  part = &infoPtr->parts[nPart];
527 
528  if ((~part->style & SBT_OWNERDRAW) && part->text)
529  result = strlenW(part->text);
530  else
531  result = 0;
532 
533  result |= (part->style << 16);
534  return result;
535 }
536 
537 static LRESULT
538 STATUSBAR_GetTipTextA (const STATUS_INFO *infoPtr, INT id, LPSTR tip, INT size)
539 {
540  TRACE("\n");
541  if (tip) {
543  buf[0]='\0';
544 
545  if (infoPtr->hwndToolTip) {
546  TTTOOLINFOA ti;
547  ti.cbSize = sizeof(TTTOOLINFOA);
548  ti.hwnd = infoPtr->Self;
549  ti.uId = id;
550  ti.lpszText = buf;
551  SendMessageA (infoPtr->hwndToolTip, TTM_GETTEXTA, 0, (LPARAM)&ti);
552  }
553  lstrcpynA (tip, buf, size);
554  }
555  return 0;
556 }
557 
558 
559 static LRESULT
561 {
562  TRACE("\n");
563  if (tip) {
565  buf[0]=0;
566 
567  if (infoPtr->hwndToolTip) {
568  TTTOOLINFOW ti;
569  ti.cbSize = sizeof(TTTOOLINFOW);
570  ti.hwnd = infoPtr->Self;
571  ti.uId = id;
572  ti.lpszText = buf;
573  SendMessageW(infoPtr->hwndToolTip, TTM_GETTEXTW, 0, (LPARAM)&ti);
574  }
575  lstrcpynW(tip, buf, size);
576  }
577 
578  return 0;
579 }
580 
581 
582 static COLORREF
584 {
585  COLORREF oldBkColor;
586 
587  oldBkColor = infoPtr->clrBk;
588  infoPtr->clrBk = color;
589  InvalidateRect(infoPtr->Self, NULL, FALSE);
590 
591  TRACE("CREF: %08x -> %08x\n", oldBkColor, infoPtr->clrBk);
592  return oldBkColor;
593 }
594 
595 
596 static BOOL
598 {
599  if ((nPart < -1) || (nPart >= infoPtr->numParts))
600  return FALSE;
601 
602  TRACE("setting part %d\n", nPart);
603 
604  /* FIXME: MSDN says "if nPart is -1, the status bar is assumed simple" */
605  if (nPart == -1) {
606  if (infoPtr->part0.hIcon == hIcon) /* same as - no redraw */
607  return TRUE;
608  infoPtr->part0.hIcon = hIcon;
609  if (infoPtr->simple)
610  InvalidateRect(infoPtr->Self, &infoPtr->part0.bound, FALSE);
611  } else {
612  if (infoPtr->parts[nPart].hIcon == hIcon) /* same as - no redraw */
613  return TRUE;
614 
615  infoPtr->parts[nPart].hIcon = hIcon;
616  if (!(infoPtr->simple))
617  InvalidateRect(infoPtr->Self, &infoPtr->parts[nPart].bound, FALSE);
618  }
619  return TRUE;
620 }
621 
622 
623 static BOOL
625 {
627  if (ysize & 1) ysize--;
628  infoPtr->minHeight = max(height, ysize);
629  infoPtr->height = STATUSBAR_ComputeHeight(infoPtr);
630  /* like native, don't resize the control */
631  return TRUE;
632 }
633 
634 
635 static BOOL
637 {
638  STATUSWINDOWPART *tmp;
639  INT i, oldNumParts;
640 
641  TRACE("(%d,%p)\n", count, parts);
642 
643  if(!count) return FALSE;
644 
645  oldNumParts = infoPtr->numParts;
646  infoPtr->numParts = count;
647  if (oldNumParts > infoPtr->numParts) {
648  for (i = infoPtr->numParts ; i < oldNumParts; i++) {
649  if (!(infoPtr->parts[i].style & SBT_OWNERDRAW))
650  Free (infoPtr->parts[i].text);
651  }
652  } else if (oldNumParts < infoPtr->numParts) {
653  tmp = Alloc (sizeof(STATUSWINDOWPART) * infoPtr->numParts);
654  if (!tmp) return FALSE;
655  for (i = 0; i < oldNumParts; i++) {
656  tmp[i] = infoPtr->parts[i];
657  }
658  Free (infoPtr->parts);
659  infoPtr->parts = tmp;
660  }
661  if (oldNumParts == infoPtr->numParts) {
662  for (i=0; i < oldNumParts; i++)
663  if (infoPtr->parts[i].x != parts[i])
664  break;
665  if (i==oldNumParts) /* Unchanged? no need to redraw! */
666  return TRUE;
667  }
668 
669  for (i = 0; i < infoPtr->numParts; i++)
670  infoPtr->parts[i].x = parts[i];
671 
672  if (infoPtr->hwndToolTip) {
673  INT nTipCount;
674  TTTOOLINFOW ti;
675  WCHAR wEmpty = 0;
676 
677  ZeroMemory (&ti, sizeof(TTTOOLINFOW));
678  ti.cbSize = sizeof(TTTOOLINFOW);
679  ti.hwnd = infoPtr->Self;
680  ti.lpszText = &wEmpty;
681 
682  nTipCount = SendMessageW (infoPtr->hwndToolTip, TTM_GETTOOLCOUNT, 0, 0);
683  if (nTipCount < infoPtr->numParts) {
684  /* add tools */
685  for (i = nTipCount; i < infoPtr->numParts; i++) {
686  TRACE("add tool %d\n", i);
687  ti.uId = i;
689  0, (LPARAM)&ti);
690  }
691  }
692  else if (nTipCount > infoPtr->numParts) {
693  /* delete tools */
694  for (i = nTipCount - 1; i >= infoPtr->numParts; i--) {
695  TRACE("delete tool %d\n", i);
696  ti.uId = i;
698  0, (LPARAM)&ti);
699  }
700  }
701  }
702  STATUSBAR_SetPartBounds (infoPtr);
703  InvalidateRect(infoPtr->Self, NULL, FALSE);
704  return TRUE;
705 }
706 
707 
708 static BOOL
710  LPWSTR text, BOOL isW)
711 {
712  STATUSWINDOWPART *part=NULL;
713  BOOL changed = FALSE;
714  INT oldStyle;
715 
716  if (style & SBT_OWNERDRAW) {
717  TRACE("part %d, text %p\n",nPart,text);
718  }
719  else TRACE("part %d, text %s\n", nPart, debugstr_t(text, isW));
720 
721  /* MSDN says: "If the parameter is set to SB_SIMPLEID (255), the status
722  * window is assumed to be a simple window */
723 
724  if (nPart == 0x00ff) {
725  part = &infoPtr->part0;
726  } else {
727  if (infoPtr->parts && nPart >= 0 && nPart < infoPtr->numParts) {
728  part = &infoPtr->parts[nPart];
729  }
730  }
731  if (!part) return FALSE;
732 
733  if (part->style != style)
734  changed = TRUE;
735 
736  oldStyle = part->style;
737  part->style = style;
738  if (style & SBT_OWNERDRAW) {
739  if (!(oldStyle & SBT_OWNERDRAW))
740  Free (part->text);
741  part->text = text;
742  } else {
743  LPWSTR ntext;
744  WCHAR *idx;
745 
746  if (text && !isW) {
747  LPCSTR atxt = (LPCSTR)text;
748  DWORD len = MultiByteToWideChar( CP_ACP, 0, atxt, -1, NULL, 0 );
749  ntext = Alloc( (len + 1)*sizeof(WCHAR) );
750  if (!ntext) return FALSE;
751  MultiByteToWideChar( CP_ACP, 0, atxt, -1, ntext, len );
752  } else if (text) {
753  ntext = Alloc( (strlenW(text) + 1)*sizeof(WCHAR) );
754  if (!ntext) return FALSE;
755  strcpyW (ntext, text);
756  } else ntext = 0;
757 
758  /* replace nonprintable characters with spaces */
759  if (ntext) {
760  idx = ntext;
761  while (*idx) {
762  if(!isprintW(*idx))
763  *idx = ' ';
764  idx++;
765  }
766  }
767 
768  /* check if text is unchanged -> no need to redraw */
769  if (text) {
770  if (!changed && part->text && !lstrcmpW(ntext, part->text)) {
771  Free(ntext);
772  return TRUE;
773  }
774  } else {
775  if (!changed && !part->text)
776  return TRUE;
777  }
778 
779  if (!(oldStyle & SBT_OWNERDRAW))
780  Free (part->text);
781  part->text = ntext;
782  }
783  InvalidateRect(infoPtr->Self, &part->bound, FALSE);
784  UpdateWindow(infoPtr->Self);
785 
786  return TRUE;
787 }
788 
789 
790 static LRESULT
792 {
793  TRACE("part %d: \"%s\"\n", id, text);
794  if (infoPtr->hwndToolTip) {
795  TTTOOLINFOA ti;
796  ti.cbSize = sizeof(TTTOOLINFOA);
797  ti.hwnd = infoPtr->Self;
798  ti.uId = id;
799  ti.hinst = 0;
800  ti.lpszText = text;
801  SendMessageA (infoPtr->hwndToolTip, TTM_UPDATETIPTEXTA, 0, (LPARAM)&ti);
802  }
803 
804  return 0;
805 }
806 
807 
808 static LRESULT
810 {
811  TRACE("part %d: \"%s\"\n", id, debugstr_w(text));
812  if (infoPtr->hwndToolTip) {
813  TTTOOLINFOW ti;
814  ti.cbSize = sizeof(TTTOOLINFOW);
815  ti.hwnd = infoPtr->Self;
816  ti.uId = id;
817  ti.hinst = 0;
818  ti.lpszText = text;
819  SendMessageW (infoPtr->hwndToolTip, TTM_UPDATETIPTEXTW, 0, (LPARAM)&ti);
820  }
821 
822  return 0;
823 }
824 
825 
826 static inline LRESULT
828 {
829  BOOL bOld = infoPtr->bUnicode;
830 
831  TRACE("(0x%x)\n", bUnicode);
832  infoPtr->bUnicode = bUnicode;
833 
834  return bOld;
835 }
836 
837 
838 static BOOL
840 {
841  NMHDR nmhdr;
842 
843  TRACE("(simple=%d)\n", simple);
844  if (infoPtr->simple == simple) /* no need to change */
845  return TRUE;
846 
847  infoPtr->simple = simple;
848 
849  /* send notification */
850  nmhdr.hwndFrom = infoPtr->Self;
851  nmhdr.idFrom = GetWindowLongPtrW (infoPtr->Self, GWLP_ID);
852  nmhdr.code = SBN_SIMPLEMODECHANGE;
853  SendMessageW (infoPtr->Notify, WM_NOTIFY, 0, (LPARAM)&nmhdr);
854  InvalidateRect(infoPtr->Self, NULL, FALSE);
855  return TRUE;
856 }
857 
858 
859 static LRESULT
861 {
862  unsigned int i;
863 
864  TRACE("\n");
865  for (i = 0; i < infoPtr->numParts; i++) {
866  if (!(infoPtr->parts[i].style & SBT_OWNERDRAW))
867  Free (infoPtr->parts[i].text);
868  }
869  if (!(infoPtr->part0.style & SBT_OWNERDRAW))
870  Free (infoPtr->part0.text);
871  Free (infoPtr->parts);
872 
873  /* delete default font */
874  if (infoPtr->hDefaultFont)
875  DeleteObject (infoPtr->hDefaultFont);
876 
877  /* delete tool tip control */
878  if (infoPtr->hwndToolTip)
879  DestroyWindow (infoPtr->hwndToolTip);
880 
881  CloseThemeData (GetWindowTheme (infoPtr->Self));
882 
883  SetWindowLongPtrW(infoPtr->Self, 0, 0);
884  Free (infoPtr);
885  return 0;
886 }
887 
888 
889 static LRESULT
891 {
892  STATUS_INFO *infoPtr;
893  NONCLIENTMETRICSW nclm;
894  DWORD dwStyle;
895  RECT rect;
896  int len;
897 
898  TRACE("\n");
899  infoPtr = Alloc (sizeof(STATUS_INFO));
900  if (!infoPtr) goto create_fail;
901  SetWindowLongPtrW (hwnd, 0, (DWORD_PTR)infoPtr);
902 
903  infoPtr->Self = hwnd;
904  infoPtr->Notify = lpCreate->hwndParent;
905  infoPtr->numParts = 1;
906  infoPtr->parts = 0;
907  infoPtr->simple = FALSE;
908  infoPtr->clrBk = CLR_DEFAULT;
909  infoPtr->hFont = 0;
910  infoPtr->horizontalBorder = HORZ_BORDER;
911  infoPtr->verticalBorder = VERT_BORDER;
912  infoPtr->horizontalGap = HORZ_GAP;
913  infoPtr->minHeight = GetSystemMetrics(SM_CYSIZE);
914  if (infoPtr->minHeight & 1) infoPtr->minHeight--;
915 
916  STATUSBAR_NotifyFormat(infoPtr, infoPtr->Notify, NF_REQUERY);
917 
918  ZeroMemory (&nclm, sizeof(nclm));
919  nclm.cbSize = sizeof(nclm);
920  SystemParametersInfoW (SPI_GETNONCLIENTMETRICS, nclm.cbSize, &nclm, 0);
921  infoPtr->hDefaultFont = CreateFontIndirectW (&nclm.lfStatusFont);
922 
923  GetClientRect (hwnd, &rect);
924 
925  /* initialize simple case */
926  infoPtr->part0.bound = rect;
927  infoPtr->part0.text = 0;
928  infoPtr->part0.x = 0;
929  infoPtr->part0.style = 0;
930  infoPtr->part0.hIcon = 0;
931 
932  /* initialize first part */
933  infoPtr->parts = Alloc (sizeof(STATUSWINDOWPART));
934  if (!infoPtr->parts) goto create_fail;
935  infoPtr->parts[0].bound = rect;
936  infoPtr->parts[0].text = 0;
937  infoPtr->parts[0].x = -1;
938  infoPtr->parts[0].style = 0;
939  infoPtr->parts[0].hIcon = 0;
940 
942 
943  if (lpCreate->lpszName && (len = strlenW ((LPCWSTR)lpCreate->lpszName)))
944  {
945  infoPtr->parts[0].text = Alloc ((len + 1)*sizeof(WCHAR));
946  if (!infoPtr->parts[0].text) goto create_fail;
947  strcpyW (infoPtr->parts[0].text, (LPCWSTR)lpCreate->lpszName);
948  }
949 
950  dwStyle = GetWindowLongW (hwnd, GWL_STYLE);
951  /* native seems to clear WS_BORDER, too */
952  dwStyle &= ~WS_BORDER;
953  SetWindowLongW (hwnd, GWL_STYLE, dwStyle);
954 
955  infoPtr->height = STATUSBAR_ComputeHeight(infoPtr);
956 
957  if (dwStyle & SBT_TOOLTIPS) {
958  infoPtr->hwndToolTip =
961  CW_USEDEFAULT, hwnd, 0,
963 
964  if (infoPtr->hwndToolTip) {
965  NMTOOLTIPSCREATED nmttc;
966 
967  nmttc.hdr.hwndFrom = hwnd;
969  nmttc.hdr.code = NM_TOOLTIPSCREATED;
970  nmttc.hwndToolTips = infoPtr->hwndToolTip;
971 
972  SendMessageW (lpCreate->hwndParent, WM_NOTIFY, nmttc.hdr.idFrom, (LPARAM)&nmttc);
973  }
974  }
975 
976  return 0;
977 
978 create_fail:
979  TRACE(" failed!\n");
980  if (infoPtr) STATUSBAR_WMDestroy(infoPtr);
981  return -1;
982 }
983 
984 
985 /* in contrast to SB_GETTEXT*, WM_GETTEXT handles the text
986  * of the first part only (usual behaviour) */
987 static INT
989 {
990  INT len;
991 
992  TRACE("\n");
993  if (!(infoPtr->parts[0].text))
994  return 0;
995 
996  len = strlenW (infoPtr->parts[0].text);
997 
998  if (!size)
999  return len;
1000  else if (size > len) {
1001  strcpyW (buf, infoPtr->parts[0].text);
1002  return len;
1003  }
1004  else {
1005  memcpy (buf, infoPtr->parts[0].text, (size - 1) * sizeof(WCHAR));
1006  buf[size - 1] = 0;
1007  return size - 1;
1008  }
1009 }
1010 
1011 
1012 static BOOL
1014 {
1015  if ((GetWindowLongW (infoPtr->Self, GWL_STYLE) & SBARS_SIZEGRIP)
1016  && !(GetWindowLongW (infoPtr->Notify, GWL_STYLE) & WS_MAXIMIZE)) {
1017  RECT rect;
1018  POINT pt;
1019 
1020  GetClientRect (infoPtr->Self, &rect);
1021 
1022  pt.x = x;
1023  pt.y = y;
1024  ScreenToClient (infoPtr->Self, &pt);
1025 
1026  if (pt.x >= rect.right - GetSystemMetrics(SM_CXVSCROLL))
1027  {
1028  if (GetWindowLongW( infoPtr->Self, GWL_EXSTYLE ) & WS_EX_LAYOUTRTL) return HTBOTTOMLEFT;
1029  else return HTBOTTOMRIGHT;
1030  }
1031  }
1032 
1033  return HTERROR;
1034 }
1035 
1036 
1037 static LRESULT
1039 {
1040  PAINTSTRUCT ps;
1041 
1042  TRACE("\n");
1043  if (hdc) return STATUSBAR_Refresh (infoPtr, hdc);
1044  hdc = BeginPaint (infoPtr->Self, &ps);
1045  STATUSBAR_Refresh (infoPtr, hdc);
1046  EndPaint (infoPtr->Self, &ps);
1047 
1048  return 0;
1049 }
1050 
1051 
1052 static LRESULT
1054 {
1055  infoPtr->hFont = font;
1056  TRACE("%p\n", infoPtr->hFont);
1057 
1058  infoPtr->height = STATUSBAR_ComputeHeight(infoPtr);
1059  SendMessageW(infoPtr->Self, WM_SIZE, 0, 0); /* update size */
1060  if (redraw)
1061  InvalidateRect(infoPtr->Self, NULL, FALSE);
1062 
1063  return 0;
1064 }
1065 
1066 
1067 static BOOL
1069 {
1070  STATUSWINDOWPART *part;
1071  int len;
1072 
1073  TRACE("\n");
1074  if (infoPtr->numParts == 0)
1075  return FALSE;
1076 
1077  part = &infoPtr->parts[0];
1078  /* duplicate string */
1079  Free (part->text);
1080  part->text = 0;
1081 
1082  if (text && (len = strlenW((LPCWSTR)text))) {
1083  part->text = Alloc ((len+1)*sizeof(WCHAR));
1084  if (!part->text) return FALSE;
1085  strcpyW (part->text, (LPCWSTR)text);
1086  }
1087 
1088  InvalidateRect(infoPtr->Self, &part->bound, FALSE);
1089 
1090  return TRUE;
1091 }
1092 
1093 
1094 static BOOL
1096 {
1097  INT width, x, y;
1098  RECT parent_rect;
1099 
1100  /* Need to resize width to match parent */
1101  TRACE("flags %04x\n", flags);
1102 
1103  if (flags != SIZE_RESTORED && flags != SIZE_MAXIMIZED) {
1104  WARN("flags MUST be SIZE_RESTORED or SIZE_MAXIMIZED\n");
1105  return FALSE;
1106  }
1107 
1108  if (GetWindowLongW(infoPtr->Self, GWL_STYLE) & CCS_NORESIZE) return FALSE;
1109 
1110  /* width and height don't apply */
1111  if (!GetClientRect (infoPtr->Notify, &parent_rect))
1112  return FALSE;
1113 
1114  width = parent_rect.right - parent_rect.left;
1115  x = parent_rect.left;
1116  y = parent_rect.bottom - infoPtr->height;
1117  MoveWindow (infoPtr->Self, x, y, width, infoPtr->height, TRUE);
1118  STATUSBAR_SetPartBounds (infoPtr);
1119  return TRUE;
1120 }
1121 
1122 
1123 /* update theme after a WM_THEMECHANGED message */
1124 static LRESULT theme_changed (const STATUS_INFO* infoPtr)
1125 {
1126  HTHEME theme = GetWindowTheme (infoPtr->Self);
1127  CloseThemeData (theme);
1128  OpenThemeData (infoPtr->Self, themeClass);
1129  return 0;
1130 }
1131 
1132 
1133 static LRESULT
1135 {
1136  if (cmd == NF_REQUERY) {
1137  INT i = SendMessageW(from, WM_NOTIFYFORMAT, (WPARAM)infoPtr->Self, NF_QUERY);
1138  infoPtr->bUnicode = (i == NFR_UNICODE);
1139  }
1140  return infoPtr->bUnicode ? NFR_UNICODE : NFR_ANSI;
1141 }
1142 
1143 
1144 static LRESULT
1146 {
1147  NMMOUSE nm;
1148 
1149  TRACE("code %04x, lParam=%lx\n", code, lParam);
1150  nm.hdr.hwndFrom = infoPtr->Self;
1151  nm.hdr.idFrom = GetWindowLongPtrW(infoPtr->Self, GWLP_ID);
1152  nm.hdr.code = code;
1153  nm.pt.x = (short)LOWORD(lParam);
1154  nm.pt.y = (short)HIWORD(lParam);
1155  nm.dwItemSpec = STATUSBAR_InternalHitTest(infoPtr, &nm.pt);
1156  nm.dwItemData = 0;
1157  nm.dwHitInfo = 0x30000; /* seems constant */
1158 
1159  /* Do default processing if WM_NOTIFY returns zero */
1160  if(!SendMessageW(infoPtr->Notify, WM_NOTIFY, nm.hdr.idFrom, (LPARAM)&nm))
1161  {
1162  return DefWindowProcW(infoPtr->Self, msg, wParam, lParam);
1163  }
1164  return 0;
1165 }
1166 
1167 
1168 
1169 static LRESULT WINAPI
1171 {
1172  STATUS_INFO *infoPtr = (STATUS_INFO *)GetWindowLongPtrW (hwnd, 0);
1173  INT nPart = ((INT) wParam) & 0x00ff;
1174  LRESULT res;
1175 
1176  TRACE("hwnd=%p msg=%x wparam=%lx lparam=%lx\n", hwnd, msg, wParam, lParam);
1177  if (!infoPtr && msg != WM_CREATE)
1178  return DefWindowProcW (hwnd, msg, wParam, lParam);
1179 
1180  switch (msg) {
1181  case SB_GETBORDERS:
1182  return STATUSBAR_GetBorders (infoPtr, (INT *)lParam);
1183 
1184  case SB_GETICON:
1185  return (LRESULT)STATUSBAR_GetIcon (infoPtr, nPart);
1186 
1187  case SB_GETPARTS:
1188  return STATUSBAR_GetParts (infoPtr, (INT)wParam, (INT *)lParam);
1189 
1190  case SB_GETRECT:
1191  return STATUSBAR_GetRect (infoPtr, nPart, (LPRECT)lParam);
1192 
1193  case SB_GETTEXTA:
1194  return STATUSBAR_GetTextA (infoPtr, nPart, (LPSTR)lParam);
1195 
1196  case SB_GETTEXTW:
1197  return STATUSBAR_GetTextW (infoPtr, nPart, (LPWSTR)lParam);
1198 
1199  case SB_GETTEXTLENGTHA:
1200  case SB_GETTEXTLENGTHW:
1201  return STATUSBAR_GetTextLength (infoPtr, nPart);
1202 
1203  case SB_GETTIPTEXTA:
1204  return STATUSBAR_GetTipTextA (infoPtr, LOWORD(wParam), (LPSTR)lParam, HIWORD(wParam));
1205 
1206  case SB_GETTIPTEXTW:
1207  return STATUSBAR_GetTipTextW (infoPtr, LOWORD(wParam), (LPWSTR)lParam, HIWORD(wParam));
1208 
1209  case SB_GETUNICODEFORMAT:
1210  return infoPtr->bUnicode;
1211 
1212  case SB_ISSIMPLE:
1213  return infoPtr->simple;
1214 
1215  case SB_SETBORDERS:
1216  return STATUSBAR_SetBorders (infoPtr, (INT *)lParam);
1217 
1218  case SB_SETBKCOLOR:
1219  return STATUSBAR_SetBkColor (infoPtr, (COLORREF)lParam);
1220 
1221  case SB_SETICON:
1222  return STATUSBAR_SetIcon (infoPtr, nPart, (HICON)lParam);
1223 
1224  case SB_SETMINHEIGHT:
1225  return STATUSBAR_SetMinHeight (infoPtr, (INT)wParam);
1226 
1227  case SB_SETPARTS:
1228  return STATUSBAR_SetParts (infoPtr, (INT)wParam, (LPINT)lParam);
1229 
1230  case SB_SETTEXTA:
1231  return STATUSBAR_SetTextT (infoPtr, nPart, wParam & 0xff00, (LPWSTR)lParam, FALSE);
1232 
1233  case SB_SETTEXTW:
1234  return STATUSBAR_SetTextT (infoPtr, nPart, wParam & 0xff00, (LPWSTR)lParam, TRUE);
1235 
1236  case SB_SETTIPTEXTA:
1237  return STATUSBAR_SetTipTextA (infoPtr, (INT)wParam, (LPSTR)lParam);
1238 
1239  case SB_SETTIPTEXTW:
1240  return STATUSBAR_SetTipTextW (infoPtr, (INT)wParam, (LPWSTR)lParam);
1241 
1242  case SB_SETUNICODEFORMAT:
1243  return STATUSBAR_SetUnicodeFormat (infoPtr, (BOOL)wParam);
1244 
1245  case SB_SIMPLE:
1246  return STATUSBAR_Simple (infoPtr, (BOOL)wParam);
1247 
1248  case WM_CREATE:
1250 
1251  case WM_DESTROY:
1252  return STATUSBAR_WMDestroy (infoPtr);
1253 
1254  case WM_GETFONT:
1255  return (LRESULT)(infoPtr->hFont? infoPtr->hFont : infoPtr->hDefaultFont);
1256 
1257  case WM_GETTEXT:
1258  return STATUSBAR_WMGetText (infoPtr, (INT)wParam, (LPWSTR)lParam);
1259 
1260  case WM_GETTEXTLENGTH:
1261  return LOWORD(STATUSBAR_GetTextLength (infoPtr, 0));
1262 
1263  case WM_LBUTTONDBLCLK:
1264  return STATUSBAR_SendMouseNotify(infoPtr, NM_DBLCLK, msg, wParam, lParam);
1265 
1266  case WM_LBUTTONUP:
1267  return STATUSBAR_SendMouseNotify(infoPtr, NM_CLICK, msg, wParam, lParam);
1268 
1269  case WM_MOUSEMOVE:
1270  return STATUSBAR_Relay2Tip (infoPtr, msg, wParam, lParam);
1271 
1272  case WM_NCHITTEST:
1273  res = STATUSBAR_WMNCHitTest(infoPtr, (short)LOWORD(lParam),
1274  (short)HIWORD(lParam));
1275  if (res != HTERROR) return res;
1276  return DefWindowProcW (hwnd, msg, wParam, lParam);
1277 
1278  case WM_NCLBUTTONUP:
1279  case WM_NCLBUTTONDOWN:
1280  PostMessageW (infoPtr->Notify, msg, wParam, lParam);
1281  return 0;
1282 
1283  case WM_NOTIFYFORMAT:
1284  return STATUSBAR_NotifyFormat(infoPtr, (HWND)wParam, (INT)lParam);
1285 
1286  case WM_PRINTCLIENT:
1287  case WM_PAINT:
1288  return STATUSBAR_WMPaint (infoPtr, (HDC)wParam);
1289 
1290  case WM_RBUTTONDBLCLK:
1292 
1293  case WM_RBUTTONUP:
1294  return STATUSBAR_SendMouseNotify(infoPtr, NM_RCLICK, msg, wParam, lParam);
1295 
1296  case WM_SETFONT:
1297  return STATUSBAR_WMSetFont (infoPtr, (HFONT)wParam, LOWORD(lParam));
1298 
1299  case WM_SETTEXT:
1300  return STATUSBAR_WMSetText (infoPtr, (LPCSTR)lParam);
1301 
1302  case WM_SIZE:
1303  if (STATUSBAR_WMSize (infoPtr, (WORD)wParam)) return 0;
1304  return DefWindowProcW (hwnd, msg, wParam, lParam);
1305 
1306  case WM_SYSCOLORCHANGE:
1308  return 0;
1309 
1310  case WM_THEMECHANGED:
1311  return theme_changed (infoPtr);
1312 
1313  default:
1314  if ((msg >= WM_USER) && (msg < WM_APP) && !COMCTL32_IsReflectedMessage(msg))
1315  ERR("unknown msg %04x wp=%04lx lp=%08lx\n",
1316  msg, wParam, lParam);
1317  return DefWindowProcW (hwnd, msg, wParam, lParam);
1318  }
1319 }
1320 
1321 
1322 /***********************************************************************
1323  * STATUS_Register [Internal]
1324  *
1325  * Registers the status window class.
1326  */
1327 
1328 void
1330 {
1331  WNDCLASSW wndClass;
1332 
1333  ZeroMemory (&wndClass, sizeof(WNDCLASSW));
1334  wndClass.style = CS_GLOBALCLASS | CS_DBLCLKS | CS_VREDRAW;
1335  wndClass.lpfnWndProc = StatusWindowProc;
1336  wndClass.cbClsExtra = 0;
1337  wndClass.cbWndExtra = sizeof(STATUS_INFO *);
1338  wndClass.hCursor = LoadCursorW (0, (LPWSTR)IDC_ARROW);
1339  wndClass.hbrBackground = (HBRUSH)(COLOR_BTNFACE + 1);
1340  wndClass.lpszClassName = STATUSCLASSNAMEW;
1341 
1342  RegisterClassW (&wndClass);
1343 }
1344 
1345 
1346 /***********************************************************************
1347  * STATUS_Unregister [Internal]
1348  *
1349  * Unregisters the status window class.
1350  */
1351 
1352 void
1354 {
1356 }
#define WM_NCLBUTTONDOWN
Definition: winuser.h:1674
#define STATUSCLASSNAMEW
Definition: commctrl.h:1908
#define SBT_POPOUT
Definition: commctrl.h:1944
HRESULT WINAPI GetThemePartSize(HTHEME hTheme, HDC hdc, int iPartId, int iStateId, RECT *prc, THEMESIZE eSize, SIZE *psz)
Definition: draw.c:1777
struct tagTOOLINFOW TTTOOLINFOW
#define WM_GETTEXTLENGTH
Definition: winuser.h:1601
#define BDR_RAISEDOUTER
Definition: winuser.h:442
const DOCKBAR PVOID HWND HWND * hwnd
Definition: tooldock.h:22
#define HORZ_GAP
Definition: status.c:88
GLint GLint GLsizei width
Definition: gl.h:1546
#define WM_SYSCOLORCHANGE
Definition: winuser.h:1608
#define TTM_RELAYEVENT
Definition: commctrl.h:1764
#define max(a, b)
Definition: svc.c:63
static HICON
Definition: imagelist.c:84
static BOOL STATUSBAR_SetTextT(STATUS_INFO *infoPtr, INT nPart, WORD style, LPWSTR text, BOOL isW)
Definition: status.c:709
#define SB_ISSIMPLE
Definition: commctrl.h:1932
#define SM_CYHSCROLL
Definition: winuser.h:952
#define TRUE
Definition: types.h:120
static LRESULT theme_changed(const STATUS_INFO *infoPtr)
Definition: status.c:1124
#define SM_CYSIZE
Definition: winuser.h:982
WINE_UNICODE_INLINE unsigned int strlenW(const WCHAR *str)
Definition: unicode.h:212
long y
Definition: polytest.cpp:48
UINT style
Definition: winuser.h:3150
static LRESULT STATUSBAR_NotifyFormat(STATUS_INFO *infoPtr, HWND from, INT cmd)
Definition: status.c:1134
#define WideCharToMultiByte
Definition: compat.h:101
#define TTM_UPDATETIPTEXTA
Definition: commctrl.h:1776
#define SBT_TOOLTIPS
Definition: commctrl.h:1897
BOOL WINAPI UnregisterClassW(_In_ LPCWSTR, HINSTANCE)
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185
long x
Definition: polytest.cpp:48
HDC WINAPI GetDC(_In_opt_ HWND)
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glext.h:7751
Definition: mk_font.cpp:20
Definition: ftp_var.h:139
#define SIZE_MAXIMIZED
Definition: winuser.h:2482
#define pt(x, y)
Definition: drawing.c:79
LRESULT WINAPI SendMessageA(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
GLdouble GLdouble GLdouble r
Definition: gl.h:2055
const WCHAR * text
Definition: package.c:1827
#define CP_ACP
Definition: compat.h:99
static LRESULT WINAPI StatusWindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
Definition: status.c:1170
#define SB_SETBORDERS
Definition: commctrl.h:65
int WINAPI lstrcmpW(LPCWSTR lpString1, LPCWSTR lpString2)
Definition: lstring.c:170
GLuint GLuint GLsizei count
Definition: gl.h:1545
char CHAR
Definition: xmlstorage.h:175
TW_UINT32 TW_UINT16 TW_UINT16 MSG
Definition: twain.h:1827
#define WM_GETTEXT
Definition: winuser.h:1600
#define WARN(fmt,...)
Definition: debug.h:111
static LRESULT STATUSBAR_GetTipTextA(const STATUS_INFO *infoPtr, INT id, LPSTR tip, INT size)
Definition: status.c:538
#define SIZE_RESTORED
Definition: winuser.h:2480
#define INT
Definition: polytest.cpp:20
static LPCSTR debugstr_t(LPCWSTR text, BOOL isW)
Definition: status.c:98
static HDC
Definition: imagelist.c:92
BOOL WINAPI UpdateWindow(_In_ HWND)
UINT minHeight
Definition: status.c:66
static BOOL STATUSBAR_Simple(STATUS_INFO *infoPtr, BOOL simple)
Definition: status.c:839
ULONG_PTR itemData
Definition: winuser.h:3067
LONG top
Definition: windef.h:292
#define WS_EX_LAYOUTRTL
Definition: winuser.h:390
static LRESULT STATUSBAR_Relay2Tip(const STATUS_INFO *infoPtr, UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: status.c:371
static LRESULT STATUSBAR_GetTipTextW(const STATUS_INFO *infoPtr, INT id, LPWSTR tip, INT size)
Definition: status.c:560
#define SB_GETTIPTEXTW
Definition: commctrl.h:1937
static COLORREF STATUSBAR_SetBkColor(STATUS_INFO *infoPtr, COLORREF color)
Definition: status.c:583
void STATUS_Register(void)
Definition: status.c:1329
HGDIOBJ WINAPI SelectObject(_In_ HDC, _In_ HGDIOBJ)
Definition: dc.c:1497
static BOOL STATUSBAR_GetBorders(const STATUS_INFO *infoPtr, INT out[])
Definition: status.c:389
static HTHEME(WINAPI *pOpenThemeDataEx)(HWND
#define TTM_GETTEXTA
Definition: commctrl.h:1774
#define ZeroMemory
Definition: winbase.h:1635
BOOL WINAPI DeleteObject(_In_ HGDIOBJ)
static BOOL STATUSBAR_SetBorders(STATUS_INFO *infoPtr, const INT in[])
Definition: status.c:401
LONG WINAPI GetMessageTime(void)
Definition: message.c:1360
#define GWL_EXSTYLE
Definition: winuser.h:845
WORD numParts
Definition: status.c:64
GLint GLint GLint GLint GLint x
Definition: gl.h:1548
int cbClsExtra
Definition: winuser.h:3152
#define HTBOTTOMLEFT
Definition: winuser.h:2469
#define WM_NCHITTEST
Definition: winuser.h:1668
static LRESULT STATUSBAR_GetTextLength(STATUS_INFO *infoPtr, INT nPart)
Definition: status.c:513
BOOL WINAPI DrawFrameControl(_In_ HDC, _Inout_ LPRECT, _In_ UINT, _In_ UINT)
UINT_PTR WPARAM
Definition: windef.h:207
DWORD WINAPI GetMessagePos(void)
Definition: message.c:1350
#define GetWindowLongPtrW
Definition: winuser.h:4730
LONG left
Definition: windef.h:291
HFONT hFont
Definition: status.c:69
HINSTANCE hinst
Definition: commctrl.h:1705
BOOL WINAPI EndPaint(_In_ HWND, _In_ const PAINTSTRUCT *)
char * LPSTR
Definition: xmlstorage.h:182
static BOOL STATUSBAR_WMNCHitTest(const STATUS_INFO *infoPtr, INT x, INT y)
Definition: status.c:1013
LONG right
Definition: windef.h:293
#define DT_NOPREFIX
Definition: winuser.h:537
BOOL WINAPI DestroyWindow(_In_ HWND)
HRESULT WINAPI DrawThemeBackground(HTHEME hTheme, HDC hdc, int iPartId, int iStateId, const RECT *pRect, const RECT *pClipRect)
Definition: draw.c:128
int32_t INT
Definition: typedefs.h:56
WINE_UNICODE_INLINE int isprintW(WCHAR wc)
Definition: unicode.h:205
& rect
Definition: startmenu.cpp:1413
WPARAM wParam
Definition: combotst.c:138
STATUSWINDOWPART part0
Definition: status.c:73
static BOOL STATUSBAR_GetRect(const STATUS_INFO *infoPtr, INT nPart, LPRECT rect)
Definition: status.c:444
#define WM_PRINTCLIENT
Definition: richedit.h:70
LRESULT WINAPI DefWindowProcW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define BF_ADJUST
Definition: winuser.h:470
#define lstrcpynW
Definition: compat.h:397
static INT STATUSBAR_GetParts(const STATUS_INFO *infoPtr, INT num_parts, INT parts[])
Definition: status.c:429
DWORD_PTR dwItemSpec
Definition: commctrl.h:160
_In_opt_ PALLOCATE_FUNCTION _In_opt_ PFREE_FUNCTION Free
Definition: exfuncs.h:656
HFONT hDefaultFont
Definition: status.c:70
#define VERT_BORDER
Definition: status.c:87
LPCSTR lpszName
Definition: winuser.h:2923
UINT code
Definition: winuser.h:3133
#define SB_GETRECT
Definition: commctrl.h:1931
ATOM WINAPI RegisterClassW(_In_ CONST WNDCLASSW *)
#define BF_RECT
Definition: winuser.h:462
unsigned short(__cdecl typeof(TIFFCurrentDirectory))(struct tiff *)
Definition: typeof.h:93
static LRESULT STATUSBAR_SendMouseNotify(const STATUS_INFO *infoPtr, UINT code, UINT msg, WPARAM wParam, LPARAM lParam)
Definition: status.c:1145
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
static BOOL STATUSBAR_SetMinHeight(STATUS_INFO *infoPtr, INT height)
Definition: status.c:624
#define NM_RDBLCLK
Definition: commctrl.h:134
#define COLOR_3DFACE
Definition: winuser.h:919
LPWSTR lpszText
Definition: commctrl.h:1718
static LRESULT STATUSBAR_WMPaint(STATUS_INFO *infoPtr, HDC hdc)
Definition: status.c:1038
#define SB_GETTEXTA
Definition: commctrl.h:1915
unsigned int BOOL
Definition: ntddk_ex.h:94
GLuint color
Definition: glext.h:6243
#define TTS_ALWAYSTIP
Definition: commctrl.h:1729
HWND Self
Definition: status.c:62
LONG WINAPI SetWindowLongW(_In_ HWND, _In_ int, _In_ LONG)
INT horizontalGap
Definition: status.c:77
HDC WINAPI BeginPaint(_In_ HWND, _Out_ LPPAINTSTRUCT)
BOOL WINAPI DrawEdge(_In_ HDC, _Inout_ LPRECT, _In_ UINT, _In_ UINT)
UINT_PTR idFrom
Definition: winuser.h:3132
#define debugstr_w
Definition: kernel32.h:32
WNDPROC lpfnWndProc
Definition: winuser.h:3151
int WINAPI ReleaseDC(_In_opt_ HWND, _In_ HDC)
unsigned int idx
Definition: utils.c:41
#define CW_USEDEFAULT
Definition: winuser.h:225
#define SB_SIMPLE
Definition: commctrl.h:1930
_Out_opt_ int _Out_opt_ int * cy
Definition: commctrl.h:570
LONG WINAPI GetWindowLongW(_In_ HWND, _In_ int)
#define MAKELONG(a, b)
Definition: typedefs.h:248
static LRESULT STATUSBAR_SetTipTextW(const STATUS_INFO *infoPtr, INT id, LPWSTR text)
Definition: status.c:809
smooth NULL
Definition: ftsmooth.c:416
HFONT WINAPI CreateFontIndirectW(_In_ const LOGFONTW *)
#define WM_GETFONT
Definition: winuser.h:1633
#define SB_GETBORDERS
Definition: commctrl.h:1928
static LRESULT STATUSBAR_WMDestroy(STATUS_INFO *infoPtr)
Definition: status.c:860
#define SB_SETBKCOLOR
Definition: commctrl.h:1948
LONG cx
Definition: windef.h:319
LPCWSTR lpszClassName
Definition: winuser.h:3159
LONG_PTR LPARAM
Definition: windef.h:208
void COMCTL32_GetFontMetrics(HFONT hFont, TEXTMETRICW *ptm) DECLSPEC_HIDDEN
Definition: commctrl.c:1721
const char * LPCSTR
Definition: xmlstorage.h:183
#define HTERROR
Definition: winuser.h:2447
#define DT_VCENTER
Definition: winuser.h:543
BOOL bUnicode
Definition: status.c:72
#define WM_SETTEXT
Definition: winuser.h:1599
static int STATUSBAR_InternalHitTest(const STATUS_INFO *infoPtr, const POINT *pt)
Definition: status.c:310
WINE_DEFAULT_DEBUG_CHANNEL(statusbar)
#define WM_DESTROY
Definition: winuser.h:1591
HRESULT WINAPI GetThemeBackgroundExtent(HTHEME hTheme, HDC hdc, int iPartId, int iStateId, const RECT *pContentRect, RECT *pExtentRect)
Definition: draw.c:1528
#define CS_VREDRAW
Definition: winuser.h:653
BOOL WINAPI SystemParametersInfoW(_In_ UINT, _In_ UINT, _Inout_opt_ PVOID, _In_ UINT)
#define SB_SETUNICODEFORMAT
Definition: commctrl.h:1939
#define TRACE(s)
Definition: solgame.cpp:4
GLsizeiptr size
Definition: glext.h:5919
int cbWndExtra
Definition: winuser.h:3153
if(!(yy_init))
Definition: macro.lex.yy.c:714
static UINT STATUSBAR_ComputeHeight(STATUS_INFO *infoPtr)
Definition: status.c:104
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define NFR_UNICODE
Definition: winuser.h:2434
#define SBARS_SIZEGRIP
Definition: commctrl.h:1895
BOOL WINAPI DrawIconEx(_In_ HDC, _In_ int, _In_ int, _In_ HICON, _In_ int, _In_ int, _In_ UINT, _In_opt_ HBRUSH, _In_ UINT)
Definition: cursoricon.c:1997
#define WM_SIZE
Definition: winuser.h:1593
#define debugstr_a
Definition: kernel32.h:31
#define TTM_UPDATETIPTEXTW
Definition: commctrl.h:1777
DWORD COLORREF
Definition: windef.h:285
#define DFCS_SCROLLSIZEGRIP
Definition: winuser.h:494
POINT pt
Definition: commctrl.h:162
GLint GLint GLsizei GLsizei GLsizei GLint border
Definition: gl.h:1546
#define NF_REQUERY
Definition: winuser.h:2436
#define CS_GLOBALCLASS
Definition: winuser.h:647
UINT_PTR uId
Definition: commctrl.h:1715
#define WINAPI
Definition: msvc.h:8
const char * wine_dbgstr_rect(const RECT *rect)
BOOL WINAPI InvalidateRect(_In_opt_ HWND, _In_opt_ LPCRECT, _In_ BOOL)
PVOID Alloc(IN DWORD dwFlags, IN SIZE_T dwBytes)
Definition: main.c:63
static void STATUSBAR_SetPartBounds(STATUS_INFO *infoPtr)
Definition: status.c:325
unsigned short WORD
Definition: ntddk_ex.h:93
static FILE * out
Definition: regtests2xml.c:44
int WINAPI GetSystemMetrics(_In_ int)
unsigned long DWORD
Definition: ntddk_ex.h:95
UINT height
Definition: status.c:65
HCURSOR WINAPI LoadCursorW(_In_opt_ HINSTANCE, _In_ LPCWSTR)
Definition: cursoricon.c:2074
#define SB_SETTEXTW
Definition: commctrl.h:1914
#define WM_RBUTTONUP
Definition: winuser.h:1762
HTHEME WINAPI OpenThemeData(HWND hwnd, LPCWSTR classlist)
Definition: system.c:835
#define TOOLTIPS_CLASSW
Definition: commctrl.h:1679
static LRESULT STATUSBAR_SetUnicodeFormat(STATUS_INFO *infoPtr, BOOL bUnicode)
Definition: status.c:827
GLbitfield flags
Definition: glext.h:7161
#define WM_PAINT
Definition: winuser.h:1602
#define SB_SETTEXTA
Definition: commctrl.h:1913
#define CCS_NORESIZE
Definition: commctrl.h:2217
HTHEME WINAPI GetWindowTheme(HWND hwnd)
Definition: system.c:851
static BOOL STATUSBAR_SetParts(STATUS_INFO *infoPtr, INT count, LPINT parts)
Definition: status.c:636
#define SM_CYBORDER
Definition: winuser.h:955
static const WCHAR isW[]
Definition: tokenize.c:59
static void STATUSBAR_RefreshPart(const STATUS_INFO *infoPtr, HDC hdc, const STATUSWINDOWPART *part, int itemID)
Definition: status.c:223
HWND WINAPI CreateWindowExW(_In_ DWORD dwExStyle, _In_opt_ LPCWSTR lpClassName, _In_opt_ LPCWSTR lpWindowName, _In_ DWORD dwStyle, _In_ int X, _In_ int Y, _In_ int nWidth, _In_ int nHeight, _In_opt_ HWND hWndParent, _In_opt_ HMENU hMenu, _In_opt_ HINSTANCE hInstance, _In_opt_ LPVOID lpParam)
HDC hdc
Definition: main.c:9
static LRESULT STATUSBAR_Refresh(STATUS_INFO *infoPtr, HDC hdc)
Definition: status.c:257
#define COLOR_BTNFACE
Definition: winuser.h:918
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
GLenum GLsizei len
Definition: glext.h:6722
#define DI_NORMAL
Definition: wingdi.h:72
#define WM_LBUTTONDBLCLK
Definition: winuser.h:1760
#define LRESULT
Definition: ole.h:14
static LRESULT STATUSBAR_GetTextW(STATUS_INFO *infoPtr, INT nPart, LPWSTR buf)
Definition: status.c:487
static LRESULT STATUSBAR_WMSetFont(STATUS_INFO *infoPtr, HFONT font, BOOL redraw)
Definition: status.c:1053
#define WM_APP
Definition: eventvwr.h:70
#define CS_DBLCLKS
Definition: winuser.h:646
Definition: time.h:76
#define SB_SETICON
Definition: commctrl.h:1933
#define HTBOTTOMRIGHT
Definition: winuser.h:2470
static const WCHAR themeClass[]
Definition: status.c:90
HWND hwndFrom
Definition: winuser.h:3131
uint32_t DWORD_PTR
Definition: typedefs.h:63
#define NM_CLICK
Definition: commctrl.h:130
BOOL WINAPI MoveWindow(_In_ HWND, _In_ int, _In_ int, _In_ int, _In_ int, _In_ BOOL)
int code
Definition: i386-dis.c:3591
void STATUS_Unregister(void)
Definition: status.c:1353
#define WM_USER
Definition: winuser.h:1877
GLint GLint GLsizei GLsizei height
Definition: gl.h:1546
UINT_PTR uId
Definition: commctrl.h:1703
#define NF_QUERY
Definition: winuser.h:2435
#define BDR_SUNKENOUTER
Definition: winuser.h:443
NMHDR hdr
Definition: commctrl.h:159
HICON hIcon
Definition: status.c:57
HINSTANCE hinst
Definition: commctrl.h:1717
HCURSOR hCursor
Definition: winuser.h:3156
#define ERR(fmt,...)
Definition: debug.h:109
#define GWL_STYLE
Definition: winuser.h:846
static BOOL STATUSBAR_WMSetText(const STATUS_INFO *infoPtr, LPCSTR text)
Definition: status.c:1068
void redraw(int x, int y, int cx, int cy)
Definition: qtewin.cpp:1248
BOOL WINAPI GetClientRect(_In_ HWND, _Out_ LPRECT)
#define DT_SINGLELINE
Definition: winuser.h:540
#define TTM_GETTEXTW
Definition: commctrl.h:1775
BOOL WINAPI SetRect(_Out_ LPRECT, _In_ int, _In_ int, _In_ int, _In_ int)
DWORD_PTR dwItemData
Definition: commctrl.h:161
WINE_UNICODE_INLINE WCHAR * strcpyW(WCHAR *dst, const WCHAR *src)
Definition: unicode.h:219
#define WS_BORDER
Definition: pedump.c:625
LPWSTR text
Definition: status.c:56
#define SB_GETTEXTLENGTHW
Definition: commctrl.h:1918
GLuint in
Definition: glext.h:9616
#define NM_DBLCLK
Definition: commctrl.h:131
#define SB_GETTEXTLENGTHA
Definition: commctrl.h:1917
#define SB_SETTIPTEXTW
Definition: commctrl.h:1935
STATUSWINDOWPART * parts
Definition: status.c:74
HICON hIcon
Definition: msconfig.c:44
BOOL WINAPI RectVisible(_In_ HDC, _In_ LPCRECT)
void WINAPI DrawStatusTextW(HDC hdc, LPCRECT lprc, LPCWSTR text, UINT style)
Definition: commctrl.c:677
#define NM_RCLICK
Definition: commctrl.h:133
#define INFOTIPSIZE
Definition: commctrl.h:124
HBRUSH hbrBackground
Definition: winuser.h:3157
#define TTM_ADDTOOLW
Definition: commctrl.h:1759
HWND hwndToolTip
Definition: status.c:68
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define WM_LBUTTONUP
Definition: winuser.h:1759
#define TTM_GETTOOLCOUNT
Definition: commctrl.h:1778
HWND Notify
Definition: status.c:63
#define WS_POPUP
Definition: pedump.c:616
unsigned int UINT
Definition: ndis.h:50
#define WM_MOUSEMOVE
Definition: winuser.h:1757
HBRUSH WINAPI CreateSolidBrush(_In_ COLORREF)
#define lstrcpynA
Definition: compat.h:408
#define SM_CXVSCROLL
Definition: winuser.h:951
#define SB_SETPARTS
Definition: commctrl.h:1926
static INT STATUSBAR_WMGetText(const STATUS_INFO *infoPtr, INT size, LPWSTR buf)
Definition: status.c:988
GLint GLint GLint GLint GLint GLint y
Definition: gl.h:1548
static LRESULT STATUSBAR_GetTextA(STATUS_INFO *infoPtr, INT nPart, LPSTR buf)
Definition: status.c:458
#define DFC_SCROLL
Definition: winuser.h:475
LPARAM dwHitInfo
Definition: commctrl.h:163
#define MultiByteToWideChar
Definition: compat.h:100
#define WM_SETFONT
Definition: winuser.h:1632
#define NFR_ANSI
Definition: winuser.h:2433
#define CLR_DEFAULT
Definition: commctrl.h:305
static void STATUSBAR_DrawSizeGrip(HTHEME theme, HDC hdc, LPRECT lpRect)
Definition: status.c:135
#define WM_DRAWITEM
Definition: winuser.h:1627
static DWORD *static HFONT(WINAPI *pCreateFontIndirectExA)(const ENUMLOGFONTEXDVA *)
#define msg(x)
Definition: auth_time.c:54
#define IDC_ARROW
Definition: winuser.h:682
#define HORZ_BORDER
Definition: status.c:86
#define GWLP_HINSTANCE
Definition: winuser.h:850
static BOOL STATUSBAR_WMSize(STATUS_INFO *infoPtr, WORD flags)
Definition: status.c:1095
BOOL WINAPI PostMessageW(_In_opt_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
struct tagTOOLINFOA TTTOOLINFOA
#define WM_CREATE
Definition: winuser.h:1590
GLuint res
Definition: glext.h:9613
#define WM_RBUTTONDBLCLK
Definition: winuser.h:1763
#define SBT_OWNERDRAW
Definition: commctrl.h:1942
INT verticalBorder
Definition: status.c:76
#define WM_NCLBUTTONUP
Definition: winuser.h:1675
#define HIWORD(l)
Definition: typedefs.h:246
GLenum GLuint id
Definition: glext.h:5579
BOOL simple
Definition: status.c:67
#define SB_SETTIPTEXTA
Definition: commctrl.h:1934
BOOL WINAPI IsWindowVisible(_In_ HWND)
LONG bottom
Definition: windef.h:294
BOOL COMCTL32_IsReflectedMessage(UINT uMsg) DECLSPEC_HIDDEN
Definition: commctrl.c:1748
#define ULONG_PTR
Definition: config.h:101
static BOOL STATUSBAR_SetIcon(STATUS_INFO *infoPtr, INT nPart, HICON hIcon)
Definition: status.c:597
#define SetWindowLongPtrW
Definition: winuser.h:5247
#define SB_GETUNICODEFORMAT
Definition: commctrl.h:1940
#define SB_GETPARTS
Definition: commctrl.h:1927
static LRESULT STATUSBAR_SetTipTextA(const STATUS_INFO *infoPtr, INT id, LPSTR text)
Definition: status.c:791
WCHAR * LPWSTR
Definition: xmlstorage.h:184
BOOL WINAPI ScreenToClient(_In_ HWND, _Inout_ LPPOINT)
#define SB_SETMINHEIGHT
Definition: commctrl.h:1929
LONG_PTR LRESULT
Definition: windef.h:209
CardRegion * from
Definition: spigame.cpp:19
#define TTM_NEWTOOLRECTW
Definition: commctrl.h:1763
#define SB_GETICON
Definition: commctrl.h:1938
#define NM_TOOLTIPSCREATED
Definition: commctrl.h:144
int WINAPI FillRect(HDC, LPCRECT, HBRUSH)
#define TTM_DELTOOLW
Definition: commctrl.h:1761
Arabic default style
Definition: afstyles.h:93
HBRUSH WINAPI GetSysColorBrush(_In_ int)
#define SB_GETTIPTEXTA
Definition: commctrl.h:1936
static void STATUSBAR_DrawPart(const STATUS_INFO *infoPtr, HDC hdc, const STATUSWINDOWPART *part, int itemID)
Definition: status.c:161
COLORREF clrBk
Definition: status.c:71
GLuint64EXT * result
Definition: glext.h:11304
static LRESULT STATUSBAR_WMCreate(HWND hwnd, const CREATESTRUCTA *lpCreate)
Definition: status.c:890
LONG cy
Definition: windef.h:320
LPARAM lParam
Definition: combotst.c:139
#define SBN_SIMPLEMODECHANGE
Definition: commctrl.h:1950
#define SBT_NOBORDERS
Definition: commctrl.h:1943
#define LOWORD(l)
Definition: pedump.c:82
VOID COMCTL32_RefreshSysColors(void) DECLSPEC_HIDDEN
Definition: commctrl.c:1586
INT horizontalBorder
Definition: status.c:75
#define GWLP_ID
Definition: winuser.h:854
HRESULT WINAPI CloseThemeData(HTHEME hTheme)
Definition: system.c:950
#define WM_NOTIFY
Definition: richedit.h:61
static HICON STATUSBAR_GetIcon(const STATUS_INFO *infoPtr, INT nPart)
Definition: status.c:414
HRESULT WINAPI DrawThemeText(HTHEME hTheme, HDC hdc, int iPartId, int iStateId, LPCWSTR pszText, int iCharCount, DWORD dwTextFlags, DWORD dwTextFlags2, const RECT *pRect)
Definition: draw.c:1377
#define SUCCEEDED(hr)
Definition: intsafe.h:57
int * LPINT
Definition: windef.h:178
#define SB_GETTEXTW
Definition: commctrl.h:1916
LPSTR lpszText
Definition: commctrl.h:1706
#define WS_MAXIMIZE
Definition: pedump.c:623