ReactOS 0.4.15-dev-7788-g1ad9096
static.c
Go to the documentation of this file.
1/*
2 * Static control
3 *
4 * Copyright David W. Metcalfe, 1993
5 *
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
10 *
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
15 *
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
19 *
20 * Notes:
21 * - Controls with SS_SIMPLE but without SS_NOPREFIX:
22 * The text should not be changed. Windows doesn't clear the
23 * client rectangle, so the new text must be larger than the old one.
24 * - The SS_RIGHTJUST style is currently not implemented by Windows
25 * (or it does something different than documented).
26 *
27 * TODO:
28 * - Animated cursors
29 */
30
31#include <user32.h>
32
34
42
44
45/* offsets for GetWindowLong for static private information */
46#define HFONT_GWL_OFFSET 0
47#define HICON_GWL_OFFSET (sizeof(HFONT))
48#define UISTATE_GWL_OFFSET (HICON_GWL_OFFSET+sizeof(HICON)) // ReactOS: keep in sync with STATIC_UISTATE_GWL_OFFSET
49#define STATIC_EXTRA_BYTES (UISTATE_GWL_OFFSET + sizeof(LONG))
50
52
54{
55 STATIC_PaintTextfn, /* SS_LEFT */
56 STATIC_PaintTextfn, /* SS_CENTER */
57 STATIC_PaintTextfn, /* SS_RIGHT */
58 STATIC_PaintIconfn, /* SS_ICON */
59 STATIC_PaintRectfn, /* SS_BLACKRECT */
60 STATIC_PaintRectfn, /* SS_GRAYRECT */
61 STATIC_PaintRectfn, /* SS_WHITERECT */
62 STATIC_PaintRectfn, /* SS_BLACKFRAME */
63 STATIC_PaintRectfn, /* SS_GRAYFRAME */
64 STATIC_PaintRectfn, /* SS_WHITEFRAME */
65 NULL, /* SS_USERITEM */
66 STATIC_PaintTextfn, /* SS_SIMPLE */
67 STATIC_PaintTextfn, /* SS_LEFTNOWORDWRAP */
68 STATIC_PaintOwnerDrawfn, /* SS_OWNERDRAW */
69 STATIC_PaintBitmapfn, /* SS_BITMAP */
70 STATIC_PaintEnhMetafn, /* SS_ENHMETAFILE */
71 STATIC_PaintEtchedfn, /* SS_ETCHEDHORZ */
72 STATIC_PaintEtchedfn, /* SS_ETCHEDVERT */
73 STATIC_PaintEtchedfn, /* SS_ETCHEDFRAME */
74};
75
76
77/*********************************************************************
78 * static class descriptor
79 */
80static const WCHAR staticW[] = {'S','t','a','t','i','c',0};
82{
83 staticW, /* name */
84 CS_DBLCLKS | CS_PARENTDC, /* style */
85 StaticWndProcA, /* procA */
86 StaticWndProcW, /* procW */
87 STATIC_EXTRA_BYTES, /* extra */
88 IDC_ARROW, /* cursor */
89 0 /* brush */
90};
91
92/***********************************************************************
93 * STATIC_SetIcon
94 *
95 * Set the icon for an SS_ICON control.
96 */
98{
99 HICON prevIcon;
100 SIZE size;
101
102 if ((style & SS_TYPEMASK) != SS_ICON) return 0;
103 if (hicon && !get_icon_size( hicon, &size ))
104 {
105 WARN("hicon != 0, but invalid\n");
106 return 0;
107 }
108 prevIcon = (HICON)SetWindowLongPtrW( hwnd, HICON_GWL_OFFSET, (LONG_PTR)hicon );
109 if (hicon && !(style & SS_CENTERIMAGE) && !(style & SS_REALSIZECONTROL))
110 {
111 /* Windows currently doesn't implement SS_RIGHTJUST */
112 /*
113 if ((style & SS_RIGHTJUST) != 0)
114 {
115 RECT wr;
116 GetWindowRect(hwnd, &wr);
117 SetWindowPos( hwnd, 0, wr.right - info->nWidth, wr.bottom - info->nHeight,
118 info->nWidth, info->nHeight, SWP_NOACTIVATE | SWP_NOZORDER );
119 }
120 else */
121 {
123 }
124 }
125 return prevIcon;
126}
127
128/***********************************************************************
129 * STATIC_SetBitmap
130 *
131 * Set the bitmap for an SS_BITMAP control.
132 */
134{
135 HBITMAP hOldBitmap;
136
137 if ((style & SS_TYPEMASK) != SS_BITMAP) return 0;
139 WARN("hBitmap != 0, but it's not a bitmap\n");
140 return 0;
141 }
144 {
145 BITMAP bm;
146 GetObjectW(hBitmap, sizeof(bm), &bm);
147 /* Windows currently doesn't implement SS_RIGHTJUST */
148 /*
149 if ((style & SS_RIGHTJUST) != 0)
150 {
151 RECT wr;
152 GetWindowRect(hwnd, &wr);
153 SetWindowPos( hwnd, 0, wr.right - bm.bmWidth, wr.bottom - bm.bmHeight,
154 bm.bmWidth, bm.bmHeight, SWP_NOACTIVATE | SWP_NOZORDER );
155 }
156 else */
157 {
158 SetWindowPos( hwnd, 0, 0, 0, bm.bmWidth, bm.bmHeight,
160 }
161
162 }
163 return hOldBitmap;
164}
165
166/***********************************************************************
167 * STATIC_SetEnhMetaFile
168 *
169 * Set the enhanced metafile for an SS_ENHMETAFILE control.
170 */
171static HENHMETAFILE STATIC_SetEnhMetaFile( HWND hwnd, HENHMETAFILE hEnhMetaFile, DWORD style )
172{
173 if ((style & SS_TYPEMASK) != SS_ENHMETAFILE) return 0;
174 if (hEnhMetaFile && GetObjectType(hEnhMetaFile) != OBJ_ENHMETAFILE) {
175 WARN("hEnhMetaFile != 0, but it's not an enhanced metafile\n");
176 return 0;
177 }
178 return (HENHMETAFILE)SetWindowLongPtrW( hwnd, HICON_GWL_OFFSET, (LONG_PTR)hEnhMetaFile );
179}
180
181/***********************************************************************
182 * STATIC_GetImage
183 *
184 * Gets the bitmap for an SS_BITMAP control, the icon/cursor for an
185 * SS_ICON control or the enhanced metafile for an SS_ENHMETAFILE control.
186 */
188{
189 switch(style & SS_TYPEMASK)
190 {
191 case SS_ICON:
192 if ((wParam != IMAGE_ICON) &&
193 (wParam != IMAGE_CURSOR)) return NULL;
194 break;
195 case SS_BITMAP:
196 if (wParam != IMAGE_BITMAP) return NULL;
197 break;
198 case SS_ENHMETAFILE:
199 if (wParam != IMAGE_ENHMETAFILE) return NULL;
200 break;
201 default:
202 return NULL;
203 }
205}
206
207/***********************************************************************
208 * STATIC_LoadIconA
209 *
210 * Load the icon for an SS_ICON control.
211 */
213{
214 HICON hicon = 0;
215
216 if (hInstance && ((ULONG_PTR)hInstance >> 16))
217 {
218 if ((style & SS_REALSIZEIMAGE) != 0)
219 hicon = LoadImageA(hInstance, name, IMAGE_ICON, 0, 0, LR_SHARED);
220 else
221 {
222 hicon = LoadIconA( hInstance, name );
223 if (!hicon) hicon = LoadCursorA( hInstance, name );
224 }
225 }
226 if (!hicon) hicon = LoadIconA( 0, name );
227 /* Windows doesn't try to load a standard cursor,
228 probably because most IDs for standard cursors conflict
229 with the IDs for standard icons anyway */
230 return hicon;
231}
232
233/***********************************************************************
234 * STATIC_LoadIconW
235 *
236 * Load the icon for an SS_ICON control.
237 */
239{
240 HICON hicon = 0;
241
242 if (hInstance && ((ULONG_PTR)hInstance >> 16))
243 {
244 if ((style & SS_REALSIZEIMAGE) != 0)
245 hicon = LoadImageW(hInstance, name, IMAGE_ICON, 0, 0, LR_SHARED);
246 else
247 {
248 hicon = LoadIconW( hInstance, name );
249 if (!hicon) hicon = LoadCursorW( hInstance, name );
250 }
251 }
252 if (!hicon) hicon = LoadIconW( 0, name );
253 /* Windows doesn't try to load a standard cursor,
254 probably because most IDs for standard cursors conflict
255 with the IDs for standard icons anyway */
256 return hicon;
257}
258
259/***********************************************************************
260 * STATIC_TryPaintFcn
261 *
262 * Try to immediately paint the control.
263 */
265{
266 LONG style = full_style & SS_TYPEMASK;
267 RECT rc;
268
269 GetClientRect( hwnd, &rc );
271 {
272 HDC hdc;
273 HRGN hrgn;
274
275 hdc = GetDC( hwnd );
276 hrgn = set_control_clipping( hdc, &rc );
277 (staticPaintFunc[style])( hwnd, hdc, full_style );
279 if (hrgn) DeleteObject( hrgn );
280 ReleaseDC( hwnd, hdc );
281 }
282}
283
285{
286#ifdef __REACTOS__
288#else
289 HBRUSH hBrush;
291
292 if (!parent) parent = hwnd;
293 hBrush = (HBRUSH) SendMessageW( parent,
295 if (!hBrush) /* did the app forget to call DefWindowProc ? */
296 {
297 /* FIXME: DefWindowProc should return different colors if a
298 manifest is present */
299 hBrush = (HBRUSH)DefWindowProcW( parent, WM_CTLCOLORSTATIC,
300 (WPARAM)hdc, (LPARAM)hwnd);
301 }
302 return hBrush;
303#endif
304}
305
307{
311}
312
313/***********************************************************************
314 * hasTextStyle
315 *
316 * Tests if the control displays text.
317 */
319{
320 switch(style & SS_TYPEMASK)
321 {
322 case SS_SIMPLE:
323 case SS_LEFT:
325 case SS_CENTER:
326 case SS_RIGHT:
327 case SS_OWNERDRAW:
328 return TRUE;
329 }
330
331 return FALSE;
332}
333
334/***********************************************************************
335 * StaticWndProc_common
336 */
338{
339 LRESULT lResult = 0;
340 LONG full_style = GetWindowLongW( hwnd, GWL_STYLE );
341 LONG style = full_style & SS_TYPEMASK;
342#ifdef __REACTOS__
343 PWND pWnd;
344
345 pWnd = ValidateHwnd(hwnd);
346 if (pWnd)
347 {
348 if (!pWnd->fnid)
349 {
351 }
352 else
353 {
354 if (pWnd->fnid != FNID_STATIC)
355 {
356 ERR("Wrong window class for Static! fnId 0x%x\n",pWnd->fnid);
357 return 0;
358 }
359 }
360 }
361#endif
362
363 if (!IsWindow( hwnd )) return 0;
364
365 switch (uMsg)
366 {
367 case WM_CREATE:
368 if (style < 0L || style > SS_TYPEMASK)
369 {
370 ERR("Unknown style 0x%02lx\n", style );
371 return -1;
372 }
373 STATIC_update_uistate(hwnd, unicode); // ReactOS r30727
375 break;
376
377 case WM_NCDESTROY:
378#ifdef __REACTOS__
380#endif
381 if (style == SS_ICON) {
382/*
383 * FIXME
384 * DestroyIcon32( STATIC_SetIcon( wndPtr, 0 ) );
385 *
386 * We don't want to do this yet because DestroyIcon32 is broken. If the icon
387 * had already been loaded by the application the last thing we want to do is
388 * GlobalFree16 the handle.
389 */
390 break;
391 }
392 else return unicode ? DefWindowProcW(hwnd, uMsg, wParam, lParam) :
394
395 case WM_ERASEBKGND:
396 /* do all painting in WM_PAINT like Windows does */
397 return 1;
398
399 case WM_PRINTCLIENT:
400 case WM_PAINT:
401 {
402 PAINTSTRUCT ps;
403 RECT rect;
404 HDC hdc = wParam ? (HDC)wParam : BeginPaint(hwnd, &ps);
407 {
408 HRGN hrgn = set_control_clipping( hdc, &rect );
409 (staticPaintFunc[style])( hwnd, hdc, full_style );
411 if (hrgn) DeleteObject( hrgn );
412 }
413 if (!wParam) EndPaint(hwnd, &ps);
414 }
415 break;
416
417 case WM_ENABLE:
418 STATIC_TryPaintFcn( hwnd, full_style );
419 if (full_style & SS_NOTIFY) {
420 if (wParam) {
423 }
424 else {
427 }
428 }
429 break;
430
433 STATIC_TryPaintFcn( hwnd, full_style );
434 break;
435
436 case WM_NCCREATE:
437 {
439
440 if (full_style & SS_SUNKEN)
443
444 switch (style) {
445 case SS_ICON:
446 {
447 HICON hIcon;
448 if (unicode || IS_INTRESOURCE(cs->lpszName))
449 hIcon = STATIC_LoadIconW(cs->hInstance, cs->lpszName, full_style);
450 else
451 hIcon = STATIC_LoadIconA(cs->hInstance, (LPCSTR)cs->lpszName, full_style);
452 STATIC_SetIcon(hwnd, hIcon, full_style);
453 }
454 break;
455 case SS_BITMAP:
456 if ((ULONG_PTR)cs->hInstance >> 16)
457 {
459 if (unicode || IS_INTRESOURCE(cs->lpszName))
460 hBitmap = LoadBitmapW(cs->hInstance, cs->lpszName);
461 else
462 hBitmap = LoadBitmapA(cs->hInstance, (LPCSTR)cs->lpszName);
463 STATIC_SetBitmap(hwnd, hBitmap, full_style);
464 }
465 break;
466 }
467 /* SS_ENHMETAFILE: Despite what MSDN says, Windows does not load
468 the enhanced metafile that was specified as the window text. */
469 }
470 return unicode ? DefWindowProcW(hwnd, uMsg, wParam, lParam) :
472
473 case WM_SETTEXT:
474 if (hasTextStyle( full_style ))
475 {
476 if (unicode)
477 lResult = DefWindowProcW( hwnd, uMsg, wParam, lParam );
478 else
479 lResult = DefWindowProcA( hwnd, uMsg, wParam, lParam );
480 STATIC_TryPaintFcn( hwnd, full_style );
481 }
482 break;
483
484 case WM_SETFONT:
485 if (hasTextStyle( full_style ))
486 {
488 if (LOWORD(lParam))
490 }
491 break;
492
493 case WM_GETFONT:
495
496 case WM_NCHITTEST:
497 if (full_style & SS_NOTIFY)
498 return HTCLIENT;
499 else
500 return HTTRANSPARENT;
501
502 case WM_GETDLGCODE:
503 return DLGC_STATIC;
504
505 case WM_LBUTTONDOWN:
506 case WM_NCLBUTTONDOWN:
507 if (full_style & SS_NOTIFY)
510 return 0;
511
512 case WM_LBUTTONDBLCLK:
514 if (full_style & SS_NOTIFY)
517 return 0;
518
519 case STM_GETIMAGE:
520 return (LRESULT)STATIC_GetImage( hwnd, wParam, full_style );
521
522 case STM_GETICON:
523 return (LRESULT)STATIC_GetImage( hwnd, IMAGE_ICON, full_style );
524
525 case STM_SETIMAGE:
526 switch(wParam) {
527 case IMAGE_BITMAP:
528 if (style != SS_BITMAP) return 0; // ReactOS r43158
529 lResult = (LRESULT)STATIC_SetBitmap( hwnd, (HBITMAP)lParam, full_style );
530 break;
532 if (style != SS_ENHMETAFILE) return 0; // ReactOS r43158
533 lResult = (LRESULT)STATIC_SetEnhMetaFile( hwnd, (HENHMETAFILE)lParam, full_style );
534 break;
535 case IMAGE_ICON:
536 case IMAGE_CURSOR:
537 if (style != SS_ICON) return 0; // ReactOS r43158
538 lResult = (LRESULT)STATIC_SetIcon( hwnd, (HICON)lParam, full_style );
539 break;
540 default:
541 FIXME("STM_SETIMAGE: Unhandled type %lx\n", wParam);
542 break;
543 }
544 STATIC_TryPaintFcn( hwnd, full_style );
545 break;
546
547 case STM_SETICON:
548 lResult = (LRESULT)STATIC_SetIcon( hwnd, (HICON)wParam, full_style );
549 STATIC_TryPaintFcn( hwnd, full_style );
550 break;
551
552#ifdef __REACTOS__
553 case WM_UPDATEUISTATE:
554 if (unicode)
556 else
558
559 if (STATIC_update_uistate(hwnd, unicode) && hasTextStyle( full_style ))
560 {
562 }
563 break;
564#endif
565
566 default:
567 return unicode ? DefWindowProcW(hwnd, uMsg, wParam, lParam) :
569 }
570 return lResult;
571}
572
573/***********************************************************************
574 * StaticWndProcA
575 */
577{
578 if (!IsWindow( hWnd )) return 0;
580}
581
582/***********************************************************************
583 * StaticWndProcW
584 */
586{
587 if (!IsWindow( hWnd )) return 0;
588 return StaticWndProc_common(hWnd, uMsg, wParam, lParam, TRUE);
589}
590
592{
593 DRAWITEMSTRUCT dis;
594 HFONT font, oldFont = NULL;
596
597 dis.CtlType = ODT_STATIC;
598 dis.CtlID = id;
599 dis.itemID = 0;
602 dis.hwndItem = hwnd;
603 dis.hDC = hdc;
604 dis.itemData = 0;
605 GetClientRect( hwnd, &dis.rcItem );
606
608 if (font) oldFont = SelectObject( hdc, font );
609 /* hBrush = */ STATIC_SendWmCtlColorStatic(hwnd, hdc);
611 if (font) SelectObject( hdc, oldFont );
612}
613
615{
616 RECT rc;
617 HBRUSH hBrush;
618 HFONT hFont, hOldFont = NULL;
619 UINT format;
620 INT len, buf_size;
621 WCHAR *text;
622
623 GetClientRect( hwnd, &rc);
624
625 switch (style & SS_TYPEMASK)
626 {
627 case SS_LEFT:
629 break;
630
631 case SS_CENTER:
633 break;
634
635 case SS_RIGHT:
637 break;
638
639 case SS_SIMPLE:
641 break;
642
645 break;
646
647 default:
648 return;
649 }
650
653
654 if (style & SS_NOPREFIX)
656 else if (GetWindowLongW(hwnd, UISTATE_GWL_OFFSET) & UISF_HIDEACCEL) // ReactOS r30727
658
659 if ((style & SS_TYPEMASK) != SS_SIMPLE)
660 {
661 if (style & SS_CENTERIMAGE)
663 if (style & SS_EDITCONTROL)
665 if (style & SS_ENDELLIPSIS)
671 }
672
674 hOldFont = SelectObject( hdc, hFont );
675
676 /* SS_SIMPLE controls: WM_CTLCOLORSTATIC is sent, but the returned
677 brush is not used */
679
680 if ((style & SS_TYPEMASK) != SS_SIMPLE)
681 {
682 FillRect( hdc, &rc, hBrush );
684 }
685
686 buf_size = 256;
687 if (!(text = HeapAlloc( GetProcessHeap(), 0, buf_size * sizeof(WCHAR) )))
688 goto no_TextOut;
689
690 while ((len = InternalGetWindowText( hwnd, text, buf_size )) == buf_size - 1)
691 {
692 buf_size *= 2;
693 if (!(text = HeapReAlloc( GetProcessHeap(), 0, text, buf_size * sizeof(WCHAR) )))
694 goto no_TextOut;
695 }
696
697 if (!len) goto no_TextOut;
698
699 if (((style & SS_TYPEMASK) == SS_SIMPLE) && (style & SS_NOPREFIX))
700 {
701 /* Windows uses the faster ExtTextOut() to draw the text and
702 to paint the whole client rectangle with the text background
703 color. Reference: "Static Controls" by Kyle Marsh, 1992 */
705 &rc, text, len, NULL );
706 }
707 else
708 {
709 DrawTextW( hdc, text, -1, &rc, format );
710 }
711
712no_TextOut:
714
715 if (hFont)
716 SelectObject( hdc, hOldFont );
717}
718
720{
721 RECT rc;
722 HBRUSH hBrush;
723
724 GetClientRect( hwnd, &rc);
725
726 /* FIXME: send WM_CTLCOLORSTATIC */
727#ifdef __REACTOS__
728 hBrush = STATIC_SendWmCtlColorStatic(hwnd, hdc); // Always sent....
729#endif
730 switch (style & SS_TYPEMASK)
731 {
732 case SS_BLACKRECT:
734 FillRect( hdc, &rc, hBrush );
735 break;
736 case SS_GRAYRECT:
738 FillRect( hdc, &rc, hBrush );
739 break;
740 case SS_WHITERECT:
742 FillRect( hdc, &rc, hBrush );
743 break;
744 case SS_BLACKFRAME:
746 FrameRect( hdc, &rc, hBrush );
747 break;
748 case SS_GRAYFRAME:
750 FrameRect( hdc, &rc, hBrush );
751 break;
752 case SS_WHITEFRAME:
754 FrameRect( hdc, &rc, hBrush );
755 break;
756 default:
757 return;
758 }
759 DeleteObject( hBrush );
760}
761
762
764{
765 RECT rc, iconRect;
766 HBRUSH hbrush;
767 HICON hIcon;
768 SIZE size;
769
770 GetClientRect( hwnd, &rc );
773 if (!hIcon || !get_icon_size( hIcon, &size ))
774 {
775 FillRect(hdc, &rc, hbrush);
776 }
777 else
778 {
779 if (style & SS_CENTERIMAGE)
780 {
781 iconRect.left = (rc.right - rc.left) / 2 - size.cx / 2;
782 iconRect.top = (rc.bottom - rc.top) / 2 - size.cy / 2;
783 iconRect.right = iconRect.left + size.cx;
784 iconRect.bottom = iconRect.top + size.cy;
785 }
786 else
787 iconRect = rc;
788 FillRect( hdc, &rc, hbrush );
789 DrawIconEx( hdc, iconRect.left, iconRect.top, hIcon, iconRect.right - iconRect.left,
790 iconRect.bottom - iconRect.top, 0, NULL, DI_NORMAL );
791 }
792}
793
795{
796 HDC hMemDC;
797 HBITMAP hBitmap, oldbitmap;
798
799 /* message is still sent, even if the returned brush is not used */
801
804 && (hMemDC = CreateCompatibleDC( hdc )))
805 {
806 BITMAP bm;
807 RECT rcClient;
808
809 GetObjectW(hBitmap, sizeof(bm), &bm);
810 oldbitmap = SelectObject(hMemDC, hBitmap);
811
812 GetClientRect(hwnd, &rcClient);
813 if (style & SS_CENTERIMAGE)
814 {
815 HBRUSH hbrush = CreateSolidBrush(GetPixel(hMemDC, 0, 0));
816
817 FillRect( hdc, &rcClient, hbrush );
818
819 rcClient.left = (rcClient.right - rcClient.left)/2 - bm.bmWidth/2;
820 rcClient.top = (rcClient.bottom - rcClient.top)/2 - bm.bmHeight/2;
821 rcClient.right = rcClient.left + bm.bmWidth;
822 rcClient.bottom = rcClient.top + bm.bmHeight;
823
825 }
826 StretchBlt(hdc, rcClient.left, rcClient.top, rcClient.right - rcClient.left,
827 rcClient.bottom - rcClient.top, hMemDC,
828 0, 0, bm.bmWidth, bm.bmHeight, SRCCOPY);
829 SelectObject(hMemDC, oldbitmap);
830 DeleteDC(hMemDC);
831 }
832}
833
834
836{
837 HENHMETAFILE hEnhMetaFile;
838 RECT rc;
839 HBRUSH hbrush;
840
841 GetClientRect(hwnd, &rc);
843 FillRect(hdc, &rc, hbrush);
844 if ((hEnhMetaFile = (HENHMETAFILE)GetWindowLongPtrW( hwnd, HICON_GWL_OFFSET )))
845 {
846 /* The control's current font is not selected into the
847 device context! */
848 if (GetObjectType(hEnhMetaFile) == OBJ_ENHMETAFILE)
849 PlayEnhMetaFile(hdc, hEnhMetaFile, &rc);
850 }
851}
852
853
855{
856 RECT rc;
857
858 /* FIXME: sometimes (not always) sends WM_CTLCOLORSTATIC */
859 GetClientRect( hwnd, &rc );
860 switch (style & SS_TYPEMASK)
861 {
862 case SS_ETCHEDHORZ:
864 break;
865 case SS_ETCHEDVERT:
867 break;
868 case SS_ETCHEDFRAME:
870 break;
871 }
872}
static HRGN hrgn
static HBRUSH hbrush
static POBJECT_TYPE GetObjectType(IN PCWSTR TypeName)
Definition: ObTypes.c:15
Arabic default style
Definition: afstyles.h:94
HWND hWnd
Definition: settings.c:17
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
Definition: precomp.h:23
HFONT hFont
Definition: main.c:53
DWORD GetPixel(LPDIRECTDRAWSURFACE7 Surface, UINT x, UINT y)
Definition: blt.cpp:2
#define FIXME(fmt,...)
Definition: debug.h:111
#define WARN(fmt,...)
Definition: debug.h:112
#define ERR(fmt,...)
Definition: debug.h:110
HINSTANCE hInstance
Definition: charmap.c:19
WPARAM wParam
Definition: combotst.c:138
LPARAM lParam
Definition: combotst.c:139
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
static HBITMAP hBitmap
Definition: timezone.c:26
HRGN set_control_clipping(HDC hdc, const RECT *rect)
Definition: button.c:239
static void STATIC_PaintEnhMetafn(HWND hwnd, HDC hdc, DWORD style)
Definition: static.c:755
static HBRUSH STATIC_SendWmCtlColorStatic(HWND hwnd, HDC hdc)
Definition: static.c:290
void(* pfPaint)(HWND hwnd, HDC hdc, DWORD style)
Definition: static.c:63
#define HICON_GWL_OFFSET
Definition: static.c:60
static HBITMAP STATIC_SetBitmap(HWND hwnd, HBITMAP hBitmap, DWORD style)
Definition: static.c:164
static HICON STATIC_LoadIconW(HINSTANCE hInstance, LPCWSTR name, DWORD style)
Definition: static.c:244
static void STATIC_PaintOwnerDrawfn(HWND hwnd, HDC hdc, DWORD style)
Definition: static.c:513
static HICON STATIC_SetIcon(HWND hwnd, HICON hicon, DWORD style)
Definition: static.c:128
static void STATIC_PaintTextfn(HWND hwnd, HDC hdc, DWORD style)
Definition: static.c:536
static BOOL get_icon_size(HICON handle, SIZE *size)
Definition: static.c:88
static BOOL hasTextStyle(DWORD style)
Definition: static.c:311
static void STATIC_PaintRectfn(HWND hwnd, HDC hdc, DWORD style)
Definition: static.c:639
static HANDLE STATIC_GetImage(HWND hwnd, WPARAM wParam, DWORD style)
Definition: static.c:219
#define HFONT_GWL_OFFSET
Definition: static.c:59
static void STATIC_PaintBitmapfn(HWND hwnd, HDC hdc, DWORD style)
Definition: static.c:711
static void STATIC_PaintIconfn(HWND hwnd, HDC hdc, DWORD style)
Definition: static.c:680
static VOID STATIC_TryPaintFcn(HWND hwnd, LONG full_style)
Definition: static.c:270
#define STATIC_EXTRA_BYTES
Definition: static.c:61
static void STATIC_PaintEtchedfn(HWND hwnd, HDC hdc, DWORD style)
Definition: static.c:773
static const pfPaint staticPaintFunc[SS_TYPEMASK+1]
Definition: static.c:65
static HENHMETAFILE STATIC_SetEnhMetaFile(HWND hwnd, HENHMETAFILE hEnhMetaFile, DWORD style)
Definition: static.c:202
#define GetProcessHeap()
Definition: compat.h:736
#define HeapAlloc
Definition: compat.h:733
#define HeapReAlloc
Definition: compat.h:734
#define HeapFree(x, y, z)
Definition: compat.h:735
#define ValidateHwnd(hwnd)
Definition: precomp.h:85
const WCHAR * text
Definition: package.c:1799
r parent
Definition: btrfs.c:3010
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
pKey DeleteObject()
GLint GLint GLsizei GLsizei GLsizei GLint GLenum format
Definition: gl.h:1546
GLsizeiptr size
Definition: glext.h:5919
GLenum GLsizei len
Definition: glext.h:6722
GLuint id
Definition: glext.h:5910
#define cs
Definition: i386-dis.c:442
#define FNID_DESTROY
Definition: ntuser.h:898
#define FNID_STATIC
Definition: ntuser.h:873
BOOL NTAPI NtUserSetWindowFNID(HWND hWnd, WORD fnID)
Definition: window.c:4330
HDC hdc
Definition: main.c:9
static HBITMAP
Definition: button.c:44
static HDC
Definition: imagelist.c:92
static HICON
Definition: imagelist.c:84
static DWORD *static HFONT(WINAPI *pCreateFontIndirectExA)(const ENUMLOGFONTEXDVA *)
HICON hIcon
Definition: msconfig.c:44
__int3264 LONG_PTR
Definition: mstsclib_h.h:276
Definition: mk_font.cpp:20
unsigned int UINT
Definition: ndis.h:50
INT WINAPI DrawTextW(HDC hdc, LPCWSTR str, INT count, LPRECT rect, UINT flags)
Definition: defwnd.c:16
#define OBJ_BITMAP
Definition: objidl.idl:1415
#define OBJ_ENHMETAFILE
Definition: objidl.idl:1421
#define LRESULT
Definition: ole.h:14
#define LOWORD(l)
Definition: pedump.c:82
#define SS_WHITERECT
Definition: pedump.c:698
#define SS_WHITEFRAME
Definition: pedump.c:701
#define SS_BLACKRECT
Definition: pedump.c:696
#define SS_RIGHT
Definition: pedump.c:694
#define SS_SIMPLE
Definition: pedump.c:702
long LONG
Definition: pedump.c:60
#define SS_BITMAP
Definition: pedump.c:704
#define SS_GRAYFRAME
Definition: pedump.c:700
#define SS_LEFTNOWORDWRAP
Definition: pedump.c:703
#define SS_CENTER
Definition: pedump.c:693
#define SS_LEFT
Definition: pedump.c:692
#define SS_GRAYRECT
Definition: pedump.c:697
#define SS_BLACKFRAME
Definition: pedump.c:699
#define SS_ICON
Definition: pedump.c:695
#define WM_PRINTCLIENT
Definition: richedit.h:70
& rect
Definition: startmenu.cpp:1413
#define SS_ENDELLIPSIS
Definition: statst2.c:8
Definition: bl.h:1331
Definition: ntuser.h:694
DWORD fnid
Definition: ntuser.h:709
Definition: name.c:39
ULONG_PTR itemData
Definition: winuser.h:3093
LONG right
Definition: windef.h:308
LONG bottom
Definition: windef.h:309
LONG top
Definition: windef.h:307
LONG left
Definition: windef.h:306
int32_t INT
Definition: typedefs.h:58
uint32_t ULONG_PTR
Definition: typedefs.h:65
static __inline BOOL STATIC_update_uistate(HWND hwnd, BOOL unicode)
Definition: user_x.h:65
HBRUSH FASTCALL GetControlBrush(PWND pwnd, HDC hdc, UINT ctlType)
Definition: misc.c:180
static COLORREF color_3ddkshadow
Definition: static.c:43
static COLORREF color_3dhighlight
Definition: static.c:43
const struct builtin_class_descr STATIC_builtin_class
Definition: static.c:81
static VOID STATIC_InitColours(void)
Definition: static.c:306
LRESULT WINAPI StaticWndProc_common(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL unicode)
Definition: static.c:337
static const WCHAR staticW[]
Definition: static.c:80
#define UISTATE_GWL_OFFSET
Definition: static.c:48
LRESULT WINAPI StaticWndProcW(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: static.c:585
static HICON STATIC_LoadIconA(HINSTANCE hInstance, LPCSTR name, DWORD style)
Definition: static.c:212
static COLORREF color_3dshadow
Definition: static.c:43
LRESULT WINAPI StaticWndProcA(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: static.c:576
_In_ LONG _In_ HWND hwnd
Definition: winddi.h:4023
LONG_PTR LPARAM
Definition: windef.h:208
LONG_PTR LRESULT
Definition: windef.h:209
UINT_PTR WPARAM
Definition: windef.h:207
DWORD COLORREF
Definition: windef.h:300
#define WINAPI
Definition: msvc.h:6
int WINAPI GetObjectW(_In_ HANDLE h, _In_ int c, _Out_writes_bytes_opt_(c) LPVOID pv)
HGDIOBJ WINAPI SelectObject(_In_ HDC, _In_ HGDIOBJ)
Definition: dc.c:1539
#define DI_NORMAL
Definition: wingdi.h:72
HDC WINAPI CreateCompatibleDC(_In_opt_ HDC hdc)
BOOL WINAPI StretchBlt(_In_ HDC, _In_ int, _In_ int, _In_ int, _In_ int, _In_opt_ HDC, _In_ int, _In_ int, _In_ int, _In_ int, _In_ DWORD)
#define SRCCOPY
Definition: wingdi.h:333
#define ETO_CLIPPED
Definition: wingdi.h:648
BOOL WINAPI ExtTextOutW(_In_ HDC hdc, _In_ int x, _In_ int y, _In_ UINT options, _In_opt_ const RECT *lprect, _In_reads_opt_(c) LPCWSTR lpString, _In_ UINT c, _In_reads_opt_(c) const INT *lpDx)
#define ETO_OPAQUE
Definition: wingdi.h:647
int WINAPI FillRect(HDC, LPCRECT, HBRUSH)
COLORREF WINAPI SetTextColor(_In_ HDC, _In_ COLORREF)
Definition: text.c:918
HBRUSH WINAPI CreateSolidBrush(_In_ COLORREF)
BOOL WINAPI DeleteDC(_In_ HDC)
int WINAPI SelectClipRgn(_In_ HDC, _In_opt_ HRGN)
BOOL WINAPI PlayEnhMetaFile(_In_ HDC, _In_ HENHMETAFILE, _In_ LPCRECT)
#define WM_PAINT
Definition: winuser.h:1620
#define ODS_DISABLED
Definition: winuser.h:2547
int WINAPI ReleaseDC(_In_opt_ HWND, _In_ HDC)
#define WM_ERASEBKGND
Definition: winuser.h:1625
DWORD WINAPI GetSysColor(_In_ int)
#define MAKEWPARAM(l, h)
Definition: winuser.h:4009
#define WS_EX_STATICEDGE
Definition: winuser.h:403
BOOL WINAPI IsWindow(_In_opt_ HWND)
int WINAPI FrameRect(_In_ HDC, _In_ LPCRECT, _In_ HBRUSH)
#define WM_CTLCOLORSTATIC
Definition: winuser.h:1772
#define SWP_NOACTIVATE
Definition: winuser.h:1242
#define DT_NOPREFIX
Definition: winuser.h:537
BOOL WINAPI RedrawWindow(_In_opt_ HWND, _In_opt_ LPCRECT, _In_opt_ HRGN, _In_ UINT)
#define IMAGE_BITMAP
Definition: winuser.h:211
#define GetWindowLongPtrW
Definition: winuser.h:4829
#define WM_ENABLE
Definition: winuser.h:1615
#define COLOR_GRAYTEXT
Definition: winuser.h:932
#define SS_PATHELLIPSIS
Definition: winuser.h:364
#define DT_CENTER
Definition: winuser.h:527
#define ODA_DRAWENTIRE
Definition: winuser.h:2542
LRESULT WINAPI DefWindowProcW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define STM_SETICON
Definition: winuser.h:2092
LRESULT WINAPI DefWindowProcA(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define DT_END_ELLIPSIS
Definition: winuser.h:529
#define IMAGE_ICON
Definition: winuser.h:212
#define WM_CREATE
Definition: winuser.h:1608
BOOL WINAPI SetWindowPos(_In_ HWND, _In_opt_ HWND, _In_ int, _In_ int, _In_ int, _In_ int, _In_ UINT)
LONG WINAPI SetWindowLongW(_In_ HWND, _In_ int, _In_ LONG)
LONG WINAPI GetWindowLongW(_In_ HWND, _In_ int)
#define SS_OWNERDRAW
Definition: winuser.h:352
#define DT_SINGLELINE
Definition: winuser.h:540
#define WM_LBUTTONDBLCLK
Definition: winuser.h:1778
#define SWP_NOMOVE
Definition: winuser.h:1244
#define WM_COMMAND
Definition: winuser.h:1740
#define SS_NOTIFY
Definition: winuser.h:351
#define IS_INTRESOURCE(i)
Definition: winuser.h:580
#define BF_LEFT
Definition: winuser.h:454
HANDLE WINAPI LoadImageW(_In_opt_ HINSTANCE hInst, _In_ LPCWSTR name, _In_ UINT type, _In_ int cx, _In_ int cy, _In_ UINT fuLoad)
Definition: cursoricon.c:2203
#define IDC_ARROW
Definition: winuser.h:687
#define WM_NCHITTEST
Definition: winuser.h:1686
#define COLOR_3DDKSHADOW
Definition: winuser.h:939
#define COLOR_3DHIGHLIGHT
Definition: winuser.h:936
#define SS_ETCHEDFRAME
Definition: winuser.h:342
BOOL WINAPI IsRectEmpty(_In_ LPCRECT)
#define COLOR_3DSHADOW
Definition: winuser.h:931
#define EDGE_ETCHED
Definition: winuser.h:452
#define SS_EDITCONTROL
Definition: winuser.h:340
#define SS_NOPREFIX
Definition: winuser.h:350
#define RDW_UPDATENOW
Definition: winuser.h:1220
#define SS_ETCHEDHORZ
Definition: winuser.h:343
#define RDW_ERASE
Definition: winuser.h:1211
#define BF_BOTTOM
Definition: winuser.h:457
#define CS_DBLCLKS
Definition: winuser.h:651
HBITMAP WINAPI LoadBitmapA(_In_opt_ HINSTANCE, _In_ LPCSTR)
Definition: cursoricon.c:2148
#define WM_LBUTTONDOWN
Definition: winuser.h:1776
#define SS_ENHMETAFILE
Definition: winuser.h:341
#define WM_SYSCOLORCHANGE
Definition: winuser.h:1626
HCURSOR WINAPI LoadCursorW(_In_opt_ HINSTANCE, _In_ LPCWSTR)
Definition: cursoricon.c:2105
#define SS_CENTERIMAGE
Definition: winuser.h:339
#define WM_GETFONT
Definition: winuser.h:1651
#define SS_ETCHEDVERT
Definition: winuser.h:344
#define STM_SETIMAGE
Definition: winuser.h:2093
#define WM_NCLBUTTONDBLCLK
Definition: winuser.h:1694
#define WM_DRAWITEM
Definition: winuser.h:1645
#define WM_NCCREATE
Definition: winuser.h:1683
#define STM_GETICON
Definition: winuser.h:2090
#define STN_DISABLE
Definition: winuser.h:2096
#define WM_SETTEXT
Definition: winuser.h:1617
#define SS_WORDELLIPSIS
Definition: winuser.h:365
#define SS_TYPEMASK
Definition: winuser.h:362
#define DT_LEFT
Definition: winuser.h:534
BOOL WINAPI GetClientRect(_In_ HWND, _Out_ LPRECT)
#define IMAGE_ENHMETAFILE
Definition: winuser.h:214
BOOL WINAPI DrawEdge(_In_ HDC, _Inout_ LPRECT, _In_ UINT, _In_ UINT)
#define SS_REALSIZEIMAGE
Definition: winuser.h:354
#define BF_TOP
Definition: winuser.h:455
#define RDW_ALLCHILDREN
Definition: winuser.h:1221
#define WM_SETFONT
Definition: winuser.h:1650
BOOL WINAPI EndPaint(_In_ HWND, _In_ const PAINTSTRUCT *)
#define BF_RIGHT
Definition: winuser.h:456
HICON WINAPI LoadIconA(_In_opt_ HINSTANCE hInstance, _In_ LPCSTR lpIconName)
Definition: cursoricon.c:2060
#define DT_WORDBREAK
Definition: winuser.h:544
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:2028
#define HTCLIENT
Definition: winuser.h:2475
HDC WINAPI GetDC(_In_opt_ HWND)
#define DLGC_STATIC
Definition: winuser.h:2619
#define LR_SHARED
Definition: winuser.h:1100
#define SS_REALSIZECONTROL
Definition: winuser.h:353
BOOL WINAPI IsWindowEnabled(_In_ HWND)
#define DT_VCENTER
Definition: winuser.h:543
HWND WINAPI GetParent(_In_ HWND)
#define IMAGE_CURSOR
Definition: winuser.h:213
#define WM_NCDESTROY
Definition: winuser.h:1684
HANDLE WINAPI LoadImageA(_In_opt_ HINSTANCE hInst, _In_ LPCSTR name, _In_ UINT type, _In_ int cx, _In_ int cy, _In_ UINT fuLoad)
Definition: cursoricon.c:2178
#define HTTRANSPARENT
Definition: winuser.h:2473
#define GWLP_ID
Definition: winuser.h:860
#define DT_WORD_ELLIPSIS
Definition: winuser.h:531
#define DT_RIGHT
Definition: winuser.h:538
HBITMAP WINAPI LoadBitmapW(_In_opt_ HINSTANCE, _In_ LPCWSTR)
Definition: cursoricon.c:2163
#define SWP_NOZORDER
Definition: winuser.h:1247
#define DT_EXPANDTABS
Definition: winuser.h:532
#define ODT_STATIC
Definition: winuser.h:2541
#define DT_HIDEPREFIX
Definition: winuser.h:547
HDC WINAPI BeginPaint(_In_ HWND, _Out_ LPPAINTSTRUCT)
INT WINAPI InternalGetWindowText(_In_ HWND hWnd, _Out_writes_to_(cchMaxCount, return+1) LPWSTR pString, _In_ int cchMaxCount)
#define SetWindowLongPtrW
Definition: winuser.h:5346
#define DT_EDITCONTROL
Definition: winuser.h:528
#define BF_RECT
Definition: winuser.h:462
#define GWL_STYLE
Definition: winuser.h:852
#define STN_DBLCLK
Definition: winuser.h:2095
#define CS_PARENTDC
Definition: winuser.h:656
BOOL WINAPI IsWindowVisible(_In_ HWND)
#define STM_GETIMAGE
Definition: winuser.h:2091
HICON WINAPI LoadIconW(_In_opt_ HINSTANCE hInstance, _In_ LPCWSTR lpIconName)
Definition: cursoricon.c:2075
#define SS_SUNKEN
Definition: winuser.h:358
#define STN_ENABLE
Definition: winuser.h:2097
#define WM_NCLBUTTONDOWN
Definition: winuser.h:1692
#define STN_CLICKED
Definition: winuser.h:2094
#define RDW_INVALIDATE
Definition: winuser.h:1214
#define DT_PATH_ELLIPSIS
Definition: winuser.h:530
#define WM_GETDLGCODE
Definition: winuser.h:1689
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
HCURSOR WINAPI LoadCursorA(_In_opt_ HINSTANCE, _In_ LPCSTR)
Definition: cursoricon.c:2090
#define WS_EX_RIGHT
Definition: winuser.h:400
#define GWL_EXSTYLE
Definition: winuser.h:851
const char * LPCSTR
Definition: xmlstorage.h:183
__wchar_t WCHAR
Definition: xmlstorage.h:180
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185