ReactOS 0.4.17-dev-1321-g5c122a9
controls.h File Reference
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  HEADCOMBO
 

Macros

#define HBMMENU_CALLBACK   ((HBITMAP) -1)
 
#define HBMMENU_SYSTEM   ((HBITMAP) 1)
 
#define HBMMENU_MBAR_RESTORE   ((HBITMAP) 2)
 
#define HBMMENU_MBAR_MINIMIZE   ((HBITMAP) 3)
 
#define HBMMENU_MBAR_CLOSE   ((HBITMAP) 5)
 
#define HBMMENU_MBAR_CLOSE_D   ((HBITMAP) 6)
 
#define HBMMENU_MBAR_MINIMIZE_D   ((HBITMAP) 7)
 
#define HBMMENU_POPUP_CLOSE   ((HBITMAP) 8)
 
#define HBMMENU_POPUP_RESTORE   ((HBITMAP) 9)
 
#define HBMMENU_POPUP_MAXIMIZE   ((HBITMAP) 10)
 
#define HBMMENU_POPUP_MINIMIZE   ((HBITMAP) 11)
 
#define ID_CB_LISTBOX   1000
 
#define ID_CB_EDIT   1001
 
#define CB_OKAY   0
 
#define CBF_DROPPED   0x0001
 
#define CBF_BUTTONDOWN   0x0002
 
#define CBF_NOROLLUP   0x0004
 
#define CBF_MEASUREITEM   0x0008
 
#define CBF_FOCUSED   0x0010
 
#define CBF_CAPTURE   0x0020
 
#define CBF_EDIT   0x0040
 
#define CBF_NORESIZE   0x0080
 
#define CBF_NOTIFY   0x0100
 
#define CBF_NOREDRAW   0x0200
 
#define CBF_SELCHANGE   0x0400
 
#define CBF_NOEDITNOTIFY   0x1000
 
#define CBF_NOLBSELECT   0x2000 /* do not change current selection */
 
#define CBF_BEENFOCUSED   0x4000 /* has it ever had focus */
 
#define CBF_EUI   0x8000
 
#define CB_GETTYPE(lphc)   ((lphc)->dwStyle & (CBS_DROPDOWNLIST))
 
#define LB_INSERTSTRING_UPPER   0x1AA
 
#define LB_INSERTSTRING_LOWER   0x1AB
 
#define LB_ADDSTRING_UPPER   0x1AC
 
#define LB_ADDSTRING_LOWER   0x1AD
 

Typedefs

typedef struct HEADCOMBO * LPHEADCOMBO
 

Functions

BOOL COMBO_FlipListbox (LPHEADCOMBO, BOOL, BOOL)
 
HRGN set_control_clipping (HDC hdc, const RECT *rect)
 
LRESULT WINAPI DesktopWndProcA (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
 
LRESULT WINAPI DesktopWndProcW (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
 
LRESULT WINAPI User32DefWindowProc (HWND, UINT, WPARAM, LPARAM, BOOL)
 
BOOL WINAPI RegisterClientPFN (VOID)
 
LRESULT WINAPI IconTitleWndProcA (HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
 
LRESULT WINAPI IconTitleWndProcW (HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
 
LRESULT WINAPI ButtonWndProcA (HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
 
LRESULT WINAPI ButtonWndProcW (HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
 
LRESULT WINAPI ButtonWndProc_common (HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL unicode)
 
LRESULT WINAPI ComboWndProcA (HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
 
LRESULT WINAPI ComboWndProcW (HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
 
LRESULT WINAPI ComboWndProc_common (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam, BOOL unicode)
 
LRESULT WINAPI EditWndProcA (HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
 
LRESULT WINAPI EditWndProcW (HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
 
LRESULT WINAPI EditWndProc_common (HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam, BOOL unicode)
 
LRESULT WINAPI GhostWndProcA (HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
 
LRESULT WINAPI GhostWndProcW (HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
 
LRESULT WINAPI GhostWndProc_common (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL unicode)
 
LRESULT WINAPI ListBoxWndProcA (HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
 
LRESULT WINAPI ListBoxWndProcW (HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
 
LRESULT WINAPI ListBoxWndProc_common (HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam, BOOL unicode)
 
LRESULT WINAPI MDIClientWndProcA (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
 
LRESULT WINAPI MDIClientWndProcW (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
 
LRESULT WINAPI MDIClientWndProc_common (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam, BOOL unicode)
 
LRESULT WINAPI PopupMenuWndProcA (HWND hWnd, UINT Message, WPARAM wParam, LPARAM lParam)
 
LRESULT WINAPI PopupMenuWndProcW (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
 
LRESULT WINAPI ScrollBarWndProcW (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
 
LRESULT WINAPI ScrollBarWndProcA (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
 
LRESULT WINAPI StaticWndProcA (HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
 
LRESULT WINAPI StaticWndProcW (HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
 
LRESULT WINAPI StaticWndProc_common (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL unicode)
 
LRESULT WINAPI SwitchWndProcA (HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
 
LRESULT WINAPI SwitchWndProcW (HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
 

Macro Definition Documentation

◆ CB_GETTYPE

#define CB_GETTYPE (   lphc)    ((lphc)->dwStyle & (CBS_DROPDOWNLIST))

Definition at line 82 of file controls.h.

◆ CB_OKAY

#define CB_OKAY   0

Definition at line 42 of file controls.h.

◆ CBF_BEENFOCUSED

#define CBF_BEENFOCUSED   0x4000 /* has it ever had focus */

Definition at line 58 of file controls.h.

◆ CBF_BUTTONDOWN

#define CBF_BUTTONDOWN   0x0002

Definition at line 46 of file controls.h.

◆ CBF_CAPTURE

#define CBF_CAPTURE   0x0020

Definition at line 50 of file controls.h.

◆ CBF_DROPPED

#define CBF_DROPPED   0x0001

Definition at line 45 of file controls.h.

◆ CBF_EDIT

#define CBF_EDIT   0x0040

Definition at line 51 of file controls.h.

◆ CBF_EUI

#define CBF_EUI   0x8000

Definition at line 59 of file controls.h.

◆ CBF_FOCUSED

#define CBF_FOCUSED   0x0010

Definition at line 49 of file controls.h.

◆ CBF_MEASUREITEM

#define CBF_MEASUREITEM   0x0008

Definition at line 48 of file controls.h.

◆ CBF_NOEDITNOTIFY

#define CBF_NOEDITNOTIFY   0x1000

Definition at line 56 of file controls.h.

◆ CBF_NOLBSELECT

#define CBF_NOLBSELECT   0x2000 /* do not change current selection */

Definition at line 57 of file controls.h.

◆ CBF_NOREDRAW

#define CBF_NOREDRAW   0x0200

Definition at line 54 of file controls.h.

◆ CBF_NORESIZE

#define CBF_NORESIZE   0x0080

Definition at line 52 of file controls.h.

◆ CBF_NOROLLUP

#define CBF_NOROLLUP   0x0004

Definition at line 47 of file controls.h.

◆ CBF_NOTIFY

#define CBF_NOTIFY   0x0100

Definition at line 53 of file controls.h.

◆ CBF_SELCHANGE

#define CBF_SELCHANGE   0x0400

Definition at line 55 of file controls.h.

◆ HBMMENU_CALLBACK

#define HBMMENU_CALLBACK   ((HBITMAP) -1)

Definition at line 4 of file controls.h.

◆ HBMMENU_MBAR_CLOSE

#define HBMMENU_MBAR_CLOSE   ((HBITMAP) 5)

Definition at line 16 of file controls.h.

◆ HBMMENU_MBAR_CLOSE_D

#define HBMMENU_MBAR_CLOSE_D   ((HBITMAP) 6)

Definition at line 19 of file controls.h.

◆ HBMMENU_MBAR_MINIMIZE

#define HBMMENU_MBAR_MINIMIZE   ((HBITMAP) 3)

Definition at line 13 of file controls.h.

◆ HBMMENU_MBAR_MINIMIZE_D

#define HBMMENU_MBAR_MINIMIZE_D   ((HBITMAP) 7)

Definition at line 22 of file controls.h.

◆ HBMMENU_MBAR_RESTORE

#define HBMMENU_MBAR_RESTORE   ((HBITMAP) 2)

Definition at line 10 of file controls.h.

◆ HBMMENU_POPUP_CLOSE

#define HBMMENU_POPUP_CLOSE   ((HBITMAP) 8)

Definition at line 25 of file controls.h.

◆ HBMMENU_POPUP_MAXIMIZE

#define HBMMENU_POPUP_MAXIMIZE   ((HBITMAP) 10)

Definition at line 31 of file controls.h.

◆ HBMMENU_POPUP_MINIMIZE

#define HBMMENU_POPUP_MINIMIZE   ((HBITMAP) 11)

Definition at line 34 of file controls.h.

◆ HBMMENU_POPUP_RESTORE

#define HBMMENU_POPUP_RESTORE   ((HBITMAP) 9)

Definition at line 28 of file controls.h.

◆ HBMMENU_SYSTEM

#define HBMMENU_SYSTEM   ((HBITMAP) 1)

Definition at line 7 of file controls.h.

◆ ID_CB_EDIT

#define ID_CB_EDIT   1001

Definition at line 39 of file controls.h.

◆ ID_CB_LISTBOX

#define ID_CB_LISTBOX   1000

Definition at line 38 of file controls.h.

◆ LB_ADDSTRING_LOWER

#define LB_ADDSTRING_LOWER   0x1AD

Definition at line 89 of file controls.h.

◆ LB_ADDSTRING_UPPER

#define LB_ADDSTRING_UPPER   0x1AC

Definition at line 88 of file controls.h.

◆ LB_INSERTSTRING_LOWER

#define LB_INSERTSTRING_LOWER   0x1AB

Definition at line 87 of file controls.h.

◆ LB_INSERTSTRING_UPPER

#define LB_INSERTSTRING_UPPER   0x1AA

Definition at line 86 of file controls.h.

Typedef Documentation

◆ LPHEADCOMBO

Function Documentation

◆ ButtonWndProc_common()

LRESULT WINAPI ButtonWndProc_common ( HWND  hWnd,
UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam,
BOOL  unicode 
)

Definition at line 224 of file button.c.

225{
226 RECT rect;
227 POINT pt;
229 UINT btn_type = get_button_type( style );
230 LONG state;
231 HANDLE oldHbitmap;
232
233 if (!IsWindow( hWnd )) return 0;
235
236 pt.x = (short)LOWORD(lParam);
237 pt.y = (short)HIWORD(lParam);
238
239 switch (uMsg)
240 {
241 case WM_GETDLGCODE:
242 switch(btn_type)
243 {
244 case BS_USERBUTTON:
247 case BS_RADIOBUTTON:
249 case BS_GROUPBOX: return DLGC_STATIC;
250 default: return DLGC_BUTTON;
251 }
252
253 case WM_ENABLE:
254 paint_button( hWnd, btn_type, ODA_DRAWENTIRE );
255 break;
256
257 case WM_CREATE:
258 if (btn_type >= MAX_BTN_TYPE)
259 return -1; /* abort */
260
261 /* XP turns a BS_USERBUTTON into BS_PUSHBUTTON */
262#ifdef __REACTOS__
263 if (btn_type == BS_USERBUTTON )
264 {
265 style = (style & ~BS_TYPEMASK) | BS_PUSHBUTTON;
267 }
268#else
270#endif
272#ifdef __REACTOS__
273 button_update_uistate( hWnd, unicode );
274#endif
275 return 0;
276
277#ifdef __REACTOS__
278 case WM_NCDESTROY:
280 case WM_DESTROY:
281 break;
282#endif
283
284 case WM_ERASEBKGND:
285 if (btn_type == BS_OWNERDRAW)
286 {
287 HDC hdc = (HDC)wParam;
288 RECT rc;
289 HBRUSH hBrush;
291 if (!parent) parent = hWnd;
292#ifdef __REACTOS__
294#else
295 hBrush = (HBRUSH)SendMessageW(parent, WM_CTLCOLORBTN, (WPARAM)hdc, (LPARAM)hWnd);
296 if (!hBrush) /* did the app forget to call defwindowproc ? */
297 hBrush = (HBRUSH)DefWindowProcW(parent, WM_CTLCOLORBTN,
298 (WPARAM)hdc, (LPARAM)hWnd);
299#endif
300 GetClientRect(hWnd, &rc);
301 FillRect(hdc, &rc, hBrush);
302 }
303 return 1;
304
305 case WM_PRINTCLIENT:
306 case WM_PAINT:
307 {
308 PAINTSTRUCT ps;
310 if (btnPaintFunc[btn_type])
311 {
312 int nOldMode = SetBkMode( hdc, OPAQUE );
313 (btnPaintFunc[btn_type])( hWnd, hdc, ODA_DRAWENTIRE );
314 SetBkMode(hdc, nOldMode); /* reset painting mode */
315 }
316 if (!wParam) NtUserEndPaint( hWnd, &ps );
317 break;
318 }
319
320 case WM_KEYDOWN:
321 if (wParam == VK_SPACE)
322 {
326 }
327 break;
328
329 case WM_LBUTTONDBLCLK:
330 if(style & BS_NOTIFY ||
331 btn_type == BS_RADIOBUTTON ||
332 btn_type == BS_USERBUTTON ||
333 btn_type == BS_OWNERDRAW)
334 {
336 break;
337 }
338 /* fall through */
339 case WM_LBUTTONDOWN:
344 break;
345
346 case WM_KEYUP:
347 if (wParam != VK_SPACE)
348 break;
349 /* fall through */
350 case WM_LBUTTONUP:
351#ifdef __REACTOS__
352 {
353 BOOL TellParent = FALSE;
354#endif
356 if (!(state & BUTTON_BTNPRESSED)) break;
359 if (!(state & BST_PUSHED))
360 {
362 break;
363 }
366 if (uMsg == WM_KEYUP || PtInRect( &rect, pt ))
367 {
369 switch(btn_type)
370 {
371 case BS_AUTOCHECKBOX:
373 break;
376 break;
377 case BS_AUTO3STATE:
379 (state & BST_INDETERMINATE) ? 0 : ((state & 3) + 1), 0 );
380 break;
381 }
382
383#ifdef __REACTOS__
384 TellParent = TRUE; // <---- Fix CORE-10194, Notify parent after capture is released.
385#else
388#endif
389 }
390#ifndef __REACTOS__
391 else
392 {
394 }
395#else
397 if (TellParent) BUTTON_NOTIFY_PARENT(hWnd, BN_CLICKED);
398 }
399#endif
400 break;
401
403 TRACE("WM_CAPTURECHANGED %p\n", hWnd);
404 if (hWnd == (HWND)lParam) break;
407 {
411 }
412 break;
413
414 case WM_MOUSEMOVE:
415 if ((wParam & MK_LBUTTON) && GetCapture() == hWnd)
416 {
419 }
420 break;
421
422 case WM_SETTEXT:
423 {
424 /* Clear an old text here as Windows does */
426 {
428 HBRUSH hbrush;
429 RECT client, rc;
431 UINT message = (btn_type == BS_PUSHBUTTON ||
432 btn_type == BS_DEFPUSHBUTTON ||
433 btn_type == BS_USERBUTTON ||
434 btn_type == BS_OWNERDRAW) ?
436
437 if (!parent) parent = hWnd;
438#ifdef __REACTOS__
440#else
442 (WPARAM)hdc, (LPARAM)hWnd);
443 if (!hbrush) /* did the app forget to call DefWindowProc ? */
445 (WPARAM)hdc, (LPARAM)hWnd);
446#endif
447
449 rc = client;
450 /* FIXME: check other BS_* handlers */
451 if (btn_type == BS_GROUPBOX)
452 InflateRect(&rc, -7, 1); /* GB_Paint does this */
454 /* Clip by client rect bounds */
455 if (rc.right > client.right) rc.right = client.right;
456 if (rc.bottom > client.bottom) rc.bottom = client.bottom;
457 FillRect(hdc, &rc, hbrush);
459 }
460
461 if (unicode) DefWindowProcW( hWnd, WM_SETTEXT, wParam, lParam );
463 if (btn_type == BS_GROUPBOX) /* Yes, only for BS_GROUPBOX */
465 else
466 paint_button( hWnd, btn_type, ODA_DRAWENTIRE );
467 return 1; /* success. FIXME: check text length */
468 }
469
470 case WM_SETFONT:
471 set_button_font( hWnd, (HFONT)wParam );
473 break;
474
475 case WM_GETFONT:
476 return (LRESULT)get_button_font( hWnd );
477
478 case WM_SETFOCUS:
479 TRACE("WM_SETFOCUS %p\n",hWnd);
481 paint_button( hWnd, btn_type, ODA_FOCUS );
482 if (style & BS_NOTIFY)
484
485 if (((btn_type == BS_RADIOBUTTON) || (btn_type == BS_AUTORADIOBUTTON)) &&
487 {
489 }
490 break;
491
492 case WM_KILLFOCUS:
493 TRACE("WM_KILLFOCUS %p\n",hWnd);
496 paint_button( hWnd, btn_type, ODA_FOCUS );
497
498 if ((state & BUTTON_BTNPRESSED) && GetCapture() == hWnd)
500 if (style & BS_NOTIFY)
502
504 break;
505
508 break;
509
510 case BM_SETSTYLE:
511 btn_type = wParam & BS_TYPEMASK;
512#ifdef __REACTOS__
513 style = (style & ~BS_TYPEMASK) | btn_type;
515#else
517#endif
518
519 NtUserNotifyWinEvent( EVENT_OBJECT_STATECHANGE, hWnd, OBJID_CLIENT, 0 );
520
521 /* Only redraw if lParam flag is set.*/
522 if (lParam)
524
525 break;
526
527 case BM_CLICK:
528#ifdef __REACTOS__
530 if (state & BUTTON_BMCLICK)
531 break;
532 set_button_state(hWnd, state | BUTTON_BMCLICK); // Tracked in STATE_GWL_OFFSET.
533#endif
536#ifdef __REACTOS__
538 if (!(state & BUTTON_BMCLICK)) break;
539 state &= ~BUTTON_BMCLICK;
541#endif
542 break;
543
544 case BM_SETIMAGE:
545 /* Check that image format matches button style */
546 switch (style & (BS_BITMAP|BS_ICON))
547 {
548 case BS_BITMAP:
549 if (wParam != IMAGE_BITMAP) return 0;
550 break;
551 case BS_ICON:
552 if (wParam != IMAGE_ICON) return 0;
553 break;
554 default:
555 return 0;
556 }
557 oldHbitmap = set_button_icon( hWnd, (HANDLE)lParam );
559 return (LRESULT)oldHbitmap;
560
561 case BM_GETIMAGE:
562 return (LRESULT)get_button_icon( hWnd );
563
564 case BM_GETCHECK:
565 return get_button_state( hWnd ) & 3;
566
567 case BM_SETCHECK:
568 if (wParam > maxCheckState[btn_type]) wParam = maxCheckState[btn_type];
570 if ((btn_type == BS_RADIOBUTTON) || (btn_type == BS_AUTORADIOBUTTON))
571 {
572#ifdef __REACTOS__
573 if (wParam) style |= WS_TABSTOP;
574 else style &= ~WS_TABSTOP;
576#else
579#endif
580 }
581 if ((state & 3) != wParam)
582 {
583 set_button_state( hWnd, (state & ~3) | wParam );
584 paint_button( hWnd, btn_type, ODA_SELECT );
585
586 NtUserNotifyWinEvent( EVENT_OBJECT_STATECHANGE, hWnd, OBJID_CLIENT, 0 );
587 }
588 break;
589
590 case BM_GETSTATE:
591 return get_button_state( hWnd );
592
593 case BM_SETSTATE:
595 if (wParam)
597 else
599
600 paint_button( hWnd, btn_type, ODA_SELECT );
601
602 NtUserNotifyWinEvent( EVENT_OBJECT_STATECHANGE, hWnd, OBJID_CLIENT, 0 );
603
604 break;
605
606#ifdef __REACTOS__
607 case WM_UPDATEUISTATE:
608 if (unicode)
610 else
612
613 if (button_update_uistate(hWnd, unicode))
614 paint_button( hWnd, btn_type, ODA_DRAWENTIRE );
615 break;
616#endif
617
618 case WM_NCHITTEST:
619 if(btn_type == BS_GROUPBOX) return HTTRANSPARENT;
620 /* fall through */
621 default:
622 return unicode ? DefWindowProcW(hWnd, uMsg, wParam, lParam) :
624 }
625 return 0;
626}
static HBRUSH hbrush
static int state
Definition: maze.c:121
HWND hWnd
Definition: settings.c:17
RECT rect
Definition: combotst.c:67
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
#define BUTTON_NSTATES
Definition: button.c:77
#define BUTTON_NOTIFY_PARENT(hWnd, code)
Definition: button.c:85
static const pfPaint btnPaintFunc[MAX_BTN_TYPE]
Definition: button.c:157
static UINT BUTTON_CalcLabelRect(const BUTTON_INFO *infoPtr, HDC hdc, RECT *rc)
Definition: button.c:1282
static void paint_button(BUTTON_INFO *infoPtr, LONG style, UINT action)
Definition: button.c:221
#define BUTTON_BTNPRESSED
Definition: button.c:78
static UINT get_button_type(LONG window_style)
Definition: button.c:214
static const WORD maxCheckState[MAX_BTN_TYPE]
Definition: button.c:125
#define MAX_BTN_TYPE
Definition: button.c:123
static void BUTTON_CheckAutoRadioButton(HWND hwnd)
Definition: button.c:1753
unsigned short(__cdecl typeof(TIFFCurrentDirectory))(struct tiff *)
Definition: typeof.h:94
#define pt(x, y)
Definition: drawing.c:79
r parent
Definition: btrfs.c:3010
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned int UINT
Definition: sysinfo.c:13
VOID NTAPI NtUserNotifyWinEvent(DWORD Event, HWND hWnd, LONG idObject, LONG idChild)
Definition: event.c:254
#define FNID_DESTROY
Definition: ntuser.h:905
HWND NTAPI NtUserSetFocus(HWND hWnd)
Definition: focus.c:1717
BOOL NTAPI NtUserInvalidateRect(HWND hWnd, CONST RECT *lpRect, BOOL bErase)
Definition: painting.c:2541
DWORD NTAPI NtUserAlterWindowStyle(HWND hWnd, DWORD Index, LONG NewValue)
Definition: window.c:4092
BOOL NTAPI NtUserEndPaint(HWND hWnd, CONST PAINTSTRUCT *lPs)
Definition: painting.c:1660
HDC NTAPI NtUserBeginPaint(HWND hWnd, PAINTSTRUCT *lPs)
Definition: painting.c:1614
HWND NTAPI NtUserSetCapture(HWND Wnd)
Definition: focus.c:1699
BOOL NTAPI NtUserSetWindowFNID(HWND hWnd, WORD fnID)
Definition: window.c:4335
HDC NTAPI NtUserGetDC(HWND hWnd)
Definition: windc.c:1014
LONG_PTR LPARAM
Definition: minwindef.h:175
LONG_PTR LRESULT
Definition: minwindef.h:176
UINT_PTR WPARAM
Definition: minwindef.h:174
HDC hdc
Definition: main.c:9
static HDC
Definition: imagelist.c:88
#define LOWORD(l)
Definition: pedump.c:82
#define BS_AUTORADIOBUTTON
Definition: pedump.c:660
#define BS_USERBUTTON
Definition: pedump.c:659
#define WS_TABSTOP
Definition: pedump.c:634
#define BS_AUTOCHECKBOX
Definition: pedump.c:654
long LONG
Definition: pedump.c:60
#define BS_GROUPBOX
Definition: pedump.c:658
#define BS_OWNERDRAW
Definition: pedump.c:661
#define BS_AUTO3STATE
Definition: pedump.c:657
#define BS_RADIOBUTTON
Definition: pedump.c:655
#define BS_PUSHBUTTON
Definition: pedump.c:651
#define BS_DEFPUSHBUTTON
Definition: pedump.c:652
#define WM_PAINT
Definition: winuser.h:1648
#define BST_INDETERMINATE
Definition: winuser.h:198
#define WM_ERASEBKGND
Definition: winuser.h:1653
#define BS_BITMAP
Definition: winuser.h:258
BOOL WINAPI IsWindow(_In_opt_ HWND)
#define WM_CTLCOLORSTATIC
Definition: winuser.h:1800
#define BM_GETSTATE
Definition: winuser.h:1949
#define IMAGE_BITMAP
Definition: winuser.h:211
#define WM_ENABLE
Definition: winuser.h:1643
#define WM_KEYUP
Definition: winuser.h:1744
BOOL WINAPI ReleaseCapture(void)
Definition: message.c:2890
#define ODA_DRAWENTIRE
Definition: winuser.h:2578
LRESULT WINAPI DefWindowProcW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define DLGC_BUTTON
Definition: winuser.h:2662
LRESULT WINAPI DefWindowProcA(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define BST_UNCHECKED
Definition: winuser.h:199
#define BN_DOUBLECLICKED
Definition: winuser.h:1957
#define IMAGE_ICON
Definition: winuser.h:212
#define BN_SETFOCUS
Definition: winuser.h:1962
#define WM_CAPTURECHANGED
Definition: winuser.h:1836
#define WM_CREATE
Definition: winuser.h:1636
#define BS_ICON
Definition: winuser.h:264
#define VK_SPACE
Definition: winuser.h:2255
#define BM_SETSTATE
Definition: winuser.h:1952
LONG WINAPI GetWindowLongW(_In_ HWND, _In_ int)
#define WM_LBUTTONDBLCLK
Definition: winuser.h:1806
#define BS_TYPEMASK
Definition: winuser.h:270
#define ODA_FOCUS
Definition: winuser.h:2580
#define DLGC_UNDEFPUSHBUTTON
Definition: winuser.h:2658
#define WM_NCHITTEST
Definition: winuser.h:1714
#define BN_KILLFOCUS
Definition: winuser.h:1959
#define WM_SETFOCUS
Definition: winuser.h:1641
#define WM_MOUSEMOVE
Definition: winuser.h:1803
HWND WINAPI GetCapture(void)
Definition: message.c:2881
#define BS_NOTIFY
Definition: winuser.h:268
#define WM_LBUTTONDOWN
Definition: winuser.h:1804
#define WM_SYSCOLORCHANGE
Definition: winuser.h:1654
#define DLGC_DEFPUSHBUTTON
Definition: winuser.h:2657
#define WM_GETFONT
Definition: winuser.h:1679
#define WM_NCCREATE
Definition: winuser.h:1711
#define BM_SETCHECK
Definition: winuser.h:1950
#define BM_SETIMAGE
Definition: winuser.h:1951
#define WM_CTLCOLORBTN
Definition: winuser.h:1797
BOOL WINAPI PtInRect(_In_ LPCRECT, _In_ POINT)
#define WM_SETTEXT
Definition: winuser.h:1645
BOOL WINAPI GetClientRect(_In_ HWND, _Out_ LPRECT)
#define DLGC_RADIOBUTTON
Definition: winuser.h:2659
#define WM_SETFONT
Definition: winuser.h:1678
#define BM_CLICK
Definition: winuser.h:1946
#define BST_PUSHED
Definition: winuser.h:201
#define BM_GETIMAGE
Definition: winuser.h:1948
#define BM_SETSTYLE
Definition: winuser.h:1953
#define BST_FOCUS
Definition: winuser.h:200
#define DLGC_STATIC
Definition: winuser.h:2661
#define WM_LBUTTONUP
Definition: winuser.h:1805
HWND WINAPI GetParent(_In_ HWND)
#define WM_NCDESTROY
Definition: winuser.h:1712
#define ODA_SELECT
Definition: winuser.h:2579
#define HTTRANSPARENT
Definition: winuser.h:2509
#define MK_LBUTTON
Definition: winuser.h:2403
#define BN_CLICKED
Definition: winuser.h:1954
#define WM_DESTROY
Definition: winuser.h:1637
#define WM_KEYDOWN
Definition: winuser.h:1743
BOOL WINAPI InflateRect(_Inout_ LPRECT, _In_ int, _In_ int)
#define GWL_STYLE
Definition: winuser.h:863
BOOL WINAPI IsWindowVisible(_In_ HWND)
#define WM_KILLFOCUS
Definition: winuser.h:1642
#define WM_GETDLGCODE
Definition: winuser.h:1717
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define BST_CHECKED
Definition: winuser.h:197
#define BM_GETCHECK
Definition: winuser.h:1947
#define WM_PRINTCLIENT
Definition: richedit.h:70
static FILE * client
Definition: client.c:37
#define TRACE(s)
Definition: solgame.cpp:4
Definition: dcommon.idl:28
long bottom
Definition: dcommon.idl:29
long right
Definition: dcommon.idl:29
Definition: tftpd.h:60
Definition: style.c:91
#define HIWORD(l)
Definition: typedefs.h:247
#define NtUserReleaseDC(HWND, HDC)
Definition: user_x.h:120
#define NTUSER_WNDPROC_BUTTON
Definition: user_x.h:137
#define MAKE_FNID(index)
Definition: user_x.h:143
#define NtUserReleaseCapture()
Definition: user_x.h:121
HBRUSH FASTCALL GetControlColor(PWND pwndParent, PWND pwnd, HDC hdc, UINT CtlMsg)
Definition: misc.c:153
static HANDLE get_button_icon(HWND hwnd)
Definition: button.c:153
static HANDLE set_button_icon(HWND hwnd, HANDLE icon)
Definition: button.c:158
static HFONT set_button_font(HWND hwnd, HFONT font)
Definition: button.c:148
static HFONT get_button_font(HWND hwnd)
Definition: button.c:143
static LONG get_button_state(HWND hwnd)
Definition: button.c:133
static LONG set_button_state(HWND hwnd, LONG state)
Definition: button.c:138
#define OBJID_CLIENT
Definition: winable.h:19
#define OPAQUE
Definition: wingdi.h:949
int WINAPI FillRect(HDC, LPCRECT, HBRUSH)
int WINAPI SetBkMode(_In_ HDC, _In_ int)
Definition: dc.c:1056

Referenced by RegisterClientPFN().

◆ ButtonWndProcA()

LRESULT WINAPI ButtonWndProcA ( HWND  hWnd,
UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam 
)

Referenced by RegisterClientPFN().

◆ ButtonWndProcW()

LRESULT WINAPI ButtonWndProcW ( HWND  hWnd,
UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam 
)

Referenced by RegisterClientPFN().

◆ COMBO_FlipListbox()

BOOL COMBO_FlipListbox ( LPHEADCOMBO  lphc,
BOOL  ok,
BOOL  bRedrawButton 
)

Definition at line 1086 of file combo.c.

1087{
1088 if( lphc->wState & CBF_DROPPED )
1089 {
1090 CBRollUp( lphc, ok, bRedrawButton );
1091 return FALSE;
1092 }
1093
1094 CBDropDown( lphc );
1095 return TRUE;
1096}
#define ok(value,...)
Definition: atltest.h:57
#define CBF_DROPPED
Definition: controls.h:45
static void CBRollUp(LPHEADCOMBO lphc, BOOL ok, BOOL bButton)
Definition: combo.c:1031
static void CBDropDown(LPHEADCOMBO lphc)
Definition: combo.c:925
UINT wState
Definition: comctl32.h:155

Referenced by COMBO_WindowProc(), ComboWndProc_common(), LISTBOX_HandleLButtonDownCombo(), LISTBOX_WindowProc(), and ListBoxWndProc_common().

◆ ComboWndProc_common()

LRESULT WINAPI ComboWndProc_common ( HWND  hwnd,
UINT  message,
WPARAM  wParam,
LPARAM  lParam,
BOOL  unicode 
)

Definition at line 1758 of file combo.c.

1759{
1761
1762 TRACE("[%p]: msg %s wp %08Ix lp %08Ix\n", hwnd, SPY_GetMsgName(message, hwnd), wParam, lParam);
1763
1764#ifdef __REACTOS__
1765 PWND pWnd;
1766
1767 pWnd = ValidateHwnd(hwnd);
1768 if (pWnd)
1769 {
1770 if (!pWnd->fnid)
1771 {
1773 }
1774 else
1775 {
1776 if (pWnd->fnid != FNID_COMBOBOX)
1777 {
1778 ERR("Wrong window class for ComboBox! fnId 0x%x\n",pWnd->fnid);
1779 return 0;
1780 }
1781 }
1782 }
1783 else
1784 {
1785 return 0;
1786 }
1787#else
1788 if (!IsWindow(hwnd)) return 0;
1789 if (message == WM_NCCREATE || message == WM_CREATE) NtUserSetWindowFNID( hwnd, MAKE_FNID(NTUSER_WNDPROC_COMBO) );
1790#endif
1791
1792 if( lphc || message == WM_NCCREATE )
1793 switch(message)
1794 {
1795 case WM_NCCREATE:
1796 {
1797 LONG style = unicode ? ((LPCREATESTRUCTW)lParam)->style : ((LPCREATESTRUCTA)lParam)->style;
1798 return COMBO_NCCreate(hwnd, style);
1799 }
1800 case WM_NCDESTROY:
1801 COMBO_NCDestroy(lphc);
1802#ifdef __REACTOS__
1804#endif
1805 break;/* -> DefWindowProc */
1806
1807 case WM_CREATE:
1808 {
1810 LONG style;
1811 if(unicode)
1812 {
1813 hwndParent = ((LPCREATESTRUCTW)lParam)->hwndParent;
1815 }
1816 else
1817 {
1818 hwndParent = ((LPCREATESTRUCTA)lParam)->hwndParent;
1820 }
1821 return COMBO_Create(hwnd, lphc, hwndParent, style, unicode);
1822 }
1823 case WM_PRINTCLIENT:
1824 /* Fallthrough */
1825 case WM_PAINT:
1826 /* wParam may contain a valid HDC! */
1827 return COMBO_Paint(lphc, (HDC)wParam);
1828 case WM_ERASEBKGND:
1829 /* do all painting in WM_PAINT like Windows does */
1830 return 1;
1831
1832 case WM_GETDLGCODE:
1833 {
1835 if (lParam && (((LPMSG)lParam)->message == WM_KEYDOWN))
1836 {
1837 int vk = (int)((LPMSG)lParam)->wParam;
1838
1839 if ((vk == VK_RETURN || vk == VK_ESCAPE) && (lphc->wState & CBF_DROPPED))
1841 }
1842 return result;
1843 }
1844 case WM_SIZE:
1845 COMBO_Size( lphc );
1846 return TRUE;
1847 case WM_SETFONT:
1848 COMBO_Font( lphc, (HFONT)wParam, (BOOL)lParam );
1849 return TRUE;
1850 case WM_GETFONT:
1851 return (LRESULT)lphc->hFont;
1852 case WM_SETFOCUS:
1853 if (lphc->wState & CBF_EDIT)
1854 {
1855 NtUserSetFocus( lphc->hWndEdit );
1856 /* The first time focus is received, select all the text */
1857 if (!(lphc->wState & CBF_BEENFOCUSED))
1858 {
1859 SendMessageW(lphc->hWndEdit, EM_SETSEL, 0, -1);
1860 lphc->wState |= CBF_BEENFOCUSED;
1861 }
1862 }
1863 else
1864 COMBO_SetFocus( lphc );
1865 return TRUE;
1866 case WM_KILLFOCUS:
1867 {
1868 HWND hwndFocus = WIN_GetFullHandle((HWND)wParam);
1869 if (!hwndFocus || (hwndFocus != lphc->hWndEdit && hwndFocus != lphc->hWndLBox))
1870 COMBO_KillFocus( lphc );
1871 return TRUE;
1872 }
1873 case WM_COMMAND:
1875 case WM_GETTEXT:
1876 return unicode ? COMBO_GetTextW( lphc, wParam, (LPWSTR)lParam )
1877 : COMBO_GetTextA( lphc, wParam, (LPSTR)lParam );
1878 case WM_SETTEXT:
1879 case WM_GETTEXTLENGTH:
1880 case WM_CLEAR:
1881 if ((message == WM_GETTEXTLENGTH) && !ISWIN31 && !(lphc->wState & CBF_EDIT))
1882 {
1883 int j = SendMessageW(lphc->hWndLBox, LB_GETCURSEL, 0, 0);
1884 if (j == -1) return 0;
1885 return unicode ? SendMessageW(lphc->hWndLBox, LB_GETTEXTLEN, j, 0) :
1886 SendMessageA(lphc->hWndLBox, LB_GETTEXTLEN, j, 0);
1887 }
1888 else if ( lphc->wState & CBF_EDIT )
1889 {
1890 LRESULT ret;
1891 lphc->wState |= CBF_NOEDITNOTIFY;
1892 ret = unicode ? SendMessageW(lphc->hWndEdit, message, wParam, lParam) :
1893 SendMessageA(lphc->hWndEdit, message, wParam, lParam);
1894 lphc->wState &= ~CBF_NOEDITNOTIFY;
1895 return ret;
1896 }
1897 else
1898 return CB_ERR;
1899 case WM_CUT:
1900 case WM_PASTE:
1901 case WM_COPY:
1902 if (lphc->wState & CBF_EDIT)
1903 {
1904 return unicode ? SendMessageW(lphc->hWndEdit, message, wParam, lParam) :
1905 SendMessageA(lphc->hWndEdit, message, wParam, lParam);
1906 }
1907 else return CB_ERR;
1908
1909 case WM_DRAWITEM:
1910 case WM_DELETEITEM:
1911 case WM_COMPAREITEM:
1912 case WM_MEASUREITEM:
1913 return COMBO_ItemOp(lphc, message, lParam);
1914 case WM_ENABLE:
1915 if (lphc->wState & CBF_EDIT)
1918
1919 /* Force the control to repaint when the enabled state changes. */
1921 return TRUE;
1922 case WM_SETREDRAW:
1923 if (wParam)
1924 lphc->wState &= ~CBF_NOREDRAW;
1925 else
1926 lphc->wState |= CBF_NOREDRAW;
1927
1928 if ( lphc->wState & CBF_EDIT )
1931 return 0;
1932 case WM_SYSKEYDOWN:
1933#ifdef __REACTOS__
1934 if ( KF_ALTDOWN & HIWORD(lParam) )
1935#else
1936 if ( KEYDATA_ALT & HIWORD(lParam) )
1937#endif
1938 if( wParam == VK_UP || wParam == VK_DOWN )
1939#ifdef __REACTOS__
1940 {
1941#endif
1942 COMBO_FlipListbox( lphc, FALSE, FALSE );
1943 return 0;
1944#ifdef __REACTOS__
1945 }
1946 break;
1947#endif
1948
1949 case WM_KEYDOWN:
1950 if ((wParam == VK_RETURN || wParam == VK_ESCAPE) &&
1951 (lphc->wState & CBF_DROPPED))
1952 {
1953 CBRollUp( lphc, wParam == VK_RETURN, FALSE );
1954 return TRUE;
1955 }
1956 else if ((wParam == VK_F4) && !(lphc->wState & CBF_EUI))
1957 {
1958 COMBO_FlipListbox( lphc, FALSE, FALSE );
1959 return TRUE;
1960 }
1961 /* fall through */
1962 case WM_CHAR:
1963 case WM_IME_CHAR:
1964 {
1965 HWND hwndTarget;
1966
1967#ifdef __REACTOS__
1968 if (lphc->wState & CBF_DROPPED)
1969 lphc->wState |= CBF_NOROLLUP;
1970#endif
1971 if ( lphc->wState & CBF_EDIT )
1972 hwndTarget = lphc->hWndEdit;
1973 else
1974 hwndTarget = lphc->hWndLBox;
1975
1976 return unicode ? SendMessageW(hwndTarget, message, wParam, lParam) :
1977 SendMessageA(hwndTarget, message, wParam, lParam);
1978 }
1979 case WM_LBUTTONDOWN:
1980 if (!(lphc->wState & CBF_FOCUSED)) NtUserSetFocus( lphc->self );
1981 if (lphc->wState & CBF_FOCUSED) COMBO_LButtonDown( lphc, lParam );
1982 return TRUE;
1983 case WM_LBUTTONUP:
1984 COMBO_LButtonUp( lphc );
1985 return TRUE;
1986 case WM_MOUSEMOVE:
1987 if ( lphc->wState & CBF_CAPTURE )
1988 COMBO_MouseMove( lphc, wParam, lParam );
1989 return TRUE;
1990
1991 case WM_MOUSEWHEEL:
1992 if (wParam & (MK_SHIFT | MK_CONTROL))
1993 return unicode ? DefWindowProcW(hwnd, message, wParam, lParam) :
1995
1996 if (GET_WHEEL_DELTA_WPARAM(wParam) > 0) return SendMessageW(hwnd, WM_KEYDOWN, VK_UP, 0);
1997 if (GET_WHEEL_DELTA_WPARAM(wParam) < 0) return SendMessageW(hwnd, WM_KEYDOWN, VK_DOWN, 0);
1998 return TRUE;
1999
2000 case WM_CTLCOLOR:
2001 case WM_CTLCOLORMSGBOX:
2002 case WM_CTLCOLOREDIT:
2003 case WM_CTLCOLORLISTBOX:
2004 case WM_CTLCOLORBTN:
2005 case WM_CTLCOLORDLG:
2007 case WM_CTLCOLORSTATIC:
2008#ifdef __REACTOS__
2009 if (pWnd && !(pWnd->state2 & WNDS2_WIN40COMPAT)) break; // Must be Win 4.0 and above.
2010#endif
2011 if (lphc->owner)
2012 return SendMessageW(lphc->owner, message, wParam, lParam);
2013 break;
2014
2015 /* Combo messages */
2016
2017 case CB_ADDSTRING:
2018 if( unicode )
2019 {
2020 if (lphc->dwStyle & CBS_LOWERCASE)
2022 else if (lphc->dwStyle & CBS_UPPERCASE)
2024 return SendMessageW(lphc->hWndLBox, LB_ADDSTRING, 0, lParam);
2025 }
2026 else /* unlike the unicode version, the ansi version does not overwrite
2027 the string if converting case */
2028 {
2029 char *string = NULL;
2030 LRESULT ret;
2031 if (lphc->dwStyle & CBS_LOWERCASE)
2032 {
2033 string = strdup((char *)lParam);
2034 CharLowerA(string);
2035 }
2036
2037 else if (lphc->dwStyle & CBS_UPPERCASE)
2038 {
2039 string = strdup((char *)lParam);
2040 CharUpperA(string);
2041 }
2042
2043 ret = SendMessageA(lphc->hWndLBox, LB_ADDSTRING, 0, string ? (LPARAM)string : lParam);
2044 free(string);
2045 return ret;
2046 }
2047 case CB_INSERTSTRING:
2048 if (unicode)
2049 {
2050 if (lphc->dwStyle & CBS_LOWERCASE)
2052 else if (lphc->dwStyle & CBS_UPPERCASE)
2055 }
2056 else
2057 {
2058 if (lphc->dwStyle & CBS_LOWERCASE)
2060 else if (lphc->dwStyle & CBS_UPPERCASE)
2063 }
2064 case CB_DELETESTRING:
2065 return unicode ? SendMessageW(lphc->hWndLBox, LB_DELETESTRING, wParam, 0) :
2066 SendMessageA(lphc->hWndLBox, LB_DELETESTRING, wParam, 0);
2067 case CB_SELECTSTRING:
2068 return COMBO_SelectString(lphc, (INT)wParam, lParam, unicode);
2069 case CB_FINDSTRING:
2070 return unicode ? SendMessageW(lphc->hWndLBox, LB_FINDSTRING, wParam, lParam) :
2071 SendMessageA(lphc->hWndLBox, LB_FINDSTRING, wParam, lParam);
2072 case CB_FINDSTRINGEXACT:
2073 return unicode ? SendMessageW(lphc->hWndLBox, LB_FINDSTRINGEXACT, wParam, lParam) :
2074 SendMessageA(lphc->hWndLBox, LB_FINDSTRINGEXACT, wParam, lParam);
2075 case CB_SETITEMHEIGHT:
2076 return COMBO_SetItemHeight( lphc, (INT)wParam, (INT)lParam);
2077 case CB_GETITEMHEIGHT:
2078 if ((INT)wParam >= 0) /* listbox item */
2079 return SendMessageW(lphc->hWndLBox, LB_GETITEMHEIGHT, wParam, 0);
2080 return CBGetTextAreaHeight(lphc, FALSE);
2081 case CB_RESETCONTENT:
2083 if( (lphc->wState & CBF_EDIT) && CB_HASSTRINGS(lphc) )
2084 SendMessageW(lphc->hWndEdit, WM_SETTEXT, 0, (LPARAM)L"");
2085 else
2087 return TRUE;
2088 case CB_INITSTORAGE:
2091 return SendMessageW(lphc->hWndLBox, LB_GETHORIZONTALEXTENT, 0, 0);
2094 case CB_GETTOPINDEX:
2095 return SendMessageW(lphc->hWndLBox, LB_GETTOPINDEX, 0, 0);
2096 case CB_GETLOCALE:
2097 return SendMessageW(lphc->hWndLBox, LB_GETLOCALE, 0, 0);
2098 case CB_SETLOCALE:
2099 return SendMessageW(lphc->hWndLBox, LB_SETLOCALE, wParam, 0);
2100 case CB_SETDROPPEDWIDTH:
2101 if ((CB_GETTYPE(lphc) == CBS_SIMPLE) || (INT)wParam >= 32768)
2102 return CB_ERR;
2103 /* new value must be higher than combobox width */
2104 if ((INT)wParam >= lphc->droppedRect.right - lphc->droppedRect.left)
2105 lphc->droppedWidth = wParam;
2106 else if (wParam)
2107 lphc->droppedWidth = 0;
2108
2109 /* recalculate the combobox area */
2110 CBCalcPlacement(lphc);
2111
2112 /* fall through */
2113 case CB_GETDROPPEDWIDTH:
2114 if (lphc->droppedWidth)
2115 return lphc->droppedWidth;
2116 return lphc->droppedRect.right - lphc->droppedRect.left;
2119 return CB_OKAY;
2120 case CB_GETDROPPEDSTATE:
2121 return (lphc->wState & CBF_DROPPED) != 0;
2122 case CB_DIR:
2123 return unicode ? SendMessageW(lphc->hWndLBox, LB_DIR, wParam, lParam) :
2124 SendMessageA(lphc->hWndLBox, LB_DIR, wParam, lParam);
2125
2126 case CB_SHOWDROPDOWN:
2127 if (CB_GETTYPE(lphc) != CBS_SIMPLE)
2128 {
2129 if (wParam)
2130 {
2131 if (!(lphc->wState & CBF_DROPPED))
2132 CBDropDown( lphc );
2133 }
2134 else if (lphc->wState & CBF_DROPPED)
2135 CBRollUp( lphc, FALSE, TRUE );
2136 }
2137 return TRUE;
2138 case CB_GETCOUNT:
2139 return SendMessageW(lphc->hWndLBox, LB_GETCOUNT, 0, 0);
2140 case CB_GETCURSEL:
2141 return SendMessageW(lphc->hWndLBox, LB_GETCURSEL, 0, 0);
2142 case CB_SETCURSEL:
2144 if (lParam >= 0)
2146
2147 /* no LBN_SELCHANGE in this case, update manually */
2148 CBPaintText( lphc, NULL );
2149 lphc->wState &= ~CBF_SELCHANGE;
2150 return lParam;
2151 case CB_GETLBTEXT:
2152 return unicode ? SendMessageW(lphc->hWndLBox, LB_GETTEXT, wParam, lParam) :
2153 SendMessageA(lphc->hWndLBox, LB_GETTEXT, wParam, lParam);
2154 case CB_GETLBTEXTLEN:
2155 return unicode ? SendMessageW(lphc->hWndLBox, LB_GETTEXTLEN, wParam, 0) :
2156 SendMessageA(lphc->hWndLBox, LB_GETTEXTLEN, wParam, 0);
2157 case CB_GETITEMDATA:
2158 return SendMessageW(lphc->hWndLBox, LB_GETITEMDATA, wParam, 0);
2159 case CB_SETITEMDATA:
2161 case CB_GETEDITSEL:
2162 /* Edit checks passed parameters itself */
2163 if (lphc->wState & CBF_EDIT)
2164 return SendMessageW(lphc->hWndEdit, EM_GETSEL, wParam, lParam);
2165 return CB_ERR;
2166 case CB_SETEDITSEL:
2167 if (lphc->wState & CBF_EDIT)
2169 return CB_ERR;
2170 case CB_SETEXTENDEDUI:
2171 if (CB_GETTYPE(lphc) == CBS_SIMPLE )
2172 return CB_ERR;
2173 if (wParam)
2174 lphc->wState |= CBF_EUI;
2175 else lphc->wState &= ~CBF_EUI;
2176 return CB_OKAY;
2177 case CB_GETEXTENDEDUI:
2178 return (lphc->wState & CBF_EUI) != 0;
2179 case CB_GETCOMBOBOXINFO:
2180 return COMBO_GetComboBoxInfo(lphc, (COMBOBOXINFO *)lParam);
2181 case CB_LIMITTEXT:
2182 if (lphc->wState & CBF_EDIT)
2184 return TRUE;
2185
2186#ifdef __REACTOS__
2187 case WM_UPDATEUISTATE:
2188 if (unicode)
2190 else
2192
2193 if (COMBO_update_uistate(lphc))
2194 {
2195 /* redraw text */
2196 if (!(lphc->wState & CBF_EDIT))
2197 NtUserInvalidateRect(lphc->self, &lphc->textRect, TRUE);
2198 }
2199 break;
2200
2201 case WM_CBLOSTTEXTFOCUS: /* undocumented message - deselects the text when focus is lost */
2202 if (lphc->hWndEdit != NULL)
2203 {
2204 SendMessage(lphc->self, WM_LBUTTONUP, 0, 0xFFFFFFFF);
2205 SendMessage(lphc->hWndEdit, EM_SETSEL, 0, 0);
2206 lphc->wState &= ~(CBF_FOCUSED | CBF_BEENFOCUSED);
2207 CB_NOTIFY(lphc, CBN_KILLFOCUS);
2208 }
2209 return TRUE;
2210#endif
2211
2212 default:
2213 if (message >= WM_USER)
2214 WARN("unknown msg WM_USER+%04x wp=%04Ix lp=%08Ix\n", message - WM_USER, wParam, lParam );
2215 break;
2216 }
2217 return unicode ? DefWindowProcW(hwnd, message, wParam, lParam) :
2219}
short INT16
Definition: actypes.h:130
#define WARN(fmt,...)
Definition: precomp.h:61
#define ERR(fmt,...)
Definition: precomp.h:57
#define CBF_EDIT
Definition: controls.h:51
#define CBF_NOREDRAW
Definition: controls.h:54
#define CBF_FOCUSED
Definition: controls.h:49
#define CBF_CAPTURE
Definition: controls.h:50
#define CBF_EUI
Definition: controls.h:59
#define CBF_BEENFOCUSED
Definition: controls.h:58
#define CBF_NOEDITNOTIFY
Definition: controls.h:56
#define CBF_NOROLLUP
Definition: controls.h:47
static HWND hwndParent
Definition: cryptui.c:299
#define free
Definition: debug_ros.c:5
static LRESULT COMBO_Paint(HEADCOMBO *lphc, HDC hdc)
Definition: combo.c:809
static LRESULT COMBO_NCDestroy(HEADCOMBO *lphc)
Definition: combo.c:159
static INT CBGetTextAreaHeight(HEADCOMBO *lphc, BOOL clip_item_height)
Definition: combo.c:206
static LRESULT COMBO_NCCreate(HWND hwnd, LONG style)
Definition: combo.c:124
#define ISWIN31
Definition: combo.c:60
static void COMBO_Size(HEADCOMBO *lphc)
Definition: combo.c:1398
static void COMBO_LButtonDown(LPHEADCOMBO lphc, LPARAM lParam)
Definition: combo.c:1537
#define CB_GETTYPE(lphc)
Definition: combo.c:58
static void COMBO_KillFocus(LPHEADCOMBO lphc)
Definition: combo.c:1132
static void COMBO_MouseMove(LPHEADCOMBO lphc, WPARAM wParam, LPARAM lParam)
Definition: combo.c:1615
static LRESULT COMBO_GetComboBoxInfo(const HEADCOMBO *lphc, COMBOBOXINFO *pcbi)
Definition: combo.c:1649
static void COMBO_SetFocus(LPHEADCOMBO lphc)
Definition: combo.c:1110
static void CBPaintText(HEADCOMBO *lphc, HDC hdc_paint)
Definition: combo.c:629
static LRESULT COMBO_Command(LPHEADCOMBO lphc, WPARAM wParam, HWND hWnd)
Definition: combo.c:1158
static void COMBO_LButtonUp(LPHEADCOMBO lphc)
Definition: combo.c:1582
static void CBCalcPlacement(HEADCOMBO *combo)
Definition: combo.c:317
#define CB_HASSTRINGS(lphc)
Definition: combo.c:56
#define KEYDATA_ALT
Definition: combo.c:43
static LRESULT COMBO_ItemOp(LPHEADCOMBO lphc, UINT msg, LPARAM lParam)
Definition: combo.c:1267
static LRESULT COMBO_SelectString(LPHEADCOMBO lphc, INT start, LPARAM pText)
Definition: combo.c:1519
BOOL COMBO_FlipListbox(LPHEADCOMBO lphc, BOOL ok, BOOL bRedrawButton)
Definition: combo.c:1086
static LRESULT COMBO_SetItemHeight(LPHEADCOMBO lphc, INT index, INT height)
Definition: combo.c:1484
static void COMBO_Font(LPHEADCOMBO lphc, HFONT hFont, BOOL bRedraw)
Definition: combo.c:1453
#define CB_NOTIFY(lphc, code)
Definition: combo.c:50
static void CBGetDroppedControlRect(LPHEADCOMBO lphc, LPRECT lpRect)
Definition: combo.c:386
static LRESULT COMBO_Create(HWND hwnd, LPHEADCOMBO lphc, HWND hwndParent, LONG style)
Definition: combo.c:401
LPSTR WINAPI CharLowerA(char *str)
Definition: string.c:1087
LPWSTR WINAPI CharLowerW(WCHAR *str)
Definition: string.c:1136
LPWSTR WINAPI CharUpperW(WCHAR *str)
Definition: string.c:1249
LPSTR WINAPI CharUpperA(LPSTR str)
Definition: string.c:1200
unsigned short vk
Definition: console.c:118
static char * strdup(const char *buf)
Definition: string.h:83
unsigned int(__cdecl typeof(jpeg_read_scanlines))(struct jpeg_decompress_struct *
Definition: typeof.h:31
return ret
Definition: mutex.c:147
#define L(x)
Definition: resources.c:13
GLuint64EXT * result
Definition: glext.h:11304
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 GLint GLint j
Definition: glfuncs.h:250
#define WNDS2_WIN40COMPAT
Definition: ntuser.h:654
#define FNID_COMBOBOX
Definition: ntuser.h:874
#define CB_SELECTSTRING
Definition: winuser.h:1989
#define CB_SETITEMDATA
Definition: winuser.h:1995
#define CB_GETHORIZONTALEXTENT
Definition: winuser.h:1978
#define MK_SHIFT
Definition: winuser.h:2405
#define LB_GETCOUNT
Definition: winuser.h:2067
#define WM_GETTEXTLENGTH
Definition: winuser.h:1647
#define CB_SETDROPPEDWIDTH
Definition: winuser.h:1991
#define LB_FINDSTRINGEXACT
Definition: winuser.h:2064
#define CB_GETLBTEXTLEN
Definition: winuser.h:1982
#define LB_GETITEMDATA
Definition: winuser.h:2070
#define EM_LIMITTEXT
Definition: winuser.h:2029
#define CB_GETLBTEXT
Definition: winuser.h:1981
#define WM_PASTE
Definition: winuser.h:1891
#define LB_SETHORIZONTALEXTENT
Definition: winuser.h:2100
#define CB_OKAY
Definition: winuser.h:2470
#define LB_GETTEXT
Definition: winuser.h:2085
#define LB_SETTOPINDEX
Definition: winuser.h:2106
#define DLGC_WANTCHARS
Definition: winuser.h:2660
#define CB_SHOWDROPDOWN
Definition: winuser.h:1999
#define CB_GETITEMHEIGHT
Definition: winuser.h:1980
#define EM_GETSEL
Definition: winuser.h:2026
#define CB_SETHORIZONTALEXTENT
Definition: winuser.h:1994
#define LB_DIR
Definition: winuser.h:2062
#define WM_SIZE
Definition: winuser.h:1639
#define WM_COMMAND
Definition: winuser.h:1768
#define KF_ALTDOWN
Definition: winuser.h:2485
struct tagCREATESTRUCTA * LPCREATESTRUCTA
#define CB_INITSTORAGE
Definition: winuser.h:1985
#define CB_ERR
Definition: winuser.h:2471
#define CB_SETCURSEL
Definition: winuser.h:1990
#define LB_GETTOPINDEX
Definition: winuser.h:2087
#define VK_UP
Definition: winuser.h:2261
LRESULT WINAPI SendMessageA(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define LB_GETLOCALE
Definition: winuser.h:2081
#define WM_GETTEXT
Definition: winuser.h:1646
#define WM_CTLCOLORSCROLLBAR
Definition: winuser.h:1799
#define WM_CUT
Definition: winuser.h:1889
#define LB_SETLOCALE
Definition: winuser.h:2103
#define CB_RESETCONTENT
Definition: winuser.h:1988
#define CB_FINDSTRINGEXACT
Definition: winuser.h:1969
#define LB_ADDSTRING
Definition: winuser.h:2060
#define CB_DIR
Definition: winuser.h:1967
#define CB_GETCOUNT
Definition: winuser.h:1971
#define CB_GETDROPPEDWIDTH
Definition: winuser.h:1975
#define WM_DELETEITEM
Definition: winuser.h:1675
#define CB_GETCOMBOBOXINFO
Definition: winuser.h:1970
#define WM_CTLCOLORMSGBOX
Definition: winuser.h:1794
#define WM_DRAWITEM
Definition: winuser.h:1673
#define CB_SETLOCALE
Definition: winuser.h:1997
#define CBS_SIMPLE
Definition: winuser.h:291
#define WM_IME_CHAR
Definition: winuser.h:1862
#define LB_RESETCONTENT
Definition: winuser.h:2091
#define LB_DELETESTRING
Definition: winuser.h:2061
#define VK_RETURN
Definition: winuser.h:2237
#define CB_GETDROPPEDCONTROLRECT
Definition: winuser.h:1973
#define LB_FINDSTRING
Definition: winuser.h:2063
#define MK_CONTROL
Definition: winuser.h:2406
#define LB_GETITEMHEIGHT
Definition: winuser.h:2071
#define LB_GETHORIZONTALEXTENT
Definition: winuser.h:2069
#define DLGC_WANTARROWS
Definition: winuser.h:2652
#define LB_INSERTSTRING
Definition: winuser.h:2089
#define CB_ADDSTRING
Definition: winuser.h:1965
#define CB_GETITEMDATA
Definition: winuser.h:1979
#define SendMessage
Definition: winuser.h:6009
#define CBN_KILLFOCUS
Definition: winuser.h:2007
#define CBS_LOWERCASE
Definition: winuser.h:286
#define EM_SETSEL
Definition: winuser.h:2047
#define WM_MEASUREITEM
Definition: winuser.h:1674
#define CB_SETEDITSEL
Definition: winuser.h:1992
#define VK_F4
Definition: winuser.h:2294
#define CB_GETDROPPEDSTATE
Definition: winuser.h:1974
#define WM_CHAR
Definition: winuser.h:1745
#define LB_GETTEXTLEN
Definition: winuser.h:2086
#define LB_SETITEMDATA
Definition: winuser.h:2101
#define CB_GETEXTENDEDUI
Definition: winuser.h:1977
#define VK_DOWN
Definition: winuser.h:2263
#define WM_COPY
Definition: winuser.h:1890
#define CB_GETTOPINDEX
Definition: winuser.h:1984
#define CB_LIMITTEXT
Definition: winuser.h:1987
#define WM_USER
Definition: winuser.h:1923
#define CB_GETEDITSEL
Definition: winuser.h:1976
#define WM_CTLCOLORLISTBOX
Definition: winuser.h:1796
#define DLGC_WANTMESSAGE
Definition: winuser.h:2655
#define CB_FINDSTRING
Definition: winuser.h:1968
#define LB_SETCURSEL
Definition: winuser.h:2099
#define WM_CLEAR
Definition: winuser.h:1892
#define CBS_UPPERCASE
Definition: winuser.h:293
#define CB_SETEXTENDEDUI
Definition: winuser.h:1993
#define WM_COMPAREITEM
Definition: winuser.h:1683
#define CB_INSERTSTRING
Definition: winuser.h:1986
#define LB_GETCURSEL
Definition: winuser.h:2068
#define CB_GETCURSEL
Definition: winuser.h:1972
#define CB_DELETESTRING
Definition: winuser.h:1966
#define CB_GETLOCALE
Definition: winuser.h:1983
#define CB_SETITEMHEIGHT
Definition: winuser.h:1996
#define LB_INITSTORAGE
Definition: winuser.h:2088
#define WM_CTLCOLOREDIT
Definition: winuser.h:1795
#define VK_ESCAPE
Definition: winuser.h:2250
#define WM_CTLCOLORDLG
Definition: winuser.h:1798
struct tagCREATESTRUCTW * LPCREATESTRUCTW
#define WM_SYSKEYDOWN
Definition: winuser.h:1747
#define WM_SETREDRAW
Definition: winuser.h:1644
RECT textRect
Definition: comctl32.h:157
RECT droppedRect
Definition: comctl32.h:159
HWND hWndLBox
Definition: comctl32.h:154
HWND owner
Definition: comctl32.h:151
HWND hWndEdit
Definition: comctl32.h:153
HWND self
Definition: comctl32.h:150
HFONT hFont
Definition: comctl32.h:156
INT droppedWidth
Definition: comctl32.h:162
UINT dwStyle
Definition: comctl32.h:152
long left
Definition: dcommon.idl:29
Definition: ntuser.h:698
DWORD state2
Definition: ntuser.h:706
DWORD fnid
Definition: ntuser.h:713
DMUS_IO_STYLE style
Definition: style.c:95
#define WM_MOUSEWHEEL
Definition: treelist.c:96
uint16_t * LPWSTR
Definition: typedefs.h:56
char * LPSTR
Definition: typedefs.h:51
int32_t INT
Definition: typedefs.h:58
#define WM_CBLOSTTEXTFOCUS
Definition: undocuser.h:52
const char * SPY_GetMsgName(UINT msg, HWND hWnd)
Definition: spy.c:2232
#define NtUserEnableWindow(HWND, ENABLE)
Definition: user_x.h:124
#define WIN_GetFullHandle(h)
Definition: user_x.h:108
#define ValidateHwnd(hwnd)
Definition: precomp.h:98
static LRESULT COMBO_GetTextW(LPHEADCOMBO lphc, INT count, LPWSTR buf)
Definition: combo.c:1333
static HEADCOMBO * get_control_state(HWND hwnd)
Definition: combo.c:83
static LRESULT COMBO_GetTextA(LPHEADCOMBO lphc, INT count, LPSTR buf)
Definition: combo.c:1383
_In_ LONG _In_ HWND hwnd
Definition: winddi.h:4023
#define WM_CTLCOLOR
Definition: windowsx.h:29

Referenced by RegisterClientPFN().

◆ ComboWndProcA()

LRESULT WINAPI ComboWndProcA ( HWND  hwnd,
UINT  msg,
WPARAM  wParam,
LPARAM  lParam 
)

Referenced by RegisterClientPFN().

◆ ComboWndProcW()

LRESULT WINAPI ComboWndProcW ( HWND  hwnd,
UINT  msg,
WPARAM  wParam,
LPARAM  lParam 
)

Referenced by RegisterClientPFN().

◆ DesktopWndProcA()

LRESULT WINAPI DesktopWndProcA ( HWND  hwnd,
UINT  message,
WPARAM  wParam,
LPARAM  lParam 
)

Definition at line 1307 of file message.c.

1308{
1310 MSG AnsiMsg, UcMsg;
1311
1312 TRACE("Desktop A Class Atom! hWnd 0x%x, Msg %d\n", hwnd, message);
1313
1314 AnsiMsg.hwnd = hwnd;
1315 AnsiMsg.message = message;
1316 AnsiMsg.wParam = wParam;
1317 AnsiMsg.lParam = lParam;
1318 AnsiMsg.time = 0;
1319 AnsiMsg.pt.x = 0;
1320 AnsiMsg.pt.y = 0;
1321
1322 // Desktop is always Unicode so convert Ansi here.
1323 if (!MsgiAnsiToUnicodeMessage(hwnd, &UcMsg, &AnsiMsg))
1324 {
1325 return FALSE;
1326 }
1327
1328 Result = DesktopWndProcW(hwnd, message, UcMsg.wParam, UcMsg.lParam);
1329
1330 MsgiAnsiToUnicodeCleanup(&UcMsg, &AnsiMsg);
1331
1332 return Result;
1333 }
LRESULT WINAPI DesktopWndProcW(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
Definition: desktop.c:33
TW_UINT32 TW_UINT16 TW_UINT16 MSG
Definition: twain.h:1829
static BOOL FASTCALL MsgiAnsiToUnicodeCleanup(LPMSG UnicodeMsg, LPMSG AnsiMsg)
Definition: message.c:709
static BOOL FASTCALL MsgiAnsiToUnicodeMessage(HWND hwnd, LPMSG UnicodeMsg, LPMSG AnsiMsg)
Definition: message.c:517
_At_(*)(_In_ PWSK_CLIENT Client, _In_opt_ PUNICODE_STRING NodeName, _In_opt_ PUNICODE_STRING ServiceName, _In_opt_ ULONG NameSpace, _In_opt_ GUID *Provider, _In_opt_ PADDRINFOEXW Hints, _Outptr_ PADDRINFOEXW *Result, _In_opt_ PEPROCESS OwningProcess, _In_opt_ PETHREAD OwningThread, _Inout_ PIRP Irp Result)(Mem)) NTSTATUS(WSKAPI *PFN_WSK_GET_ADDRESS_INFO
Definition: wsk.h:409

Referenced by RegisterClientPFN().

◆ DesktopWndProcW()

LRESULT WINAPI DesktopWndProcW ( HWND  hwnd,
UINT  message,
WPARAM  wParam,
LPARAM  lParam 
)

Definition at line 33 of file desktop.c.

37{
38 TRACE("Desktop W Class Atom! hWnd 0x%x, Msg %d\n", Wnd, Msg);
39
40 switch(Msg)
41 {
42 case WM_ERASEBKGND:
43 case WM_NCCREATE:
44 case WM_CREATE:
45 case WM_CLOSE:
46 case WM_DISPLAYCHANGE:
47 case WM_PAINT:
49 {
50 LRESULT lResult;
52 TRACE("Desktop lResult %d\n", lResult);
53 return lResult;
54 }
55
57 if (Wnd == (HWND)wParam) break;
59 {
60 HDC hdc = GetWindowDC( Wnd );
62 ReleaseDC( Wnd, hdc );
63 break;
64 }
65
66 case WM_SETCURSOR:
68
69 default:
70 return DefWindowProcW(Wnd, Msg, wParam, lParam);
71 }
72 return 0;
73}
struct @1907 Msg[]
BOOL NTAPI NtUserMessageCall(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam, ULONG_PTR ResultInfo, DWORD dwType, BOOL Ansi)
Definition: message.c:2529
#define FNID_DESKTOP
Definition: ntuser.h:869
int WINAPI ReleaseDC(_In_opt_ HWND, _In_ HDC)
#define WM_QUERYNEWPALETTE
Definition: winuser.h:1906
#define WM_CLOSE
Definition: winuser.h:1649
HDC WINAPI GetWindowDC(_In_opt_ HWND)
#define WM_PALETTECHANGED
Definition: winuser.h:1905
#define IDC_ARROW
Definition: winuser.h:695
BOOL WINAPI PaintDesktop(_In_ HDC)
HCURSOR WINAPI SetCursor(_In_opt_ HCURSOR)
HCURSOR WINAPI LoadCursorW(_In_opt_ HINSTANCE, _In_ LPCWSTR)
Definition: cursoricon.c:2474
#define WM_SETCURSOR
Definition: winuser.h:1664
const uint16_t * LPCWSTR
Definition: typedefs.h:57
uint32_t ULONG_PTR
Definition: typedefs.h:65

Referenced by DesktopWndProcA(), and RegisterClientPFN().

◆ EditWndProc_common()

LRESULT WINAPI EditWndProc_common ( HWND  hwnd,
UINT  msg,
WPARAM  wParam,
LPARAM  lParam,
BOOL  unicode 
)

Definition at line 4820 of file edit.c.

4822{
4824 LRESULT result = 0;
4825#ifndef __REACTOS__ /* WM_IME_SETCONTEXT */
4826 POINT pt;
4827#endif
4828
4829 TRACE("hwnd=%p msg=%x (%s) wparam=%Ix lparam=%Ix\n", hwnd, msg, SPY_GetMsgName(msg, hwnd), wParam, lParam);
4830
4832
4833 if (!es && msg != WM_NCCREATE)
4834 return DefWindowProcT(hwnd, msg, wParam, lParam, unicode);
4835
4836 if (es && (msg != WM_NCDESTROY)) EDIT_LockBuffer(es);
4837
4838 switch (msg) {
4839 case EM_GETSEL:
4841 break;
4842
4843 case EM_SETSEL:
4846 result = 1;
4847 break;
4848
4849 case EM_GETRECT:
4850 if (lParam)
4851 CopyRect((LPRECT)lParam, &es->format_rect);
4852 break;
4853
4854 case EM_SETRECT:
4855 if ((es->style & ES_MULTILINE) && lParam) {
4858 }
4859 break;
4860
4861 case EM_SETRECTNP:
4862 if ((es->style & ES_MULTILINE) && lParam)
4864 break;
4865
4866 case EM_SCROLL:
4868 break;
4869
4870 case EM_LINESCROLL:
4872 break;
4873
4874 case EM_SCROLLCARET:
4876 result = 1;
4877 break;
4878
4879 case EM_GETMODIFY:
4880 result = ((es->flags & EF_MODIFIED) != 0);
4881 break;
4882
4883 case EM_SETMODIFY:
4884 if (wParam)
4885 es->flags |= EF_MODIFIED;
4886 else
4887 es->flags &= ~(EF_MODIFIED | EF_UPDATE); /* reset pending updates */
4888 break;
4889
4890 case EM_GETLINECOUNT:
4891 result = (es->style & ES_MULTILINE) ? es->line_count : 1;
4892 break;
4893
4894 case EM_LINEINDEX:
4896 break;
4897
4898 case EM_SETHANDLE:
4900 break;
4901
4902 case EM_GETHANDLE:
4904 break;
4905
4906 case EM_GETTHUMB:
4908 break;
4909
4910 /* these messages missing from specs */
4911 case 0x00bf:
4912 case 0x00c0:
4913 case 0x00c3:
4914 case 0x00ca:
4915 FIXME("undocumented message 0x%x, please report\n", msg);
4917 break;
4918
4919 case EM_LINELENGTH:
4921 break;
4922
4923 case EM_REPLACESEL:
4924 {
4925 LPWSTR textW;
4926
4927 if(unicode)
4928 textW = (LPWSTR)lParam;
4929 else
4930 {
4932 INT countW = MultiByteToWideChar(CP_ACP, 0, textA, -1, NULL, 0);
4933 if (!(textW = HeapAlloc(GetProcessHeap(), 0, countW * sizeof(WCHAR)))) break;
4934 MultiByteToWideChar(CP_ACP, 0, textA, -1, textW, countW);
4935 }
4936
4938 result = 1;
4939
4940 if(!unicode)
4942 break;
4943 }
4944
4945 case EM_GETLINE:
4947 break;
4948
4949 case EM_SETLIMITTEXT:
4951 break;
4952
4953 case EM_CANUNDO:
4955 break;
4956
4957 case EM_UNDO:
4958 case WM_UNDO:
4960 break;
4961
4962 case EM_FMTLINES:
4964 break;
4965
4966 case EM_LINEFROMCHAR:
4968 break;
4969
4970 case EM_SETTABSTOPS:
4972 break;
4973
4974 case EM_SETPASSWORDCHAR:
4975 {
4976 WCHAR charW = 0;
4977
4978 if(unicode)
4979 charW = (WCHAR)wParam;
4980 else
4981 {
4982 CHAR charA = wParam;
4983 MultiByteToWideChar(CP_ACP, 0, &charA, 1, &charW, 1);
4984 }
4985
4987 break;
4988 }
4989
4990 case EM_EMPTYUNDOBUFFER:
4992 break;
4993
4995 result = (es->style & ES_MULTILINE) ? es->y_offset : es->x_offset;
4996 break;
4997
4998 case EM_SETREADONLY:
4999 {
5000 DWORD old_style = es->style;
5001
5002 if (wParam) {
5005 es->style |= ES_READONLY;
5006 } else {
5009 es->style &= ~ES_READONLY;
5010 }
5011
5012 if (old_style ^ es->style)
5013 NtUserInvalidateRect(es->hwndSelf, NULL, TRUE);
5014
5015 result = 1;
5016 break;
5017 }
5018
5021 result = 1;
5022 break;
5023
5025 result = (LRESULT)es->word_break_proc;
5026 break;
5027
5028 case EM_GETPASSWORDCHAR:
5029 {
5030 if(unicode)
5031 result = es->password_char;
5032 else
5033 {
5034 WCHAR charW = es->password_char;
5035 CHAR charA = 0;
5036 WideCharToMultiByte(CP_ACP, 0, &charW, 1, &charA, 1, NULL, NULL);
5037 result = charA;
5038 }
5039 break;
5040 }
5041
5042 case EM_SETMARGINS:
5044 break;
5045
5046 case EM_GETMARGINS:
5047 result = MAKELONG(es->left_margin, es->right_margin);
5048 break;
5049
5050 case EM_GETLIMITTEXT:
5051 result = es->buffer_limit;
5052 break;
5053
5054 case EM_POSFROMCHAR:
5055 if ((INT)wParam >= get_text_length(es)) result = -1;
5057 break;
5058
5059 case EM_CHARFROMPOS:
5060 result = EDIT_EM_CharFromPos(es, (short)LOWORD(lParam), (short)HIWORD(lParam));
5061 break;
5062
5063 case EM_SETIMESTATUS:
5064 if (wParam == EMSIS_COMPOSITIONSTRING)
5065 es->ime_status = lParam & 0xFFFF;
5066
5067 result = 1;
5068 break;
5069
5070 case EM_GETIMESTATUS:
5071 result = wParam == EMSIS_COMPOSITIONSTRING ? es->ime_status : 1;
5072 break;
5073
5074 /* End of the EM_ messages which were in numerical order; what order
5075 * are these in? vaguely alphabetical?
5076 */
5077
5078 case WM_NCCREATE:
5080 break;
5081
5082 case WM_NCDESTROY:
5084#ifdef __REACTOS__
5086#endif
5087 es = NULL;
5088 break;
5089
5090 case WM_GETDLGCODE:
5092
5093 if (es->style & ES_MULTILINE)
5095
5096 if (lParam)
5097 {
5098 es->flags|=EF_DIALOGMODE;
5099
5100 if (((LPMSG)lParam)->message == WM_KEYDOWN)
5101 {
5102 int vk = (int)((LPMSG)lParam)->wParam;
5103
5104 if (es->hwndListBox)
5105 {
5106 if (vk == VK_RETURN || vk == VK_ESCAPE)
5109 }
5110 }
5111 }
5112 break;
5113
5114 case WM_CHAR:
5115 {
5116 WCHAR charW;
5117
5118 if(unicode)
5119 charW = wParam;
5120 else
5121 {
5122 BYTE low = wParam;
5124 if (es->lead_byte)
5125 {
5126 char ch[2];
5127 ch[0] = es->lead_byte;
5128 ch[1] = low;
5129 MultiByteToWideChar(cp, 0, ch, 2, &charW, 1);
5130 }
5131 else if (IsDBCSLeadByteEx(cp, low))
5132 {
5133 es->lead_byte = low;
5134 result = 1;
5135 break;
5136 }
5137 else
5138 MultiByteToWideChar(cp, 0, (char *)&low, 1, &charW, 1);
5139 es->lead_byte = 0;
5140 }
5141
5142 if (es->hwndListBox)
5143 {
5144 if (charW == VK_RETURN || charW == VK_ESCAPE)
5145 {
5148 break;
5149 }
5150 }
5151 result = EDIT_WM_Char(es, charW);
5152 break;
5153 }
5154
5155 case WM_UNICHAR:
5156 if (unicode)
5157 {
5158 if (wParam == UNICODE_NOCHAR) return TRUE;
5159 if (wParam <= 0x000fffff)
5160 {
5161 if(wParam > 0xffff) /* convert to surrogates */
5162 {
5163 wParam -= 0x10000;
5164 EDIT_WM_Char(es, (wParam >> 10) + 0xd800);
5165 EDIT_WM_Char(es, (wParam & 0x03ff) + 0xdc00);
5166 }
5167 else EDIT_WM_Char(es, wParam);
5168 }
5169 return 0;
5170 }
5171 break;
5172
5173 case WM_CLEAR:
5175 break;
5176
5177 case WM_CONTEXTMENU:
5178 EDIT_WM_ContextMenu(es, (short)LOWORD(lParam), (short)HIWORD(lParam));
5179 break;
5180
5181 case WM_COPY:
5183 break;
5184
5185 case WM_CREATE:
5186 if(unicode)
5188 else
5189 {
5190 LPCSTR nameA = ((LPCREATESTRUCTA)lParam)->lpszName;
5191 LPWSTR nameW = NULL;
5192 if(nameA)
5193 {
5194 INT countW = MultiByteToWideChar(CP_ACP, 0, nameA, -1, NULL, 0);
5195 if((nameW = HeapAlloc(GetProcessHeap(), 0, countW * sizeof(WCHAR))))
5196 MultiByteToWideChar(CP_ACP, 0, nameA, -1, nameW, countW);
5197 }
5200 }
5201 break;
5202
5203 case WM_CUT:
5204 EDIT_WM_Cut(es);
5205 break;
5206
5207 case WM_ENABLE:
5208 es->bEnableState = (BOOL) wParam;
5210 break;
5211
5212 case WM_ERASEBKGND:
5213 /* we do the proper erase in EDIT_WM_Paint */
5214 result = 1;
5215 break;
5216
5217 case WM_GETFONT:
5218 result = (LRESULT)es->font;
5219 break;
5220
5221 case WM_GETTEXT:
5223 break;
5224
5225 case WM_GETTEXTLENGTH:
5226 if (unicode) result = get_text_length(es);
5228 NULL, 0, NULL, NULL );
5229 break;
5230
5231 case WM_HSCROLL:
5233 break;
5234
5235 case WM_KEYDOWN:
5237 break;
5238
5239 case WM_KILLFOCUS:
5241 break;
5242
5243 case WM_LBUTTONDBLCLK:
5245 break;
5246
5247 case WM_LBUTTONDOWN:
5249 break;
5250
5251 case WM_LBUTTONUP:
5253 break;
5254
5255 case WM_MBUTTONDOWN:
5257 break;
5258
5259 case WM_MOUSEMOVE:
5260 result = EDIT_WM_MouseMove(es, (short)LOWORD(lParam), (short)HIWORD(lParam));
5261 break;
5262
5263 case WM_PRINTCLIENT:
5264 case WM_PAINT:
5266 break;
5267
5268 case WM_PASTE:
5270 break;
5271
5272 case WM_SETFOCUS:
5274 break;
5275
5276 case WM_SETFONT:
5277 EDIT_WM_SetFont(es, (HFONT)wParam, LOWORD(lParam) != 0);
5278 break;
5279
5280 case WM_SETREDRAW:
5281 /* FIXME: actually set an internal flag and behave accordingly */
5282 break;
5283
5284 case WM_SETTEXT:
5285 EDIT_WM_SetText(es, (LPCWSTR)lParam, unicode);
5286 result = TRUE;
5287 break;
5288
5289 case WM_SIZE:
5291 break;
5292
5293 case WM_STYLECHANGED:
5295 break;
5296
5297 case WM_STYLECHANGING:
5298 result = 0; /* See EDIT_WM_StyleChanged */
5299 break;
5300
5301 case WM_SYSKEYDOWN:
5303 break;
5304
5305 case WM_VSCROLL:
5306#ifdef __REACTOS__
5307 {
5308 SCROLLINFO si;
5309
5310 si.cbSize = sizeof(si);
5311 si.fMask = SIF_TRACKPOS;
5312 if (!GetScrollInfo(hwnd, SB_VERT, &si))
5313 {
5314 result = 1;
5315 break;
5316 }
5317 result = EDIT_WM_VScroll(es, LOWORD(wParam), si.nTrackPos);
5318 }
5319#else
5321 break;
5322#endif
5323
5324 case WM_CAPTURECHANGED:
5325 es->bCaptureState = FALSE;
5326 break;
5327
5328 case WM_MOUSEWHEEL:
5329 {
5330 int wheelDelta;
5331 INT pulScrollLines = 3;
5332 SystemParametersInfoW(SPI_GETWHEELSCROLLLINES,0, &pulScrollLines, 0);
5333
5334 if (wParam & (MK_SHIFT | MK_CONTROL)) {
5336 break;
5337 }
5338 wheelDelta = GET_WHEEL_DELTA_WPARAM(wParam);
5339 /* if scrolling changes direction, ignore left overs */
5340 if ((wheelDelta < 0 && es->wheelDeltaRemainder < 0) ||
5341 (wheelDelta > 0 && es->wheelDeltaRemainder > 0))
5342 es->wheelDeltaRemainder += wheelDelta;
5343 else
5344 es->wheelDeltaRemainder = wheelDelta;
5345 if (es->wheelDeltaRemainder && pulScrollLines)
5346 {
5347 int cLineScroll;
5348 pulScrollLines = min(es->line_count, pulScrollLines);
5349 cLineScroll = pulScrollLines * es->wheelDeltaRemainder / WHEEL_DELTA;
5350 es->wheelDeltaRemainder -= WHEEL_DELTA * cLineScroll / pulScrollLines;
5351 result = EDIT_EM_LineScroll(es, 0, -cLineScroll);
5352 }
5353 }
5354 break;
5355
5356
5357 /* IME messages to make the edit control IME aware */
5358 case WM_IME_SETCONTEXT:
5359#ifdef __REACTOS__
5360 {
5361 HKL hKL = GetKeyboardLayout(0);
5362
5363 /* Korean doesn't want composition window */
5364 if (PRIMARYLANGID(LOWORD(hKL)) == LANG_KOREAN)
5365 lParam &= ~ISC_SHOWUICOMPOSITIONWINDOW;
5366
5367 if (wParam)
5368 {
5369 HIMC hIMC = ImmGetContext(hwnd);
5371 if (pIC)
5372 {
5373 pIC->dwUIFlags &= ~0x40000;
5374 ImmUnlockIMC(hIMC);
5375 }
5376 if (GetWin32ClientInfo()->CI_flags & CI_WOW)
5378 ImmReleaseContext(hwnd, hIMC);
5379 }
5380
5382 }
5383#else
5387#endif
5388 break;
5389
5390#ifdef __REACTOS__
5391 case WM_IME_STARTCOMPOSITION:
5392 {
5393 HKL hKL = GetKeyboardLayout(0);
5394
5395 /* Korean doesn't want composition window */
5396 if (PRIMARYLANGID(LOWORD(hKL)) == LANG_KOREAN)
5397 return TRUE;
5398
5399 result = DefWindowProcT(hwnd, msg, wParam, lParam, unicode);
5400 }
5401 break;
5402#endif
5403
5404 case WM_IME_COMPOSITION:
5406 if ((lParam & GCS_RESULTSTR) && (es->ime_status & EIMES_GETCOMPSTRATONCE))
5408 return DefWindowProcW(hwnd, msg, wParam, lParam);
5409
5410 case WM_IME_SELECT:
5411#ifdef __REACTOS__
5412 result = DefWindowProcT(hwnd, msg, wParam, lParam, unicode);
5413#endif
5414 break;
5415
5416 case WM_IME_CONTROL:
5417#ifdef __REACTOS__
5418 result = DefWindowProcT(hwnd, msg, wParam, lParam, unicode);
5419#endif
5420 break;
5421
5422 case WM_IME_REQUEST:
5423 switch (wParam)
5424 {
5425 case IMR_QUERYCHARPOSITION:
5426 {
5427 LRESULT pos;
5428 IMECHARPOSITION *chpos = (IMECHARPOSITION *)lParam;
5429
5430 pos = EDIT_EM_PosFromChar(es, es->selection_start + chpos->dwCharPos, FALSE);
5431 chpos->pt.x = LOWORD(pos);
5432 chpos->pt.y = HIWORD(pos);
5433 chpos->cLineHeight = es->line_height;
5434 chpos->rcDocument = es->format_rect;
5435 MapWindowPoints(hwnd, 0, &chpos->pt, 1);
5436 MapWindowPoints(hwnd, 0, (POINT*)&chpos->rcDocument, 2);
5437 result = 1;
5438 break;
5439 }
5440 }
5441 break;
5442
5443 default:
5444 result = DefWindowProcT(hwnd, msg, wParam, lParam, unicode);
5445 break;
5446 }
5447
5448#ifdef __REACTOS__
5449 /* ReactOS: check GetWindowLong in case es has been destroyed during processing */
5450 if (IsWindow(hwnd) && es && msg != EM_GETHANDLE && GetWindowLongPtrW(hwnd, 0))
5451#else
5452 if (IsWindow(hwnd) && es && msg != EM_GETHANDLE)
5453#endif
5455
5456 TRACE("hwnd=%p msg=%x (%s) -- 0x%08Ix\n", hwnd, msg, SPY_GetMsgName(msg, hwnd), result);
5457
5458 return result;
#define msg(x)
Definition: auth_time.c:54
static const WCHAR nameW[]
Definition: main.c:49
#define FIXME(fmt,...)
Definition: precomp.h:53
DWORD HIMC
Definition: dimm.idl:75
static void EDIT_WM_Paint(EDITSTATE *es, HDC hdc)
Definition: edit.c:3628
#define EF_MODIFIED
Definition: edit.c:65
static LRESULT EDIT_WM_LButtonDblClk(EDITSTATE *es)
Definition: edit.c:3513
static LRESULT EDIT_WM_Char(EDITSTATE *es, WCHAR c)
Definition: edit.c:3085
static void EDIT_WM_SetFont(EDITSTATE *es, HFONT font, BOOL redraw)
Definition: edit.c:3837
static void EDIT_EM_ReplaceSel(EDITSTATE *es, BOOL can_undo, const WCHAR *lpsz_replace, UINT strl, BOOL send_update, BOOL honor_limit)
Definition: edit.c:2490
static LRESULT EDIT_WM_MButtonDown(EDITSTATE *es)
Definition: edit.c:3584
static void EDIT_EM_ScrollCaret(EDITSTATE *es)
Definition: edit.c:1778
static void EDIT_SetRectNP(EDITSTATE *es, const RECT *rc)
Definition: edit.c:2317
static BOOL EDIT_EM_FmtLines(EDITSTATE *es, BOOL add_eol)
Definition: edit.c:2389
static void EDIT_WM_Copy(EDITSTATE *es)
Definition: edit.c:3029
static LRESULT EDIT_EM_CharFromPos(EDITSTATE *es, INT x, INT y)
Definition: edit.c:2361
static LRESULT EDIT_WM_HScroll(EDITSTATE *es, INT action, INT pos)
Definition: edit.c:4067
static void EDIT_WM_Cut(EDITSTATE *es)
Definition: edit.c:3073
static void EDIT_EM_SetPasswordChar(EDITSTATE *es, WCHAR c)
Definition: edit.c:2871
static INT EDIT_WM_GetText(const EDITSTATE *es, INT count, LPWSTR dst)
Definition: edit.c:3272
static void EDIT_WM_ContextMenu(EDITSTATE *es, INT x, INT y)
Definition: edit.c:3216
static LRESULT EDIT_WM_MouseMove(EDITSTATE *es, INT x, INT y)
Definition: edit.c:3596
static void EDIT_LockBuffer(EDITSTATE *es)
Definition: edit.c:1211
static void EDIT_UnlockBuffer(EDITSTATE *es, BOOL force)
Definition: edit.c:1230
static LRESULT EDIT_WM_NCDestroy(EDITSTATE *es)
Definition: edit.c:4700
static LRESULT EDIT_WM_LButtonDown(EDITSTATE *es, DWORD keys, INT x, INT y)
Definition: edit.c:3542
static INT EDIT_EM_LineIndex(const EDITSTATE *es, INT line)
Definition: edit.c:942
static HLOCAL EDIT_EM_GetHandle(EDITSTATE *es)
Definition: edit.c:2411
static INT EDIT_EM_GetLine(EDITSTATE *es, INT line, LPWSTR dst)
Definition: edit.c:2431
#define EF_UPDATE
Definition: edit.c:67
static BOOL EDIT_EM_Undo(EDITSTATE *es)
Definition: edit.c:2941
static UINT get_text_length(EDITSTATE *es)
Definition: edit.c:216
static void EDIT_WM_Paste(EDITSTATE *es)
Definition: edit.c:2993
static LRESULT EDIT_WM_KillFocus(HTHEME theme, EDITSTATE *es)
Definition: edit.c:3485
static LRESULT EDIT_WM_SysKeyDown(EDITSTATE *es, INT key, DWORD key_data)
Definition: edit.c:4030
static LRESULT EDIT_EM_GetThumb(EDITSTATE *es)
Definition: edit.c:4319
static LRESULT EDIT_WM_NCCreate(HWND hwnd, LPCREATESTRUCTW lpcs)
Definition: edit.c:4532
static LRESULT EDIT_WM_LButtonUp(EDITSTATE *es)
Definition: edit.c:3568
static void EDIT_WM_Clear(EDITSTATE *es)
Definition: edit.c:3058
static BOOL EDIT_EM_CanUndo(const EDITSTATE *es)
Definition: edit.c:181
static void EDIT_EM_EmptyUndoBuffer(EDITSTATE *es)
Definition: edit.c:192
static void EDIT_EM_SetMargins(EDITSTATE *es, INT action, WORD left, WORD right, BOOL repaint)
Definition: edit.c:2799
static void EDIT_WM_SetFocus(HTHEME theme, EDITSTATE *es)
Definition: edit.c:3779
static void EDIT_EM_SetHandle(EDITSTATE *es, HLOCAL hloc)
Definition: edit.c:2707
static LRESULT EDIT_WM_Create(EDITSTATE *es, const WCHAR *name)
Definition: edit.c:4645
static LRESULT EDIT_WM_KeyDown(EDITSTATE *es, INT key)
Definition: edit.c:3348
static void EDIT_EM_SetLimitText(EDITSTATE *es, UINT limit)
Definition: edit.c:2749
static LRESULT EDIT_EM_PosFromChar(EDITSTATE *es, INT index, BOOL after_wrap)
Definition: edit.c:1013
#define EF_DIALOGMODE
Definition: edit.c:72
static LRESULT EDIT_EM_Scroll(EDITSTATE *es, INT action)
Definition: edit.c:1672
static LRESULT EDIT_EM_GetSel(const EDITSTATE *es, PUINT start, PUINT end)
Definition: edit.c:2469
static void EDIT_EM_SetWordBreakProc(EDITSTATE *es, EDITWORDBREAKPROCW wbp)
Definition: edit.c:2922
static LRESULT EDIT_WM_StyleChanged(EDITSTATE *es, WPARAM which, const STYLESTRUCT *style)
Definition: edit.c:3985
static INT EDIT_EM_LineFromChar(EDITSTATE *es, INT index)
Definition: edit.c:913
static LRESULT EDIT_WM_VScroll(EDITSTATE *es, INT action, INT pos)
Definition: edit.c:4199
static void EDIT_WM_SetText(EDITSTATE *es, LPCWSTR text)
Definition: edit.c:3910
static void EDIT_UpdateText(EDITSTATE *es, const RECT *rc, BOOL bErase)
Definition: edit.c:1359
static BOOL EDIT_EM_SetTabStops(EDITSTATE *es, INT count, const INT *tabs)
Definition: edit.c:2900
static BOOL EDIT_EM_SetSel(EDITSTATE *es, UINT start, UINT end, BOOL after_wrap)
Definition: edit.c:1489
static void EDIT_ImeComposition(HWND hwnd, LPARAM CompFlag, EDITSTATE *es)
Definition: edit.c:4486
static BOOL EDIT_EM_LineScroll(EDITSTATE *es, INT dx, INT dy)
Definition: edit.c:1657
static void EDIT_WM_Size(EDITSTATE *es, UINT action)
Definition: edit.c:3952
static INT EDIT_EM_LineLength(EDITSTATE *es, INT index)
Definition: edit.c:977
#define GetProcessHeap()
Definition: compat.h:736
#define CP_ACP
Definition: compat.h:109
#define HeapAlloc
Definition: compat.h:733
#define HeapFree(x, y, z)
Definition: compat.h:735
#define WideCharToMultiByte
Definition: compat.h:111
#define MultiByteToWideChar
Definition: compat.h:110
#define lstrlenW
Definition: compat.h:750
BOOL WINAPI IsDBCSLeadByteEx(UINT codepage, BYTE testchar)
Definition: locale.c:2106
unsigned char ch[4][2]
Definition: console.c:118
unsigned long DWORD
Definition: ntddk_ex.h:95
#define es
Definition: i386-dis.c:440
struct INPUTCONTEXTDX * LPINPUTCONTEXTDX
#define CPS_CANCEL
Definition: imm.h:181
#define GCS_RESULTSTR
Definition: imm.h:234
HIMC WINAPI ImmGetContext(_In_ HWND hWnd)
Definition: imm.c:1066
BOOL WINAPI ImmReleaseContext(_In_ HWND hWnd, _In_ HIMC hIMC)
Definition: imm.c:1110
BOOL WINAPI ImmNotifyIME(_In_ HIMC hIMC, _In_ DWORD dwAction, _In_ DWORD dwIndex, _In_ DWORD_PTR dwValue)
Definition: ime.c:459
LPINPUTCONTEXT WINAPI ImmLockIMC(_In_ HIMC hIMC)
Definition: imm.c:1080
#define NI_COMPOSITIONSTR
Definition: immdev.h:363
BOOL WINAPI ImmUnlockIMC(_In_ HIMC hIMC)
Definition: imm.c:1090
BOOL NTAPI NtUserGetCaretPos(LPPOINT lpPoint)
Definition: caret.c:394
#define GetWin32ClientInfo()
Definition: ntuser.h:356
#define CI_WOW
Definition: ntuser.h:306
if(dx< 0)
Definition: linetemp.h:194
POINT cp
Definition: magnifier.c:59
int * LPINT
Definition: minwindef.h:151
static const char textA[]
Definition: registrar.c:40
static const WCHAR textW[]
Definition: itemdlg.c:1621
static SYSTEM_INFO si
Definition: virtual.c:39
static DWORD get_input_codepage(void)
Definition: msg.c:16553
#define min(a, b)
Definition: monoChain.cc:55
UINT_PTR HKL
Definition: msctf.idl:125
unsigned int * PUINT
Definition: ndis.h:50
#define BOOL
Definition: nt_native.h:43
#define LRESULT
Definition: ole.h:14
#define ES_READONLY
Definition: pedump.c:675
short WCHAR
Definition: pedump.c:58
char CHAR
Definition: pedump.c:57
#define ES_MULTILINE
Definition: pedump.c:667
#define INT
Definition: polytest.cpp:20
#define EM_SETREADONLY
Definition: winuser.h:2044
BOOL WINAPI CopyRect(_Out_ LPRECT, _In_ LPCRECT)
#define EM_GETIMESTATUS
Definition: winuser.h:2016
#define EM_GETRECT
Definition: winuser.h:2025
HKL WINAPI GetKeyboardLayout(_In_ DWORD)
#define WM_IME_REQUEST
Definition: winuser.h:1864
#define GetWindowLongPtrW
Definition: winuser.h:4983
#define EM_LINEFROMCHAR
Definition: winuser.h:2030
#define WM_HSCROLL
Definition: winuser.h:1771
#define EM_GETWORDBREAKPROC
Definition: winuser.h:2028
#define EM_FMTLINES
Definition: winuser.h:2015
#define EM_GETPASSWORDCHAR
Definition: winuser.h:2024
#define WM_VSCROLL
Definition: winuser.h:1772
#define EM_SETIMESTATUS
Definition: winuser.h:2039
#define EM_SETPASSWORDCHAR
Definition: winuser.h:2043
#define EM_GETMODIFY
Definition: winuser.h:2023
#define SB_VERT
Definition: winuser.h:553
#define EM_EMPTYUNDOBUFFER
Definition: winuser.h:2014
LONG WINAPI SetWindowLongW(_In_ HWND, _In_ int, _In_ LONG)
#define DLGC_WANTALLKEYS
Definition: winuser.h:2654
#define EM_REPLACESEL
Definition: winuser.h:2035
#define EM_SETRECT
Definition: winuser.h:2045
#define EM_LINEINDEX
Definition: winuser.h:2031
#define SIF_TRACKPOS
Definition: winuser.h:1248
int WINAPI MapWindowPoints(_In_opt_ HWND hWndFrom, _In_opt_ HWND hWndTo, _Inout_updates_(cPoints) LPPOINT lpPoints, _In_ UINT cPoints)
#define EM_LINESCROLL
Definition: winuser.h:2033
#define EM_GETFIRSTVISIBLELINE
Definition: winuser.h:2017
#define EM_GETHANDLE
Definition: winuser.h:2018
#define WM_UNDO
Definition: winuser.h:1893
#define WM_IME_SETCONTEXT
Definition: winuser.h:1857
#define EM_CANUNDO
Definition: winuser.h:2012
#define EM_LINELENGTH
Definition: winuser.h:2032
#define EM_SETHANDLE
Definition: winuser.h:2038
#define EM_GETLINE
Definition: winuser.h:2020
#define EM_SETRECTNP
Definition: winuser.h:2046
#define EM_SETLIMITTEXT
Definition: winuser.h:2040
#define EM_UNDO
Definition: winuser.h:2050
#define EM_SCROLL
Definition: winuser.h:2036
#define EM_SETWORDBREAKPROC
Definition: winuser.h:2049
BOOL WINAPI SystemParametersInfoW(_In_ UINT uiAction, _In_ UINT uiParam, _Inout_opt_ PVOID pvParam, _In_ UINT fWinIni)
#define EM_GETTHUMB
Definition: winuser.h:2027
#define EM_GETMARGINS
Definition: winuser.h:2022
#define WM_IME_CONTROL
Definition: winuser.h:1859
#define EM_SETTABSTOPS
Definition: winuser.h:2048
#define WM_IME_SELECT
Definition: winuser.h:1861
#define EM_GETLINECOUNT
Definition: winuser.h:2021
BOOL WINAPI GetScrollInfo(_In_ HWND, _In_ int, _Inout_ LPSCROLLINFO)
#define EM_SETMARGINS
Definition: winuser.h:2041
#define DLGC_HASSETSEL
Definition: winuser.h:2656
#define WM_MBUTTONDOWN
Definition: winuser.h:1810
#define EM_SETMODIFY
Definition: winuser.h:2042
#define EM_SCROLLCARET
Definition: richedit.h:81
#define WM_UNICHAR
Definition: richedit.h:67
#define EM_POSFROMCHAR
Definition: richedit.h:77
#define WM_CONTEXTMENU
Definition: richedit.h:64
#define EM_CHARFROMPOS
Definition: richedit.h:78
#define EM_GETLIMITTEXT
Definition: richedit.h:74
#define PRIMARYLANGID(l)
Definition: nls.h:16
#define LANG_KOREAN
Definition: nls.h:84
Definition: edit.c:96
#define WHEEL_DELTA
Definition: treelist.c:99
const char * LPCSTR
Definition: typedefs.h:52
#define MAKELONG(a, b)
Definition: typedefs.h:249
#define NTUSER_WNDPROC_EDIT
Definition: user_x.h:140
static void EDIT_UpdateImmCompositionWindow(EDITSTATE *es, UINT x, UINT y)
Definition: edit.c:1910
static EDITSTATE * get_control_state(HWND hwnd)
Definition: edit.c:164
static LRESULT DefWindowProcT(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam, BOOL unicode)
Definition: edit.c:4805
static void EDIT_UpdateImmCompositionFont(EDITSTATE *es)
Definition: edit.c:4059
unsigned char BYTE
Definition: xxhash.c:193

Referenced by RegisterClientPFN().

◆ EditWndProcA()

LRESULT WINAPI EditWndProcA ( HWND  hWnd,
UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam 
)

Referenced by RegisterClientPFN().

◆ EditWndProcW()

LRESULT WINAPI EditWndProcW ( HWND  hWnd,
UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam 
)

Referenced by RegisterClientPFN().

◆ GhostWndProc_common()

LRESULT WINAPI GhostWndProc_common ( HWND  hwnd,
UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam,
BOOL  unicode 
)

Definition at line 515 of file ghost.c.

517{
518 switch (uMsg)
519 {
520 case WM_CREATE:
522 return -1;
523 break;
524
525 case WM_NCPAINT:
526 Ghost_OnNCPaint(hwnd, (HRGN)wParam, unicode);
527 return 0;
528
529 case WM_ERASEBKGND:
531 return TRUE;
532
533 case WM_PAINT:
535 break;
536
537 case WM_MOVE:
539 break;
540
541 case WM_SIZE:
542 break;
543
544 case WM_SIZING:
545 return TRUE;
546
547 case WM_SYSCOMMAND:
548 switch ((UINT)wParam)
549 {
550 case SC_MAXIMIZE:
551 case SC_SIZE:
552 // sizing-related
553 return 0;
554 }
555 if (unicode)
556 return DefWindowProcW(hwnd, uMsg, wParam, lParam);
557 else
558 return DefWindowProcA(hwnd, uMsg, wParam, lParam);
559
560 case WM_CLOSE:
562 break;
563
564 case WM_TIMER:
566 break;
567
568 case WM_NCMOUSEMOVE:
569 if (unicode)
571 else
574 return 0;
575
576 case WM_GETICON:
578
579 case WM_COMMAND:
580 if (LOWORD(wParam) == 3333)
582 break;
583
584 case WM_DESTROY:
586 break;
587
588 case WM_NCDESTROY:
590 break;
591
592 default:
593 {
594 if (unicode)
595 return DefWindowProcW(hwnd, uMsg, wParam, lParam);
596 else
597 return DefWindowProcA(hwnd, uMsg, wParam, lParam);
598 }
599 }
600 return 0;
601}
short SHORT
Definition: pedump.c:59
#define WM_SYSCOMMAND
Definition: winuser.h:1769
#define SC_SIZE
Definition: winuser.h:2620
#define WM_NCMOUSEMOVE
Definition: winuser.h:1719
#define WM_TIMER
Definition: winuser.h:1770
#define LoadCursor
Definition: winuser.h:5978
#define WM_MOVE
Definition: winuser.h:1638
#define WM_SIZING
Definition: winuser.h:1835
#define IDC_WAIT
Definition: winuser.h:697
#define SC_MAXIMIZE
Definition: winuser.h:2624
#define WM_NCPAINT
Definition: winuser.h:1715
static void Ghost_Unenchant(HWND hwnd, BOOL bDestroyTarget)
Definition: ghost.c:298
static void Ghost_OnNCDestroy(HWND hwnd)
Definition: ghost.c:402
static void Ghost_OnNCPaint(HWND hwnd, HRGN hrgn, BOOL bUnicode)
Definition: ghost.c:330
static void Ghost_OnMove(HWND hwnd, int x, int y)
Definition: ghost.c:362
static BOOL Ghost_OnCreate(HWND hwnd, CREATESTRUCTW *lpcs)
Definition: ghost.c:158
static void Ghost_OnTimer(HWND hwnd, UINT id)
Definition: ghost.c:463
static void Ghost_OnPaint(HWND hwnd)
Definition: ghost.c:350
static void Ghost_OnDestroy(HWND hwnd)
Definition: ghost.c:376
static HICON Ghost_GetIcon(HWND hwnd, INT fType)
Definition: ghost.c:487
static void Ghost_OnDraw(HWND hwnd, HDC hdc)
Definition: ghost.c:309
static void Ghost_OnClose(HWND hwnd)
Definition: ghost.c:435

Referenced by GhostWndProcA(), GhostWndProcW(), and RegisterClientPFN().

◆ GhostWndProcA()

LRESULT WINAPI GhostWndProcA ( HWND  hWnd,
UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam 
)

Definition at line 604 of file ghost.c.

605{
606 return GhostWndProc_common(hwnd, uMsg, wParam, lParam, FALSE);
607}
LRESULT WINAPI GhostWndProc_common(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL unicode)
Definition: ghost.c:515

Referenced by RegisterClientPFN().

◆ GhostWndProcW()

LRESULT WINAPI GhostWndProcW ( HWND  hWnd,
UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam 
)

Definition at line 610 of file ghost.c.

611{
612 return GhostWndProc_common(hwnd, uMsg, wParam, lParam, TRUE);
613}

Referenced by RegisterClientPFN().

◆ IconTitleWndProcA()

LRESULT WINAPI IconTitleWndProcA ( HWND  hWnd,
UINT  msg,
WPARAM  wParam,
LPARAM  lParam 
)

Definition at line 203 of file icontitle.c.

205{
206 switch (msg)
207 {
208 case WM_CREATE:
209 case WM_NCHITTEST:
210 case WM_NCMOUSEMOVE:
212 case WM_ACTIVATE:
213 case WM_CLOSE:
214 case WM_SHOWWINDOW:
215 case WM_ERASEBKGND:
217 }
218 return DefWindowProcA( hWnd, msg, wParam, lParam );
219}
static LRESULT WINAPI IconTitleWndProc_common(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
Definition: icontitle.c:157
#define WM_NCLBUTTONDBLCLK
Definition: winuser.h:1722
#define WM_ACTIVATE
Definition: winuser.h:1640
#define WM_SHOWWINDOW
Definition: winuser.h:1656

Referenced by RegisterClientPFN().

◆ IconTitleWndProcW()

LRESULT WINAPI IconTitleWndProcW ( HWND  hWnd,
UINT  msg,
WPARAM  wParam,
LPARAM  lParam 
)

Definition at line 224 of file icontitle.c.

226{
227 switch (msg)
228 {
229 case WM_CREATE:
230 case WM_NCHITTEST:
231 case WM_NCMOUSEMOVE:
233 case WM_ACTIVATE:
234 case WM_CLOSE:
235 case WM_SHOWWINDOW:
236 case WM_ERASEBKGND:
238 }
239 return DefWindowProcW( hWnd, msg, wParam, lParam );
240}

Referenced by RegisterClientPFN().

◆ ListBoxWndProc_common()

LRESULT WINAPI ListBoxWndProc_common ( HWND  hwnd,
UINT  msg,
WPARAM  wParam,
LPARAM  lParam,
BOOL  unicode 
)

Definition at line 2810 of file listbox.c.

2812{
2814 HEADCOMBO *lphc = NULL;
2815 LRESULT ret;
2817
2818 if (!descr)
2819 {
2820 if (!IsWindow(hwnd)) return 0;
2821
2822 if (msg == WM_CREATE)
2823 {
2825 if (lpcs->style & LBS_COMBOBOX) lphc = lpcs->lpCreateParams;
2826 if (!LISTBOX_Create( hwnd, lphc )) return -1;
2827 TRACE("creating hwnd %p descr %p\n", hwnd, get_control_state( hwnd ) );
2828 return 0;
2829 }
2830 /* Ignore all other messages before we get a WM_CREATE */
2831 return unicode ? DefWindowProcW( hwnd, msg, wParam, lParam ) :
2833 }
2834 if (descr->style & LBS_COMBOBOX) lphc = descr->lphc;
2835
2836 TRACE("[%p]: msg %s wp %08Ix lp %08Ix\n",
2837 descr->self, SPY_GetMsgName(msg, descr->self), wParam, lParam );
2838
2839 switch(msg)
2840 {
2841 case LB_RESETCONTENT:
2845 return 0;
2846
2847 case LB_ADDSTRING:
2848#ifdef __REACTOS__
2849 case LB_ADDSTRING_LOWER:
2850 case LB_ADDSTRING_UPPER:
2851#endif
2852 {
2853 INT ret;
2854 LPWSTR textW;
2855 if(unicode || !HAS_STRINGS(descr))
2856 textW = (LPWSTR)lParam;
2857 else
2858 {
2860 INT countW = MultiByteToWideChar(CP_ACP, 0, textA, -1, NULL, 0);
2861 if((textW = HeapAlloc(GetProcessHeap(), 0, countW * sizeof(WCHAR))))
2862 MultiByteToWideChar(CP_ACP, 0, textA, -1, textW, countW);
2863 else
2864 return LB_ERRSPACE;
2865 }
2866#ifdef __REACTOS__
2867 /* in the unicode the version, the string is really overwritten
2868 during the converting case */
2869 if (msg == LB_ADDSTRING_LOWER)
2870 strlwrW(textW);
2871 else if (msg == LB_ADDSTRING_UPPER)
2872 struprW(textW);
2873#endif
2876 if (!unicode && HAS_STRINGS(descr))
2878 return ret;
2879 }
2880
2881 case LB_INSERTSTRING:
2882#ifdef __REACTOS__
2885#endif
2886 {
2887 INT ret;
2888 LPWSTR textW;
2889 if(unicode || !HAS_STRINGS(descr))
2890 textW = (LPWSTR)lParam;
2891 else
2892 {
2894 INT countW = MultiByteToWideChar(CP_ACP, 0, textA, -1, NULL, 0);
2895 if((textW = HeapAlloc(GetProcessHeap(), 0, countW * sizeof(WCHAR))))
2896 MultiByteToWideChar(CP_ACP, 0, textA, -1, textW, countW);
2897 else
2898 return LB_ERRSPACE;
2899 }
2900#ifdef __REACTOS__
2901 /* in the unicode the version, the string is really overwritten
2902 during the converting case */
2904 strlwrW(textW);
2905 else if (msg == LB_INSERTSTRING_UPPER)
2906 struprW(textW);
2907#endif
2909 if(!unicode && HAS_STRINGS(descr))
2911 return ret;
2912 }
2913
2914 case LB_ADDFILE:
2915 {
2916 INT ret;
2917 LPWSTR textW;
2918 if(unicode || !HAS_STRINGS(descr))
2919 textW = (LPWSTR)lParam;
2920 else
2921 {
2923 INT countW = MultiByteToWideChar(CP_ACP, 0, textA, -1, NULL, 0);
2924 if((textW = HeapAlloc(GetProcessHeap(), 0, countW * sizeof(WCHAR))))
2925 MultiByteToWideChar(CP_ACP, 0, textA, -1, textW, countW);
2926 else
2927 return LB_ERRSPACE;
2928 }
2931 if(!unicode && HAS_STRINGS(descr))
2933 return ret;
2934 }
2935
2936 case LB_DELETESTRING:
2938 return descr->nb_items;
2939 else
2940 {
2942 return LB_ERR;
2943 }
2944
2945 case LB_GETITEMDATA:
2946 if (((INT)wParam < 0) || ((INT)wParam >= descr->nb_items))
2947 {
2949 return LB_ERR;
2950 }
2951 return get_item_data(descr, wParam);
2952
2953 case LB_SETITEMDATA:
2954 if (((INT)wParam < 0) || ((INT)wParam >= descr->nb_items))
2955 {
2957 return LB_ERR;
2958 }
2960 /* undocumented: returns TRUE, not LB_OKAY (0) */
2961 return TRUE;
2962
2963 case LB_GETCOUNT:
2964 return descr->nb_items;
2965
2966 case LB_GETTEXT:
2967 return LISTBOX_GetText( descr, wParam, (LPWSTR)lParam, unicode );
2968
2969 case LB_GETTEXTLEN:
2970 if ((INT)wParam >= descr->nb_items || (INT)wParam < 0)
2971 {
2973 return LB_ERR;
2974 }
2975 if (!HAS_STRINGS(descr)) return sizeof(ULONG_PTR);
2976 if (unicode) return lstrlenW(get_item_string(descr, wParam));
2979
2980 case LB_GETCURSEL:
2981 if (descr->nb_items == 0)
2982 return LB_ERR;
2983 if (!IS_MULTISELECT(descr))
2984 return descr->selected_item;
2985 if (descr->selected_item != -1)
2986 return descr->selected_item;
2987 return descr->focus_item;
2988 /* otherwise, if the user tries to move the selection with the */
2989 /* arrow keys, we will give the application something to choke on */
2990 case LB_GETTOPINDEX:
2991 return descr->top_item;
2992
2993 case LB_GETITEMHEIGHT:
2995
2996 case LB_SETITEMHEIGHT:
2998
2999 case LB_ITEMFROMPOINT:
3000 {
3001 POINT pt;
3002 RECT rect;
3003 int index;
3004 BOOL hit = TRUE;
3005
3006 /* The hiword of the return value is not a client area
3007 hittest as suggested by MSDN, but rather a hittest on
3008 the returned listbox item. */
3009
3010 if(descr->nb_items == 0)
3011 return 0x1ffff; /* win9x returns 0x10000, we copy winnt */
3012
3013 pt.x = (short)LOWORD(lParam);
3014 pt.y = (short)HIWORD(lParam);
3015
3016 SetRect(&rect, 0, 0, descr->width, descr->height);
3017
3018 if(!PtInRect(&rect, pt))
3019 {
3020 pt.x = min(pt.x, rect.right - 1);
3021 pt.x = max(pt.x, 0);
3022 pt.y = min(pt.y, rect.bottom - 1);
3023 pt.y = max(pt.y, 0);
3024 hit = FALSE;
3025 }
3026
3028
3029 if(index == -1)
3030 {
3031 index = descr->nb_items - 1;
3032 hit = FALSE;
3033 }
3034 return MAKELONG(index, hit ? 0 : 1);
3035 }
3036
3037 case LB_SETCARETINDEX:
3038 if ((!IS_MULTISELECT(descr)) && (descr->selected_item != -1)) return LB_ERR;
3040 return LB_ERR;
3041 else if (ISWIN31)
3042 return wParam;
3043 else
3044 return LB_OKAY;
3045
3046 case LB_GETCARETINDEX:
3047 return descr->focus_item;
3048
3049 case LB_SETTOPINDEX:
3050 return LISTBOX_SetTopItem( descr, wParam, TRUE );
3051
3052 case LB_SETCOLUMNWIDTH:
3054
3055 case LB_GETITEMRECT:
3057
3058 case LB_FINDSTRING:
3059 {
3060 INT ret;
3061 LPWSTR textW;
3062 if(unicode || !HAS_STRINGS(descr))
3063 textW = (LPWSTR)lParam;
3064 else
3065 {
3067 INT countW = MultiByteToWideChar(CP_ACP, 0, textA, -1, NULL, 0);
3068 if((textW = HeapAlloc(GetProcessHeap(), 0, countW * sizeof(WCHAR))))
3069 MultiByteToWideChar(CP_ACP, 0, textA, -1, textW, countW);
3070 }
3072 if(!unicode && HAS_STRINGS(descr))
3074 return ret;
3075 }
3076
3077 case LB_FINDSTRINGEXACT:
3078 {
3079 INT ret;
3080 LPWSTR textW;
3081 if(unicode || !HAS_STRINGS(descr))
3082 textW = (LPWSTR)lParam;
3083 else
3084 {
3086 INT countW = MultiByteToWideChar(CP_ACP, 0, textA, -1, NULL, 0);
3087 if((textW = HeapAlloc(GetProcessHeap(), 0, countW * sizeof(WCHAR))))
3088 MultiByteToWideChar(CP_ACP, 0, textA, -1, textW, countW);
3089 }
3091 if(!unicode && HAS_STRINGS(descr))
3093 return ret;
3094 }
3095
3096 case LB_SELECTSTRING:
3097 {
3098 INT index;
3099 LPWSTR textW;
3100
3101 if(HAS_STRINGS(descr))
3102 TRACE("LB_SELECTSTRING: %s\n", unicode ? debugstr_w((LPWSTR)lParam) :
3104 if(unicode || !HAS_STRINGS(descr))
3105 textW = (LPWSTR)lParam;
3106 else
3107 {
3109 INT countW = MultiByteToWideChar(CP_ACP, 0, textA, -1, NULL, 0);
3110 if((textW = HeapAlloc(GetProcessHeap(), 0, countW * sizeof(WCHAR))))
3111 MultiByteToWideChar(CP_ACP, 0, textA, -1, textW, countW);
3112 }
3114 if(!unicode && HAS_STRINGS(descr))
3116 if (index != LB_ERR)
3117 {
3120 }
3121 return index;
3122 }
3123
3124 case LB_GETSEL:
3125 if (((INT)wParam < 0) || ((INT)wParam >= descr->nb_items))
3126 return LB_ERR;
3127 return is_item_selected(descr, wParam);
3128
3129 case LB_SETSEL:
3131 if (ret != LB_ERR && wParam)
3132 {
3133 descr->anchor_item = lParam;
3134 if (lParam != -1)
3136 }
3137 return ret;
3138
3139 case LB_SETCURSEL:
3140 if (IS_MULTISELECT(descr)) return LB_ERR;
3143 if (ret != LB_ERR)
3144 {
3145 ret = descr->selected_item;
3146 NtUserNotifyWinEvent( EVENT_OBJECT_FOCUS, descr->self, OBJID_CLIENT, ret + 1 );
3147 NtUserNotifyWinEvent( EVENT_OBJECT_SELECTION, descr->self, OBJID_CLIENT, ret + 1 );
3148 }
3149 return ret;
3150
3151 case LB_GETSELCOUNT:
3152 return LISTBOX_GetSelCount( descr );
3153
3154 case LB_GETSELITEMS:
3156
3157 case LB_SELITEMRANGE:
3158 if (LOWORD(lParam) <= HIWORD(lParam))
3160 HIWORD(lParam), wParam );
3161 else
3163 LOWORD(lParam), wParam );
3164
3165 case LB_SELITEMRANGEEX:
3166 if ((INT)lParam >= (INT)wParam)
3168 else
3170
3172 return descr->horz_extent;
3173
3176
3177 case LB_GETANCHORINDEX:
3178 return descr->anchor_item;
3179
3180 case LB_SETANCHORINDEX:
3181 if (((INT)wParam < -1) || ((INT)wParam >= descr->nb_items))
3182 {
3184 return LB_ERR;
3185 }
3186 descr->anchor_item = (INT)wParam;
3187 return LB_OKAY;
3188
3189 case LB_DIR:
3190 {
3191 INT ret;
3192 LPWSTR textW;
3193 if(unicode)
3194 textW = (LPWSTR)lParam;
3195 else
3196 {
3198 INT countW = MultiByteToWideChar(CP_ACP, 0, textA, -1, NULL, 0);
3199 if((textW = HeapAlloc(GetProcessHeap(), 0, countW * sizeof(WCHAR))))
3200 MultiByteToWideChar(CP_ACP, 0, textA, -1, textW, countW);
3201 }
3203 if(!unicode)
3205 return ret;
3206 }
3207
3208 case LB_GETLOCALE:
3209 return descr->locale;
3210
3211 case LB_SETLOCALE:
3212 {
3213 LCID ret;
3215 return LB_ERR;
3216 ret = descr->locale;
3217 descr->locale = (LCID)wParam;
3218 return ret;
3219 }
3220
3221 case LB_INITSTORAGE:
3222 return LISTBOX_InitStorage( descr, wParam );
3223
3224 case LB_SETCOUNT:
3225 return LISTBOX_SetCount( descr, (INT)wParam );
3226
3227 case LB_SETTABSTOPS:
3229
3230 case LB_CARETON:
3231 if (descr->caret_on)
3232 return LB_OKAY;
3233 descr->caret_on = TRUE;
3234 if ((descr->focus_item != -1) && (descr->in_focus))
3235 LISTBOX_RepaintItem( descr, descr->focus_item, ODA_FOCUS );
3236 return LB_OKAY;
3237
3238 case LB_CARETOFF:
3239 if (!descr->caret_on)
3240 return LB_OKAY;
3241 descr->caret_on = FALSE;
3242 if ((descr->focus_item != -1) && (descr->in_focus))
3243 LISTBOX_RepaintItem( descr, descr->focus_item, ODA_FOCUS );
3244 return LB_OKAY;
3245
3246 case LB_GETLISTBOXINFO:
3247 return descr->page_size;
3248
3249 case WM_DESTROY:
3250 return LISTBOX_Destroy( descr );
3251
3252 case WM_ENABLE:
3254 return 0;
3255
3256 case WM_SETREDRAW:
3258 return 0;
3259
3260 case WM_GETDLGCODE:
3262
3263 case WM_PRINTCLIENT:
3264 case WM_PAINT:
3265 {
3266 PAINTSTRUCT ps;
3267 HDC hdc = ( wParam ) ? ((HDC)wParam) : NtUserBeginPaint( descr->self, &ps );
3268 ret = LISTBOX_Paint( descr, hdc );
3269 if (!wParam) NtUserEndPaint( descr->self, &ps );
3270 }
3271 return ret;
3272 case WM_SIZE:
3274 return 0;
3275 case WM_GETFONT:
3276 return (LRESULT)descr->font;
3277 case WM_SETFONT:
3278 LISTBOX_SetFont( descr, (HFONT)wParam );
3279 if (lParam) NtUserInvalidateRect( descr->self, 0, TRUE );
3280 return 0;
3281 case WM_SETFOCUS:
3282 descr->in_focus = TRUE;
3283 descr->caret_on = TRUE;
3284 if (descr->focus_item != -1)
3287 NtUserNotifyWinEvent( EVENT_OBJECT_FOCUS, descr->self, OBJID_CLIENT, descr->focus_item + 1 );
3288 return 0;
3289 case WM_KILLFOCUS:
3290 LISTBOX_HandleLButtonUp( descr ); /* Release capture if we have it */
3291 descr->in_focus = FALSE;
3292 descr->wheel_remain = 0;
3293 if ((descr->focus_item != -1) && descr->caret_on)
3294 LISTBOX_RepaintItem( descr, descr->focus_item, ODA_FOCUS );
3296 return 0;
3297 case WM_HSCROLL:
3299 case WM_VSCROLL:
3301 case WM_MOUSEWHEEL:
3302 if (wParam & (MK_SHIFT | MK_CONTROL))
3303 return DefWindowProcW( descr->self, msg, wParam, lParam );
3305 case WM_LBUTTONDOWN:
3306 if (lphc)
3309 (INT16)HIWORD(lParam) );
3312 (INT16)HIWORD(lParam) );
3313 case WM_LBUTTONDBLCLK:
3314 if (lphc)
3317 (INT16)HIWORD(lParam) );
3318 if ((descr->style & LBS_NOTIFY) && descr->nb_items)
3320 return 0;
3321 case WM_MOUSEMOVE:
3322 if ( lphc && ((lphc->dwStyle & CBS_DROPDOWNLIST) != CBS_SIMPLE) )
3323 {
3324 BOOL captured = descr->captured;
3325 POINT mousePos;
3326 RECT clientRect;
3327
3328 mousePos.x = (INT16)LOWORD(lParam);
3329 mousePos.y = (INT16)HIWORD(lParam);
3330
3331 /*
3332 * If we are in a dropdown combobox, we simulate that
3333 * the mouse is captured to show the tracking of the item.
3334 */
3335 if (GetClientRect(descr->self, &clientRect) && PtInRect( &clientRect, mousePos ))
3336 descr->captured = TRUE;
3337
3338 LISTBOX_HandleMouseMove( descr, mousePos.x, mousePos.y);
3339
3340 descr->captured = captured;
3341 }
3342 else if (GetCapture() == descr->self)
3343 {
3345 (INT16)HIWORD(lParam) );
3346 }
3347 return 0;
3348 case WM_LBUTTONUP:
3349 if (lphc)
3350 {
3351 POINT mousePos;
3352 RECT clientRect;
3353
3354 /*
3355 * If the mouse button "up" is not in the listbox,
3356 * we make sure there is no selection by re-selecting the
3357 * item that was selected when the listbox was made visible.
3358 */
3359 mousePos.x = (INT16)LOWORD(lParam);
3360 mousePos.y = (INT16)HIWORD(lParam);
3361
3362 GetClientRect(descr->self, &clientRect);
3363
3364 /*
3365 * When the user clicks outside the combobox and the focus
3366 * is lost, the owning combobox will send a fake buttonup with
3367 * 0xFFFFFFF as the mouse location, we must also revert the
3368 * selection to the original selection.
3369 */
3370 if ( (lParam == (LPARAM)-1) || (!PtInRect( &clientRect, mousePos )) )
3372 }
3374 case WM_KEYDOWN:
3375 if( lphc && (lphc->dwStyle & CBS_DROPDOWNLIST) != CBS_SIMPLE )
3376 {
3377 /* for some reason Windows makes it possible to
3378 * show/hide ComboLBox by sending it WM_KEYDOWNs */
3379
3380 if( (!(lphc->wState & CBF_EUI) && wParam == VK_F4) ||
3381 ( (lphc->wState & CBF_EUI) && !(lphc->wState & CBF_DROPPED)
3382 && (wParam == VK_DOWN || wParam == VK_UP)) )
3383 {
3384 COMBO_FlipListbox( lphc, FALSE, FALSE );
3385 return 0;
3386 }
3387 }
3389 case WM_CHAR:
3390 {
3391 WCHAR charW;
3392 if(unicode)
3393 charW = (WCHAR)wParam;
3394 else
3395 {
3396 CHAR charA = (CHAR)wParam;
3397 MultiByteToWideChar(CP_ACP, 0, &charA, 1, &charW, 1);
3398 }
3399 return LISTBOX_HandleChar( descr, charW );
3400 }
3401 case WM_SYSTIMER:
3403 case WM_ERASEBKGND:
3404 if ((IS_OWNERDRAW(descr)) && !(descr->style & LBS_DISPLAYCHANGED))
3405 {
3406 RECT rect;
3407#ifdef __REACTOS__
3408 HBRUSH hbrush = GetControlColor( descr->owner, descr->self, (HDC)wParam, WM_CTLCOLORLISTBOX);
3409#else
3410 HBRUSH hbrush = (HBRUSH)SendMessageW( descr->owner, WM_CTLCOLORLISTBOX,
3411 wParam, (LPARAM)descr->self );
3412#endif
3413 TRACE("hbrush = %p\n", hbrush);
3414 if(!hbrush)
3416 if(hbrush)
3417 {
3418 GetClientRect(descr->self, &rect);
3420 }
3421 }
3422 return 1;
3423 case WM_DROPFILES:
3424 if( lphc ) return 0;
3425 return unicode ? SendMessageW( descr->owner, msg, wParam, lParam ) :
3426 SendMessageA( descr->owner, msg, wParam, lParam );
3427
3428 case WM_NCDESTROY:
3429 if( lphc && (lphc->dwStyle & CBS_DROPDOWNLIST) != CBS_SIMPLE )
3430 lphc->hWndLBox = 0;
3431#ifdef __REACTOS__
3433#endif
3434 break;
3435
3436 case WM_NCACTIVATE:
3437 if (lphc) return 0;
3438 break;
3439#ifdef __REACTOS__
3440 case WM_UPDATEUISTATE:
3441 if (unicode)
3443 else
3445
3447 {
3448 /* redraw text */
3449 if (descr->focus_item != -1)
3450 LISTBOX_DrawFocusRect( descr, descr->in_focus );
3451 }
3452 break;
3453#endif
3454 default:
3455 if ((msg >= WM_USER) && (msg < 0xc000))
3456 WARN("[%p]: unknown msg %04x wp %08Ix lp %08Ix\n",
3457 hwnd, msg, wParam, lParam );
3458 }
3459
3460 return unicode ? DefWindowProcW( hwnd, msg, wParam, lParam ) :
3462}
#define index(s, c)
Definition: various.h:29
#define CHAR(Char)
#define WM_SYSTIMER
Definition: comctl32.h:125
#define LB_INSERTSTRING_LOWER
Definition: controls.h:87
#define LB_INSERTSTRING_UPPER
Definition: controls.h:86
#define LB_ADDSTRING_LOWER
Definition: controls.h:89
#define LB_ADDSTRING_UPPER
Definition: controls.h:88
static LRESULT LISTBOX_RemoveItem(LB_DESCR *descr, INT index)
Definition: listbox.c:1796
#define SEND_NOTIFICATION(descr, code)
Definition: listbox.c:111
static LRESULT LISTBOX_InsertString(LB_DESCR *descr, INT index, LPCWSTR str)
Definition: listbox.c:1733
static void LISTBOX_DrawFocusRect(LB_DESCR *descr, BOOL on)
Definition: listbox.c:797
static LRESULT LISTBOX_HandleKeyDown(LB_DESCR *descr, DWORD key)
Definition: listbox.c:2461
static LRESULT LISTBOX_SetCaretIndex(LB_DESCR *descr, INT index, BOOL fully_visible)
Definition: listbox.c:1510
static BOOL LISTBOX_SetTabStops(LB_DESCR *descr, INT count, LPINT tabs)
Definition: listbox.c:837
static LRESULT LISTBOX_HandleLButtonUp(LB_DESCR *descr)
Definition: listbox.c:2341
static LRESULT LISTBOX_GetSelCount(const LB_DESCR *descr)
Definition: listbox.c:1075
static void LISTBOX_SetRedraw(LB_DESCR *descr, BOOL on)
Definition: listbox.c:737
static LRESULT LISTBOX_GetText(LB_DESCR *descr, INT index, LPWSTR buffer, BOOL unicode)
Definition: listbox.c:869
#define ISWIN31
Definition: listbox.c:115
static LRESULT LISTBOX_InitStorage(LB_DESCR *descr, INT nb_items)
Definition: listbox.c:824
static INT LISTBOX_FindFileStrPos(LB_DESCR *descr, LPCWSTR str)
Definition: listbox.c:971
static LRESULT LISTBOX_SetSelection(LB_DESCR *descr, INT index, BOOL on, BOOL send_notify)
Definition: listbox.c:1579
static LRESULT LISTBOX_HandleLButtonDownCombo(LB_DESCR *descr, UINT msg, DWORD keys, INT x, INT y)
Definition: listbox.c:2263
static LRESULT LISTBOX_HandleVScroll(LB_DESCR *descr, WORD scrollReq, WORD pos)
Definition: listbox.c:1990
#define IS_MULTISELECT(descr)
Definition: listbox.c:107
static void LISTBOX_ResetContent(LB_DESCR *descr)
Definition: listbox.c:1848
#define HAS_STRINGS(descr)
Definition: listbox.c:103
static LRESULT LISTBOX_HandleMouseWheel(LB_DESCR *descr, SHORT delta)
Definition: listbox.c:2120
static LRESULT LISTBOX_SetHorizontalExtent(LB_DESCR *descr, INT extent)
Definition: listbox.c:1392
static void LISTBOX_MoveCaret(LB_DESCR *descr, INT index, BOOL fully_visible)
Definition: listbox.c:1622
static LRESULT LISTBOX_GetSelItems(const LB_DESCR *descr, INT max, LPINT array)
Definition: listbox.c:1091
static BOOL is_item_selected(const LB_DESCR *descr, UINT index)
Definition: listbox.c:205
static LRESULT LISTBOX_Paint(LB_DESCR *descr, HDC hdc)
Definition: listbox.c:1105
static void LISTBOX_UpdateScroll(LB_DESCR *descr)
Definition: listbox.c:303
static LRESULT LISTBOX_SetTopItem(LB_DESCR *descr, INT index, BOOL scroll)
Definition: listbox.c:386
static INT LISTBOX_SetFont(LB_DESCR *descr, HFONT font)
Definition: listbox.c:1440
static LRESULT LISTBOX_SetColumnWidth(LB_DESCR *descr, INT column_width)
Definition: listbox.c:1418
static LRESULT LISTBOX_HandleHScroll(LB_DESCR *descr, WORD scrollReq, WORD pos)
Definition: listbox.c:2034
static ULONG_PTR get_item_data(const LB_DESCR *descr, UINT index)
Definition: listbox.c:175
static LRESULT LISTBOX_SelectItemRange(LB_DESCR *descr, INT first, INT last, BOOL on)
Definition: listbox.c:1539
static void set_item_data(LB_DESCR *descr, UINT index, ULONG_PTR data)
Definition: listbox.c:180
static void LISTBOX_RepaintItem(LB_DESCR *descr, INT index, UINT action)
Definition: listbox.c:764
static LRESULT LISTBOX_GetItemRect(const LB_DESCR *descr, INT index, RECT *rect)
Definition: listbox.c:500
static INT LISTBOX_FindString(LB_DESCR *descr, INT start, LPCWSTR str, BOOL exact)
Definition: listbox.c:1015
static BOOL LISTBOX_Destroy(LB_DESCR *descr)
Definition: listbox.c:2692
static LRESULT LISTBOX_HandleSystemTimer(LB_DESCR *descr)
Definition: listbox.c:2397
static LRESULT LISTBOX_Directory(LB_DESCR *descr, UINT attrib, LPCWSTR filespec, BOOL long_names)
Definition: listbox.c:1907
static void LISTBOX_HandleMouseMove(LB_DESCR *descr, INT x, INT y)
Definition: listbox.c:2413
static LRESULT LISTBOX_GetItemHeight(const LB_DESCR *descr, INT index)
Definition: listbox.c:1310
static INT LISTBOX_FindStringPos(LB_DESCR *descr, LPCWSTR str, BOOL exact)
Definition: listbox.c:927
#define IS_OWNERDRAW(descr)
Definition: listbox.c:100
static INT LISTBOX_GetItemFromPoint(const LB_DESCR *descr, INT x, INT y)
Definition: listbox.c:558
#define LBS_DISPLAYCHANGED
Definition: listbox.c:52
static LRESULT LISTBOX_HandleChar(LB_DESCR *descr, WCHAR charW)
Definition: listbox.c:2572
static LRESULT LISTBOX_SetItemHeight(LB_DESCR *descr, INT index, INT height, BOOL repaint)
Definition: listbox.c:1328
static void LISTBOX_UpdateSize(LB_DESCR *descr)
Definition: listbox.c:455
static WCHAR * get_item_string(const LB_DESCR *descr, UINT index)
Definition: listbox.c:185
static LRESULT LISTBOX_SetCount(LB_DESCR *descr, UINT count)
Definition: listbox.c:1868
static BOOL LISTBOX_Create(HWND hwnd, LPHEADCOMBO lphc)
Definition: listbox.c:2604
static LRESULT LISTBOX_HandleLButtonDown(LB_DESCR *descr, DWORD keys, INT x, INT y)
Definition: listbox.c:2158
#define SetLastError(x)
Definition: compat.h:752
BOOL WINAPI IsValidLocale(LCID lcid, DWORD flags)
Definition: locale.c:2925
#define ULONG_PTR
Definition: config.h:101
GLuint index
Definition: glext.h:6031
#define debugstr_a
Definition: kernel32.h:31
#define debugstr_w
Definition: kernel32.h:32
#define LBS_NOTIFY
Definition: pedump.c:678
#define LB_ERR
Definition: winuser.h:2468
#define LB_ADDFILE
Definition: winuser.h:2059
#define COLOR_WINDOW
Definition: winuser.h:929
#define CBS_DROPDOWNLIST
Definition: winuser.h:284
#define LB_SETCOUNT
Definition: winuser.h:2098
#define LB_OKAY
Definition: winuser.h:2467
#define LBN_DBLCLK
Definition: winuser.h:2107
HBRUSH WINAPI GetSysColorBrush(_In_ int)
#define WM_DROPFILES
Definition: winuser.h:1853
#define LB_GETSELCOUNT
Definition: winuser.h:2083
#define LB_GETITEMRECT
Definition: winuser.h:2072
#define LBN_SETFOCUS
Definition: winuser.h:2112
#define LB_GETANCHORINDEX
Definition: winuser.h:2065
#define LB_ERRSPACE
Definition: winuser.h:2469
#define LB_GETSEL
Definition: winuser.h:2082
#define LB_SETCOLUMNWIDTH
Definition: winuser.h:2097
#define LB_SELITEMRANGEEX
Definition: winuser.h:2094
#define LB_SELITEMRANGE
Definition: winuser.h:2093
#define LB_SETANCHORINDEX
Definition: winuser.h:2095
#define LB_SETITEMHEIGHT
Definition: winuser.h:2102
#define LB_SELECTSTRING
Definition: winuser.h:2092
#define WM_NCACTIVATE
Definition: winuser.h:1716
#define LBS_COMBOBOX
Definition: winuser.h:324
#define LB_ITEMFROMPOINT
Definition: winuser.h:2090
#define LB_GETCARETINDEX
Definition: winuser.h:2066
#define LBN_KILLFOCUS
Definition: winuser.h:2109
#define LB_SETTABSTOPS
Definition: winuser.h:2105
#define LB_SETSEL
Definition: winuser.h:2104
#define LB_GETSELITEMS
Definition: winuser.h:2084
#define LB_SETCARETINDEX
Definition: winuser.h:2096
BOOL WINAPI SetRect(_Out_ LPRECT, _In_ int, _In_ int, _In_ int, _In_ int)
DWORD LCID
Definition: nls.h:13
const char * descr
Definition: boot.c:45
INT droppedIndex
Definition: comctl32.h:160
long y
Definition: dcommon.idl:24
long x
Definition: dcommon.idl:24
LPVOID lpCreateParams
Definition: winuser.h:3063
#define max(a, b)
Definition: svc.c:63
#define LB_CARETON
Definition: undocuser.h:53
#define LB_CARETOFF
Definition: undocuser.h:54
#define NTUSER_WNDPROC_LISTBOX
Definition: user_x.h:138
static LB_DESCR * get_control_state(HWND hwnd)
Definition: listbox.c:162
static BOOL LISTBOX_update_uistate(LB_DESCR *descr)
Definition: listbox.c:2689
#define struprW(s)
Definition: unicode.h:57
#define strlwrW(s)
Definition: unicode.h:56
#define ERROR_INVALID_INDEX
Definition: winerror.h:1239
#define LCID_INSTALLED
Definition: winnls.h:224

Referenced by RegisterClientPFN().

◆ ListBoxWndProcA()

LRESULT WINAPI ListBoxWndProcA ( HWND  hwnd,
UINT  msg,
WPARAM  wParam,
LPARAM  lParam 
)

Referenced by RegisterClientPFN().

◆ ListBoxWndProcW()

LRESULT WINAPI ListBoxWndProcW ( HWND  hwnd,
UINT  msg,
WPARAM  wParam,
LPARAM  lParam 
)

Referenced by RegisterClientPFN().

◆ MDIClientWndProc_common()

LRESULT WINAPI MDIClientWndProc_common ( HWND  hwnd,
UINT  message,
WPARAM  wParam,
LPARAM  lParam,
BOOL  unicode 
)

Definition at line 1083 of file mdi.c.

1085{
1086 MDICLIENTINFO *ci = NULL;
1087
1088 TRACE("%p %04x (%s) %08Ix %08Ix\n", hwnd, message, SPY_GetMsgName(message, hwnd), wParam, lParam);
1089
1091
1092 if (!(ci = get_client_info( hwnd )))
1093 {
1094 if (message == WM_NCCREATE)
1095 {
1096 if (!(ci = HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*ci) ))) return 0;
1098 }
1099 return unicode ? DefWindowProcW( hwnd, message, wParam, lParam ) :
1101 }
1102
1103 switch (message)
1104 {
1105 case WM_CREATE:
1106 {
1107 /* Since we are using only cs->lpCreateParams, we can safely
1108 * cast to LPCREATESTRUCTA here */
1110 LPCLIENTCREATESTRUCT ccs = (LPCLIENTCREATESTRUCT)cs->lpCreateParams;
1111
1112 ci->hWindowMenu = ccs->hWindowMenu;
1113 ci->idFirstChild = ccs->idFirstChild;
1114 ci->hwndChildMaximized = 0;
1115 ci->child = NULL;
1116 ci->nActiveChildren = 0;
1117 ci->nTotalCreated = 0;
1118 ci->frameTitle = NULL;
1119 ci->mdiFlags = 0;
1120 ci->hFrameMenu = GetMenu(cs->hwndParent);
1121
1122 if (!ci->hBmpClose) ci->hBmpClose = CreateMDIMenuBitmap();
1123
1124 TRACE("Client created: hwnd %p, Window menu %p, idFirst = %04x\n",
1125 hwnd, ci->hWindowMenu, ci->idFirstChild );
1126 return 0;
1127 }
1128
1129 case WM_DESTROY:
1130 {
1131 if( ci->hwndChildMaximized )
1133
1134 ci->nActiveChildren = 0;
1135 MDI_RefreshMenu(ci);
1136
1137 HeapFree( GetProcessHeap(), 0, ci->child );
1138 HeapFree( GetProcessHeap(), 0, ci->frameTitle );
1139 HeapFree( GetProcessHeap(), 0, ci );
1140#ifdef __REACTOS__
1142#endif
1143 return 0;
1144 }
1145
1146#ifdef __REACTOS__
1147 case WM_NCDESTROY:
1148 {
1150 return 0;
1151 }
1152#endif
1153
1154 case WM_MDIACTIVATE:
1155 {
1156 if( ci->hwndActiveChild != (HWND)wParam )
1158 return 0;
1159 }
1160
1161 case WM_MDICASCADE:
1162 return MDICascade(hwnd, ci);
1163
1164 case WM_MDICREATE:
1165 if (lParam)
1166 {
1167 HWND child;
1168
1169 if (unicode)
1170 {
1173 csW->szTitle, csW->style,
1174 csW->x, csW->y, csW->cx, csW->cy,
1175 hwnd, 0, csW->hOwner,
1176 (LPVOID)csW->lParam);
1177 }
1178 else
1179 {
1182 csA->szTitle, csA->style,
1183 csA->x, csA->y, csA->cx, csA->cy,
1184 hwnd, 0, csA->hOwner,
1185 (LPVOID)csA->lParam);
1186 }
1187 return (LRESULT)child;
1188 }
1189 return 0;
1190
1191 case WM_MDIDESTROY:
1192 return MDIDestroyChild( hwnd, ci, (HWND)wParam, TRUE );
1193
1194 case WM_MDIGETACTIVE:
1195 if (lParam) *(BOOL *)lParam = IsZoomed(ci->hwndActiveChild);
1196 return (LRESULT)ci->hwndActiveChild;
1197
1198 case WM_MDIICONARRANGE:
1201 ci->sbRecalc = SB_BOTH+1;
1202#ifdef __REACTOS__
1204#else
1206#endif
1207 return 0;
1208
1209 case WM_MDIMAXIMIZE:
1211 return 0;
1212
1213 case WM_MDINEXT: /* lParam != 0 means previous window */
1214 {
1215 HWND hwnd = wParam ? WIN_GetFullHandle((HWND)wParam) : ci->hwndActiveChild;
1216 HWND next = MDI_GetWindow( ci, hwnd, !lParam, 0 );
1218 if (!lParam)
1220 break;
1221 }
1222
1223 case WM_MDIRESTORE:
1225 return 0;
1226
1227 case WM_MDISETMENU:
1228 return MDISetMenu( hwnd, (HMENU)wParam, (HMENU)lParam );
1229
1230 case WM_MDIREFRESHMENU:
1231 return MDI_RefreshMenu( ci );
1232
1233 case WM_MDITILE:
1236 MDITile( hwnd, ci, wParam );
1237 ci->mdiFlags &= ~MDIF_NEEDUPDATE;
1238 return 0;
1239
1240 case WM_VSCROLL:
1241 case WM_HSCROLL:
1244 ci->mdiFlags &= ~MDIF_NEEDUPDATE;
1245 return 0;
1246
1247 case WM_SETFOCUS:
1248 if (ci->hwndActiveChild && !IsIconic( ci->hwndActiveChild ))
1250 return 0;
1251
1252 case WM_NCACTIVATE:
1253 if( ci->hwndActiveChild )
1255 break;
1256
1257 case WM_PARENTNOTIFY:
1258 switch (LOWORD(wParam))
1259 {
1260 case WM_CREATE:
1262 {
1263 // ReactOS See rev 33503
1264 if (!ci->child)
1265 ci->child = HeapAlloc(GetProcessHeap(), 0, sizeof(HWND));
1266 else
1267 ci->child = HeapReAlloc(GetProcessHeap(), 0, ci->child, sizeof(HWND) * (ci->nActiveChildren + 1));
1268
1269 TRACE("Adding MDI child %p, # of children %d\n",
1271
1272 if (ci->child != NULL)
1273 {
1274 ci->child[ci->nActiveChildren] = (HWND)lParam;
1275 ci->nTotalCreated++;
1276 ci->nActiveChildren++;
1277 }
1278 }
1279 break;
1280
1281 case WM_LBUTTONDOWN:
1282 {
1283 HWND child;
1284 POINT pt;
1285 pt.x = (short)LOWORD(lParam);
1286 pt.y = (short)HIWORD(lParam);
1288
1289 TRACE("notification from %p (%li,%li)\n",child,pt.x,pt.y);
1290
1291 if (child && child != hwnd && child != ci->hwndActiveChild)
1293 break;
1294 }
1295
1296 case WM_DESTROY:
1298 }
1299 return 0;
1300
1301 case WM_SIZE:
1302 if( ci->hwndActiveChild && IsZoomed(ci->hwndActiveChild) )
1303 {
1304 RECT rect;
1305
1306 SetRect(&rect, 0, 0, LOWORD(lParam), HIWORD(lParam));
1310 rect.right - rect.left, rect.bottom - rect.top, 1 );
1311 }
1312 else
1313 MDI_PostUpdate(hwnd, ci, SB_BOTH+1);
1314
1315 break;
1316
1318 if( (ci->mdiFlags & MDIF_NEEDUPDATE) && ci->sbRecalc )
1319 {
1321 ci->sbRecalc = 0;
1322 ci->mdiFlags &= ~MDIF_NEEDUPDATE;
1323 }
1324 return 0;
1325 }
1326 return unicode ? DefWindowProcW( hwnd, message, wParam, lParam ) :
#define HeapReAlloc
Definition: compat.h:734
HANDLE HWND
Definition: compat.h:19
#define HEAP_ZERO_MEMORY
Definition: compat.h:134
#define cs
Definition: i386-dis.c:442
BOOL NTAPI NtUserSetWindowPos(HWND hWnd, HWND hWndInsertAfter, int X, int Y, int cx, int cy, UINT uFlags)
Definition: winpos.c:3573
BOOL NTAPI NtUserMoveWindow(HWND hWnd, int X, int Y, int nWidth, int nHeight, BOOL bRepaint)
Definition: winpos.c:3536
#define GWLP_MDIWND
Definition: ntuser.h:790
BOOL NTAPI NtUserShowWindow(HWND hWnd, LONG nCmdShow)
Definition: winpos.c:3861
DWORD NTAPI NtUserShowScrollBar(HWND hWnd, int wBar, DWORD bShow)
Definition: scrollbar.c:1383
static const CLSID *static CLSID *static const GUID VARIANT VARIANT *static IServiceProvider DWORD *static HMENU
Definition: ordinal.c:60
static HWND child
Definition: cursoricon.c:298
#define SW_SHOWNORMAL
Definition: winuser.h:781
HWND WINAPI ChildWindowFromPoint(_In_ HWND, _In_ POINT)
#define WM_MDITILE
Definition: winuser.h:1846
#define WM_MDISETMENU
Definition: winuser.h:1850
#define SWP_NOACTIVATE
Definition: winuser.h:1253
HWND WINAPI CreateWindowExA(_In_ DWORD dwExStyle, _In_opt_ LPCSTR lpClassName, _In_opt_ LPCSTR 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)
#define WM_MDICREATE
Definition: winuser.h:1840
#define WM_MDICASCADE
Definition: winuser.h:1847
#define SWP_NOMOVE
Definition: winuser.h:1255
BOOL WINAPI AdjustWindowRectEx(_Inout_ LPRECT, _In_ DWORD, _In_ BOOL, _In_ DWORD)
#define SWP_NOSIZE
Definition: winuser.h:1256
#define WM_MDINEXT
Definition: winuser.h:1844
#define GetWindowLongPtrA
Definition: winuser.h:4982
#define WM_MDIACTIVATE
Definition: winuser.h:1842
BOOL WINAPI IsIconic(_In_ HWND)
#define WM_MDIREFRESHMENU
Definition: winuser.h:1854
#define WM_MDIICONARRANGE
Definition: winuser.h:1848
BOOL WINAPI IsZoomed(_In_ HWND)
#define WS_EX_MDICHILD
Definition: winuser.h:394
#define WM_MDIDESTROY
Definition: winuser.h:1841
#define WM_MDIMAXIMIZE
Definition: winuser.h:1845
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)
#define SB_BOTH
Definition: winuser.h:555
struct tagCLIENTCREATESTRUCT * LPCLIENTCREATESTRUCT
#define WM_MDIGETACTIVE
Definition: winuser.h:1849
#define WM_PARENTNOTIFY
Definition: winuser.h:1831
#define SW_MAXIMIZE
Definition: winuser.h:783
#define SetWindowLongPtrW
Definition: winuser.h:5512
BOOL WINAPI PostMessageA(_In_opt_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define HWND_BOTTOM
Definition: winuser.h:1216
HMENU WINAPI GetMenu(_In_ HWND)
#define GWL_EXSTYLE
Definition: winuser.h:862
#define WM_MDIRESTORE
Definition: winuser.h:1843
LPWSTR frameTitle
Definition: mdi.c:121
HWND hwndChildMaximized
Definition: mdi.c:115
UINT nTotalCreated
Definition: mdi.c:122
HBITMAP hBmpClose
Definition: mdi.c:125
UINT idFirstChild
Definition: mdi.c:120
HWND hwndActiveChild
Definition: mdi.c:116
HMENU hWindowMenu
Definition: mdi.c:119
UINT mdiFlags
Definition: mdi.c:123
HMENU hFrameMenu
Definition: mdi.c:118
HWND * child
Definition: mdi.c:117
UINT nActiveChildren
Definition: mdi.c:114
UINT sbRecalc
Definition: mdi.c:124
long top
Definition: dcommon.idl:29
PSYMCRYPT_PARALLEL_HASH_OPERATION next
#define NtUserSetMDIClientInfo(HWND, INFO)
Definition: user_x.h:134
#define NtUserArrangeIconicWindows(HWND)
Definition: user_x.h:125
#define NTUSER_WNDPROC_MDICLIENT
Definition: user_x.h:141
static void MDITile(HWND client, MDICLIENTINFO *ci, WPARAM wParam)
Definition: mdi.c:764
void WINAPI CalcChildScroll(HWND hwnd, INT scroll)
Definition: mdi.c:1774
static LRESULT MDI_RefreshMenu(MDICLIENTINFO *)
Definition: mdi.c:392
static LRESULT MDISetMenu(HWND hwnd, HMENU hmenuFrame, HMENU hmenuWindow)
Definition: mdi.c:312
static void MDI_SwitchActiveChild(MDICLIENTINFO *ci, HWND hwndTo, BOOL activate)
Definition: mdi.c:518
static BOOL MDI_RestoreFrameMenu(HWND, HWND, HBITMAP)
Definition: mdi.c:951
#define MDIF_NEEDUPDATE
Definition: mdi.c:97
static void MDI_PostUpdate(HWND hwnd, MDICLIENTINFO *ci, WORD recalc)
Definition: mdi.c:194
static LRESULT MDIDestroyChild(HWND client, MDICLIENTINFO *ci, HWND child, BOOL flagDestroy)
Definition: mdi.c:552
static HBITMAP CreateMDIMenuBitmap(void)
Definition: mdi.c:673
#define WM_MDICALCCHILDSCROLL
Definition: mdi.c:90
static LONG MDICascade(HWND client, MDICLIENTINFO *ci)
Definition: mdi.c:707
static MDICLIENTINFO * get_client_info(HWND client)
Definition: mdi.c:220
void WINAPI ScrollChildren(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: mdi.c:1901
static HWND MDI_GetWindow(MDICLIENTINFO *clientInfo, HWND hWnd, BOOL bNext, DWORD dwStyleMask)
Definition: mdi.c:244

Referenced by MDIClientWndProcA(), MDIClientWndProcW(), and RegisterClientPFN().

◆ MDIClientWndProcA()

LRESULT WINAPI MDIClientWndProcA ( HWND  hwnd,
UINT  message,
WPARAM  wParam,
LPARAM  lParam 
)

Definition at line 1332 of file mdi.c.

1334{
1335 if (!IsWindow(hwnd)) return 0;
LRESULT WINAPI MDIClientWndProc_common(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam, BOOL unicode)
Definition: mdi.c:1083

Referenced by RegisterClientPFN().

◆ MDIClientWndProcW()

LRESULT WINAPI MDIClientWndProcW ( HWND  hwnd,
UINT  message,
WPARAM  wParam,
LPARAM  lParam 
)

Definition at line 1341 of file mdi.c.

1343{
1344 if (!IsWindow(hwnd)) return 0;

Referenced by RegisterClientPFN().

◆ PopupMenuWndProcA()

LRESULT WINAPI PopupMenuWndProcA ( HWND  hWnd,
UINT  Message,
WPARAM  wParam,
LPARAM  lParam 
)

Definition at line 368 of file menu.c.

369{
370 PWND pWnd;
371
372 pWnd = ValidateHwnd(Wnd);
373 if (pWnd && !pWnd->fnid && Message != WM_NCCREATE)
374 {
375 return DefWindowProcA(Wnd, Message, wParam, lParam);
376 }
377 TRACE("YES! hwnd=%x msg=0x%04x wp=0x%04lx lp=0x%08lx\n", Wnd, Message, wParam, lParam);
378
379 switch(Message)
380 {
381 case WM_NCCREATE:
382 case WM_CREATE:
383 case WM_MOUSEACTIVATE:
384 case WM_PAINT:
385 case WM_PRINTCLIENT:
386 case WM_ERASEBKGND:
387 case WM_DESTROY:
388 case WM_NCDESTROY:
389 case WM_SHOWWINDOW:
390 case MM_SETMENUHANDLE:
391 case MM_GETMENUHANDLE:
392 case MN_SETHMENU:
393 case MN_GETHMENU:
394 return PopupMenuWndProcW(Wnd, Message, wParam, lParam);
395
396 default:
397 return DefWindowProcA(Wnd, Message, wParam, lParam);
398 }
399 return 0;
400}
static const WCHAR Message[]
Definition: register.c:74
#define MN_GETHMENU
Definition: winuser.h:1801
#define WM_MOUSEACTIVATE
Definition: winuser.h:1665
#define MN_SETHMENU
Definition: undocuser.h:55
#define MM_SETMENUHANDLE
Definition: menu.c:30
#define MM_GETMENUHANDLE
Definition: menu.c:31
LRESULT WINAPI PopupMenuWndProcW(HWND Wnd, UINT Message, WPARAM wParam, LPARAM lParam)
Definition: menu.c:297

Referenced by MenuWindowProcA(), and RegisterClientPFN().

◆ PopupMenuWndProcW()

LRESULT WINAPI PopupMenuWndProcW ( HWND  hwnd,
UINT  message,
WPARAM  wParam,
LPARAM  lParam 
)

Definition at line 297 of file menu.c.

298{
299 LRESULT lResult;
300 PWND pWnd;
301
302 TRACE("PMWPW : hwnd=%x msg=0x%04x wp=0x%04lx lp=0x%08lx\n", Wnd, Message, wParam, lParam);
303
304 pWnd = ValidateHwnd(Wnd);
305 if (pWnd)
306 {
307 if (!pWnd->fnid)
308 {
309 if (Message != WM_NCCREATE)
310 {
311 return DefWindowProcW(Wnd, Message, wParam, lParam);
312 }
313 }
314 else
315 {
316 if (pWnd->fnid != FNID_MENU)
317 {
318 ERR("Wrong window class for Menu!\n");
319 return 0;
320 }
321 }
322 }
323
324 switch(Message)
325 {
326 case WM_DESTROY:
327 case WM_NCDESTROY:
328 case WM_NCCREATE:
329 case WM_CREATE:
330 case MM_SETMENUHANDLE:
331 case MM_GETMENUHANDLE:
332 case MN_SETHMENU:
333 case MN_GETHMENU:
334 case WM_PAINT:
335 case WM_PRINTCLIENT:
336 {
337 TRACE("Menu Class ProcW\n");
339 return lResult;
340 }
341 case WM_MOUSEACTIVATE: /* We don't want to be activated */
342 return MA_NOACTIVATE;
343
344 case WM_ERASEBKGND:
345 return 1;
346
347 case WM_SHOWWINDOW: // Not sure what this does....
348 if (0 != wParam)
349 {
350 if (0 == GetWindowLongPtrW(Wnd, 0))
351 {
352 OutputDebugStringA("no menu to display\n");
353 }
354 }
355 else
356 {
357 //SetWindowLongPtrW(Wnd, 0, 0);
358 }
359 break;
360
361 default:
362 return DefWindowProcW(Wnd, Message, wParam, lParam);
363 }
364
365 return 0;
366}
void WINAPI SHIM_OBJ_NAME() OutputDebugStringA(LPCSTR lpOutputString)
Definition: ignoredbgout.c:18
#define FNID_MENU
Definition: ntuser.h:868
#define MA_NOACTIVATE
Definition: winuser.h:2539

Referenced by MenuWindowProcW(), PopupMenuWndProcA(), and RegisterClientPFN().

◆ RegisterClientPFN()

BOOL WINAPI RegisterClientPFN ( VOID  )

Definition at line 144 of file regcontrol.c.

145{
147
194
206
207#if (DLL_EXPORT_VERSION >= _WIN32_WINNT_VISTA)
208 /* Register the PFNs with ntdll */
210 sizeof(pfnClientA),
211 &pfnClientW,
212 sizeof(pfnClientW),
214 sizeof(pfnClientWorker));
215 if (!NT_SUCCESS(Status))
216 {
217 return FALSE;
218 }
219
220 /* Query the PFN thunks from ntdll */
221 PFNCLIENT* pfnNtdllClientA;
222 PFNCLIENT* pfnNtdllClientW;
223 PFNCLIENTWORKER* pfnNtdllClientWorker;
224 Status = RtlRetrieveNtUserPfn((LPCVOID*)&pfnNtdllClientA,
225 (LPCVOID*)&pfnNtdllClientW,
226 (LPCVOID*)&pfnNtdllClientWorker);
227 if (!NT_SUCCESS(Status))
228 {
229 return FALSE;
230 }
231
232 /* Now update the global PFNs */
233 pfnClientA = *pfnNtdllClientA;
234 pfnClientW = *pfnNtdllClientW;
235 pfnClientWorker = *pfnNtdllClientWorker;
236#endif
237
239 &pfnClientW,
242
243 return NT_SUCCESS(Status) ? TRUE : FALSE;
244}
LRESULT WINAPI SwitchWndProcA(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: appswitch.c:867
LRESULT WINAPI SwitchWndProcW(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: appswitch.c:872
LONG NTSTATUS
Definition: precomp.h:26
LRESULT WINAPI ButtonWndProcA(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
LRESULT WINAPI ListBoxWndProcW(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
LRESULT WINAPI MDIClientWndProcW(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
Definition: mdi.c:1341
LRESULT WINAPI DesktopWndProcA(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
Definition: message.c:1307
LRESULT WINAPI EditWndProcW(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
LRESULT WINAPI EditWndProcA(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
LRESULT WINAPI ComboWndProcA(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
LRESULT WINAPI ButtonWndProcW(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
LRESULT WINAPI ListBoxWndProcA(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
LRESULT WINAPI User32DefWindowProc(HWND, UINT, WPARAM, LPARAM, BOOL)
Definition: defwnd.c:312
LRESULT WINAPI MDIClientWndProcA(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
Definition: mdi.c:1332
LRESULT WINAPI PopupMenuWndProcW(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
Definition: menu.c:297
LRESULT WINAPI MDIClientWndProc_common(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam, BOOL unicode)
Definition: mdi.c:1083
LRESULT WINAPI PopupMenuWndProcA(HWND hWnd, UINT Message, WPARAM wParam, LPARAM lParam)
Definition: menu.c:368
LRESULT WINAPI ComboWndProcW(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:33
Status
Definition: gdiplustypes.h:24
LRESULT WINAPI IconTitleWndProcW(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
Definition: icontitle.c:224
LRESULT WINAPI IconTitleWndProcA(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
Definition: icontitle.c:203
NTSTATUS NTAPI NtUserInitializeClientPfnArrays(PPFNCLIENT pfnClientA, PPFNCLIENT pfnClientW, PPFNCLIENTWORKER pfnClientWorker, HINSTANCE hmodUser)
Definition: ntstubs.c:101
CONST void * LPCVOID
Definition: minwindef.h:164
LRESULT WINAPI DefDlgProcW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
LRESULT WINAPI DefDlgProcA(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
PFNCLIENT pfnClientA
Definition: regcontrol.c:15
LRESULT WINAPI MsgWindowProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
Definition: regcontrol.c:114
PFNCLIENT pfnClientW
Definition: regcontrol.c:16
LRESULT WINAPI DialogWndProc_common(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL unicode)
Definition: regcontrol.c:137
PFNCLIENTWORKER pfnClientWorker
Definition: regcontrol.c:17
LRESULT WINAPI ImeWndProcA(HWND, UINT, WPARAM, LPARAM)
Definition: imm.c:1150
LRESULT WINAPI ImeWndProcW(HWND, UINT, WPARAM, LPARAM)
Definition: imm.c:1155
LRESULT WINAPI ImeWndProc_common(HWND, UINT, WPARAM, LPARAM, BOOL)
Definition: imm.c:989
WNDPROC_EX pfnDialogWndProc
Definition: ntuser.h:846
WNDPROC_EX pfnComboListBoxProc
Definition: ntuser.h:845
WNDPROC_EX pfnImeWndProc
Definition: ntuser.h:851
WNDPROC_EX pfnGhostWndProc
Definition: ntuser.h:852
WNDPROC_EX pfnComboBoxWndProc
Definition: ntuser.h:844
WNDPROC_EX pfnMDIClientWndProc
Definition: ntuser.h:849
WNDPROC_EX pfnEditWndProc
Definition: ntuser.h:847
WNDPROC_EX pfnButtonWndProc
Definition: ntuser.h:843
WNDPROC_EX pfnListBoxWndProc
Definition: ntuser.h:848
WNDPROC_EX pfnStaticWndProc
Definition: ntuser.h:850
WNDPROC_EX pfnCtfHookProc
Definition: ntuser.h:853
WNDPROC pfnDispatchDefWindowProc
Definition: ntuser.h:820
WNDPROC pfnMDIClientWndProc
Definition: ntuser.h:813
WNDPROC pfnGhostWndProc
Definition: ntuser.h:816
WNDPROC pfnScrollBarWndProc
Definition: ntuser.h:800
WNDPROC pfnDispatchMessage
Definition: ntuser.h:821
WNDPROC pfnMessageWindowProc
Definition: ntuser.h:805
WNDPROC pfnStaticWndProc
Definition: ntuser.h:814
WNDPROC pfnComboListBoxProc
Definition: ntuser.h:809
WNDPROC pfnComboBoxWndProc
Definition: ntuser.h:808
WNDPROC pfnMDIActivateDlgProc
Definition: ntuser.h:822
WNDPROC pfnTitleWndProc
Definition: ntuser.h:801
WNDPROC pfnDefWindowProc
Definition: ntuser.h:804
WNDPROC pfnMenuWndProc
Definition: ntuser.h:802
WNDPROC pfnButtonWndProc
Definition: ntuser.h:807
WNDPROC pfnSwitchWindowProc
Definition: ntuser.h:806
WNDPROC pfnDialogWndProc
Definition: ntuser.h:810
WNDPROC pfnEditWndProc
Definition: ntuser.h:811
WNDPROC pfnHkINLPCWPSTRUCT
Definition: ntuser.h:817
WNDPROC pfnDispatchHook
Definition: ntuser.h:819
WNDPROC pfnImeWndProc
Definition: ntuser.h:815
WNDPROC pfnDesktopWndProc
Definition: ntuser.h:803
WNDPROC pfnListBoxWndProc
Definition: ntuser.h:812
WNDPROC pfnHkINLPCWPRETSTRUCT
Definition: ntuser.h:818
LRESULT CALLBACK GhostWndProcA(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: ghost.c:604
LRESULT CALLBACK GhostWndProcW(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: ghost.c:610
LRESULT WINAPI ScrollBarWndProcW(HWND Wnd, UINT Msg, WPARAM wParam, LPARAM lParam)
Definition: scrollbar.c:1460
LRESULT WINAPI ScrollBarWndProcA(HWND Wnd, UINT Msg, WPARAM wParam, LPARAM lParam)
Definition: scrollbar.c:1466
HINSTANCE User32Instance
Definition: dllmain.c:27
LRESULT WINAPI ButtonWndProc_common(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL unicode)
Definition: button.c:224
LRESULT WINAPI ComboWndProc_common(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam, BOOL unicode)
Definition: combo.c:1758
LRESULT WINAPI EditWndProc_common(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam, BOOL unicode)
Definition: edit.c:4820
LRESULT WINAPI ListBoxWndProc_common(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam, BOOL unicode)
Definition: listbox.c:2810
LRESULT WINAPI StaticWndProc_common(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL unicode)
Definition: static.c:358
LRESULT WINAPI StaticWndProcW(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: static.c:633
LRESULT WINAPI StaticWndProcA(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: static.c:624
NTSYSAPI NTSTATUS WINAPI RtlRetrieveNtUserPfn(const void **, const void **, const void **)
NTSYSAPI NTSTATUS WINAPI RtlInitializeNtUserPfn(const void *, ULONG, const void *, ULONG, const void *, ULONG)

Referenced by ClientThreadSetupHelper().

◆ ScrollBarWndProcA()

LRESULT WINAPI ScrollBarWndProcA ( HWND  hwnd,
UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam 
)

Definition at line 1466 of file scrollbar.c.

1468{
LRESULT WINAPI ScrollBarWndProc_common(WNDPROC DefWindowProc, HWND Wnd, UINT Msg, WPARAM wParam, LPARAM lParam, BOOL unicode)
Definition: scrollbar.c:1216

Referenced by RegisterClientPFN().

◆ ScrollBarWndProcW()

LRESULT WINAPI ScrollBarWndProcW ( HWND  hwnd,
UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam 
)

Definition at line 1460 of file scrollbar.c.

Referenced by RegisterClientPFN().

◆ set_control_clipping()

HRGN set_control_clipping ( HDC  hdc,
const RECT *  rect 
)

Definition at line 242 of file button.c.

243{
244 RECT rc = *rect;
245 HRGN hrgn = CreateRectRgn( 0, 0, 0, 0 );
246
247 if (GetClipRgn( hdc, hrgn ) != 1)
248 {
250 hrgn = 0;
251 }
252 DPtoLP( hdc, (POINT *)&rc, 2 );
253 if (GetLayout( hdc ) & LAYOUT_RTL) /* compensate for the shifting done by IntersectClipRect */
254 {
255 rc.left++;
256 rc.right++;
257 }
258 IntersectClipRect( hdc, rc.left, rc.top, rc.right, rc.bottom );
259 return hrgn;
260}
static HRGN hrgn
pKey DeleteObject()
DWORD WINAPI GetLayout(_In_ HDC hdc)
Definition: coord.c:750
HRGN WINAPI CreateRectRgn(_In_ int, _In_ int, _In_ int, _In_ int)
int WINAPI IntersectClipRect(_In_ HDC, _In_ int, _In_ int, _In_ int, _In_ int)
BOOL WINAPI DPtoLP(_In_ HDC hdc, _Inout_updates_(c) LPPOINT lppt, _In_ int c)
int WINAPI GetClipRgn(_In_ HDC, _In_ HRGN)
#define LAYOUT_RTL
Definition: wingdi.h:1371

Referenced by CB_Paint(), CBPaintText(), GB_Paint(), LISTBOX_PaintItem(), OB_Paint(), PB_Paint(), STATIC_TryPaintFcn(), STATIC_WindowProc(), and StaticWndProc_common().

◆ StaticWndProc_common()

LRESULT WINAPI StaticWndProc_common ( HWND  hwnd,
UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam,
BOOL  unicode 
)

Definition at line 358 of file static.c.

359{
360 LRESULT lResult = 0;
361 LONG full_style = GetWindowLongW( hwnd, GWL_STYLE );
362 LONG style = full_style & SS_TYPEMASK;
363
364 if (!IsWindow( hwnd )) return 0;
366
367 switch (uMsg)
368 {
369 case WM_CREATE:
370 if (style < 0L || style > SS_TYPEMASK)
371 {
372 ERR("Unknown style 0x%02lx\n", style );
373 return -1;
374 }
375 STATIC_update_uistate(hwnd, unicode); // ReactOS r30727
377 break;
378
379 case WM_NCDESTROY:
380#ifdef __REACTOS__
382#endif
383 if (style == SS_ICON) {
384/*
385 * FIXME
386 * DestroyIcon32( STATIC_SetIcon( wndPtr, 0 ) );
387 *
388 * We don't want to do this yet because DestroyIcon32 is broken. If the icon
389 * had already been loaded by the application the last thing we want to do is
390 * GlobalFree16 the handle.
391 */
392 break;
393 }
394 else return unicode ? DefWindowProcW(hwnd, uMsg, wParam, lParam) :
396
397 case WM_ERASEBKGND:
398 /* do all painting in WM_PAINT like Windows does */
399 return 1;
400
401 case WM_PRINTCLIENT:
402 case WM_PAINT:
403 {
404 PAINTSTRUCT ps;
405 RECT rect;
407 HRGN hrgn;
408 HBRUSH hbrush;
409
414 (staticPaintFunc[style])( hwnd, hdc, hbrush, full_style );
416 if (hrgn) DeleteObject( hrgn );
417 if (!wParam) NtUserEndPaint( hwnd, &ps );
418 }
419 break;
420
421 case WM_ENABLE:
422 STATIC_TryPaintFcn( hwnd, full_style );
423 if (full_style & SS_NOTIFY) {
424 if (wParam) {
427 }
428 else {
431 }
432 }
433 break;
434
437 STATIC_TryPaintFcn( hwnd, full_style );
438 break;
439
440 case WM_NCCREATE:
441 {
443
444 if (full_style & SS_SUNKEN || style == SS_ETCHEDHORZ || style == SS_ETCHEDVERT)
447
449 {
450 RECT rc;
451 GetClientRect(hwnd, &rc);
452 if (style == SS_ETCHEDHORZ)
453 rc.bottom = rc.top;
454 else
455 rc.right = rc.left;
457 NtUserSetWindowPos( hwnd, NULL, 0, 0, rc.right - rc.left, rc.bottom - rc.top,
459 }
460
461 switch (style) {
462 case SS_ICON:
463 {
464 const WCHAR *name = cs->lpszName;
465 HICON hIcon;
466
467 if (!unicode)
468 {
469 const char *nameA = (const char *)name;
470 if (nameA && nameA[0] == '\xff')
471 name = MAKEINTRESOURCEW(MAKEWORD(nameA[1], nameA[2]));
472 }
473 else if (name && name[0] == 0xffff)
474 {
476 }
477
478 if (unicode || IS_INTRESOURCE(name))
479 hIcon = STATIC_LoadIconW(cs->hInstance, name, full_style);
480 else
481 hIcon = STATIC_LoadIconA(cs->hInstance, (const char *)name, full_style);
482 STATIC_SetIcon(hwnd, hIcon, full_style);
483 }
484 break;
485 case SS_BITMAP:
486 if ((ULONG_PTR)cs->hInstance >> 16)
487 {
488 const WCHAR *name = cs->lpszName;
490
491 if (!unicode)
492 {
493 const char *nameA = (const char *)name;
494 if (nameA && nameA[0] == '\xff')
495 name = MAKEINTRESOURCEW(MAKEWORD(nameA[1], nameA[2]));
496 }
497 else if (name && name[0] == 0xffff)
498 {
500 }
501
502 if (unicode || IS_INTRESOURCE(name))
503 hBitmap = LoadBitmapW(cs->hInstance, name);
504 else
505 hBitmap = LoadBitmapA(cs->hInstance, (const char *)name);
506 STATIC_SetBitmap(hwnd, hBitmap, full_style);
507 }
508 break;
509 }
510 /* SS_ENHMETAFILE: Despite what MSDN says, Windows does not load
511 the enhanced metafile that was specified as the window text. */
512 }
513 return unicode ? DefWindowProcW(hwnd, uMsg, wParam, lParam) :
515
516 case WM_SETTEXT:
517 if (hasTextStyle( full_style ))
518 {
519 if (unicode)
520 lResult = DefWindowProcW( hwnd, uMsg, wParam, lParam );
521 else
522 lResult = DefWindowProcA( hwnd, uMsg, wParam, lParam );
523 STATIC_TryPaintFcn( hwnd, full_style );
524 }
525 break;
526
527 case WM_SETFONT:
528 if (hasTextStyle( full_style ))
529 {
530 set_control_font( hwnd, (HFONT)wParam );
531 if (LOWORD(lParam))
534 }
535 break;
536
537 case WM_GETFONT:
538 return (LRESULT)get_control_font( hwnd );
539
540 case WM_NCHITTEST:
541 if (full_style & SS_NOTIFY)
542 return HTCLIENT;
543 else
544 return HTTRANSPARENT;
545
546 case WM_GETDLGCODE:
547 return DLGC_STATIC;
548
549 case WM_LBUTTONDOWN:
550 case WM_NCLBUTTONDOWN:
551 if (full_style & SS_NOTIFY)
554 return 0;
555
556 case WM_LBUTTONDBLCLK:
558 if (full_style & SS_NOTIFY)
561 return 0;
562
563 case STM_GETIMAGE:
564 return (LRESULT)STATIC_GetImage( hwnd, wParam, full_style );
565
566 case STM_GETICON:
567 return (LRESULT)STATIC_GetImage( hwnd, IMAGE_ICON, full_style );
568
569 case STM_SETIMAGE:
570 switch(wParam) {
571 case IMAGE_BITMAP:
572 if (style != SS_BITMAP) return 0; // ReactOS r43158
573 if (style != SS_BITMAP) return 0;
574 lResult = (LRESULT)STATIC_SetBitmap( hwnd, (HBITMAP)lParam, full_style );
575 break;
577 if (style != SS_ENHMETAFILE) return 0; // ReactOS r43158
578 if (style != SS_ENHMETAFILE) return 0;
579 lResult = (LRESULT)STATIC_SetEnhMetaFile( hwnd, (HENHMETAFILE)lParam, full_style );
580 break;
581 case IMAGE_ICON:
582 case IMAGE_CURSOR:
583 if (style != SS_ICON) return 0; // ReactOS r43158
584 if (style != SS_ICON) return 0;
585 lResult = (LRESULT)STATIC_SetIcon( hwnd, (HICON)lParam, full_style );
586 break;
587 default:
588 FIXME("STM_SETIMAGE: Unhandled type %Ix\n", wParam);
589 break;
590 }
591 STATIC_TryPaintFcn( hwnd, full_style );
592 break;
593
594 case STM_SETICON:
595 if (style != SS_ICON) return 0;
596 lResult = (LRESULT)STATIC_SetIcon( hwnd, (HICON)wParam, full_style );
597 STATIC_TryPaintFcn( hwnd, full_style );
598 break;
599
600#ifdef __REACTOS__
601 case WM_UPDATEUISTATE:
602 if (unicode)
604 else
606
607 if (STATIC_update_uistate(hwnd, unicode) && hasTextStyle( full_style ))
608 {
610 }
611 break;
612#endif
613
614 default:
615 return unicode ? DefWindowProcW(hwnd, uMsg, wParam, lParam) :
617 }
618 return lResult;
619}
static HBITMAP hBitmap
Definition: timezone.c:26
HRGN set_control_clipping(HDC hdc, const RECT *rect)
Definition: button.c:242
static HBRUSH STATIC_SendWmCtlColorStatic(HWND hwnd, HDC hdc)
Definition: static.c:285
static HBITMAP STATIC_SetBitmap(HWND hwnd, HBITMAP hBitmap, DWORD style)
Definition: static.c:159
static HICON STATIC_LoadIconW(HINSTANCE hInstance, LPCWSTR name, DWORD style)
Definition: static.c:239
static HICON STATIC_SetIcon(HWND hwnd, HICON hicon, DWORD style)
Definition: static.c:123
static BOOL hasTextStyle(DWORD style)
Definition: static.c:306
static HANDLE STATIC_GetImage(HWND hwnd, WPARAM wParam, DWORD style)
Definition: static.c:214
static VOID STATIC_TryPaintFcn(HWND hwnd, LONG full_style)
Definition: static.c:265
static const pfPaint staticPaintFunc[SS_TYPEMASK+1]
Definition: static.c:60
static HENHMETAFILE STATIC_SetEnhMetaFile(HWND hwnd, HENHMETAFILE hEnhMetaFile, DWORD style)
Definition: static.c:197
#define IS_INTRESOURCE(x)
Definition: loader.c:613
BOOL NTAPI NtUserRedrawWindow(HWND hWnd, CONST RECT *lprcUpdate, HRGN hrgnUpdate, UINT flags)
Definition: painting.c:2002
static HBITMAP
Definition: button.c:44
static HICON
Definition: imagelist.c:80
HICON hIcon
Definition: msconfig.c:44
#define SS_BITMAP
Definition: pedump.c:704
#define SS_ICON
Definition: pedump.c:695
#define MAKEWPARAM(l, h)
Definition: winuser.h:4117
#define WS_EX_STATICEDGE
Definition: winuser.h:403
BOOL WINAPI RedrawWindow(_In_opt_ HWND, _In_opt_ LPCRECT, _In_opt_ HRGN, _In_ UINT)
#define STM_SETICON
Definition: winuser.h:2128
#define SS_NOTIFY
Definition: winuser.h:351
#define RDW_UPDATENOW
Definition: winuser.h:1231
#define SS_ETCHEDHORZ
Definition: winuser.h:343
#define RDW_ERASE
Definition: winuser.h:1222
HBITMAP WINAPI LoadBitmapA(_In_opt_ HINSTANCE, _In_ LPCSTR)
Definition: cursoricon.c:2517
#define SS_ENHMETAFILE
Definition: winuser.h:341
#define SS_ETCHEDVERT
Definition: winuser.h:344
#define STM_SETIMAGE
Definition: winuser.h:2129
#define STM_GETICON
Definition: winuser.h:2126
#define STN_DISABLE
Definition: winuser.h:2132
#define SS_TYPEMASK
Definition: winuser.h:362
#define IMAGE_ENHMETAFILE
Definition: winuser.h:214
#define RDW_ALLCHILDREN
Definition: winuser.h:1232
#define HTCLIENT
Definition: winuser.h:2511
#define IMAGE_CURSOR
Definition: winuser.h:213
#define GWLP_ID
Definition: winuser.h:871
#define MAKEINTRESOURCEW(i)
Definition: winuser.h:582
HBITMAP WINAPI LoadBitmapW(_In_opt_ HINSTANCE, _In_ LPCWSTR)
Definition: cursoricon.c:2532
#define SWP_NOZORDER
Definition: winuser.h:1258
#define STN_DBLCLK
Definition: winuser.h:2131
#define STM_GETIMAGE
Definition: winuser.h:2127
#define SS_SUNKEN
Definition: winuser.h:358
#define STN_ENABLE
Definition: winuser.h:2133
#define WM_NCLBUTTONDOWN
Definition: winuser.h:1720
#define STN_CLICKED
Definition: winuser.h:2130
#define RDW_INVALIDATE
Definition: winuser.h:1225
Definition: name.c:39
#define MAKEWORD(a, b)
Definition: typedefs.h:248
static __inline BOOL STATIC_update_uistate(HWND hwnd, BOOL unicode)
Definition: user_x.h:65
#define NTUSER_WNDPROC_STATIC
Definition: user_x.h:139
static HFONT get_control_font(HWND hwnd)
Definition: static.c:96
static VOID STATIC_InitColours(void)
Definition: static.c:327
static HFONT set_control_font(HWND hwnd, HFONT font)
Definition: static.c:101
static HICON STATIC_LoadIconA(HINSTANCE hInstance, LPCSTR name, DWORD style)
Definition: static.c:233
int WINAPI SelectClipRgn(_In_ HDC, _In_opt_ HRGN)

Referenced by RegisterClientPFN(), StaticWndProcA(), and StaticWndProcW().

◆ StaticWndProcA()

LRESULT WINAPI StaticWndProcA ( HWND  hWnd,
UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam 
)

Definition at line 624 of file static.c.

625{
626 if (!IsWindow( hWnd )) return 0;
628}

Referenced by RegisterClientPFN().

◆ StaticWndProcW()

LRESULT WINAPI StaticWndProcW ( HWND  hWnd,
UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam 
)

Definition at line 633 of file static.c.

634{
635 if (!IsWindow( hWnd )) return 0;
636 return StaticWndProc_common(hWnd, uMsg, wParam, lParam, TRUE);
637}

Referenced by RegisterClientPFN().

◆ SwitchWndProcA()

LRESULT WINAPI SwitchWndProcA ( HWND  hWnd,
UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam 
)

Definition at line 867 of file appswitch.c.

868{
870}
LRESULT WINAPI SwitchWndProc_common(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL unicode)
Definition: appswitch.c:794

Referenced by RegisterClientPFN().

◆ SwitchWndProcW()

LRESULT WINAPI SwitchWndProcW ( HWND  hWnd,
UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam 
)

Definition at line 872 of file appswitch.c.

873{
874 return SwitchWndProc_common(hWnd, uMsg, wParam, lParam, TRUE);
875}

Referenced by RegisterClientPFN().

◆ User32DefWindowProc()

LRESULT WINAPI User32DefWindowProc ( HWND  hWnd,
UINT  Msg,
WPARAM  wParam,
LPARAM  lParam,
BOOL  bUnicode 
)

Definition at line 312 of file defwnd.c.

317{
318 PWND pWnd = NULL;
319 if (hWnd)
320 {
321 pWnd = ValidateHwnd(hWnd);
322 if (!pWnd) return 0;
323 }
324
325 switch (Msg)
326 {
327 case WM_DEVICECHANGE:
328 return TRUE;
329
330 case WM_RBUTTONUP:
331 {
332 POINT Pt;
333 Pt.x = GET_X_LPARAM(lParam);
334 Pt.y = GET_Y_LPARAM(lParam);
335 ClientToScreen(hWnd, &Pt);
336 lParam = MAKELPARAM(Pt.x, Pt.y);
337 if (bUnicode)
338 {
340 }
341 else
342 {
344 }
345 break;
346 }
347
348 case WM_NCRBUTTONUP:
349 /*
350 * FIXME : we must NOT send WM_CONTEXTMENU on a WM_NCRBUTTONUP (checked
351 * in Windows), but what _should_ we do? According to MSDN :
352 * "If it is appropriate to do so, the system sends the WM_SYSCOMMAND
353 * message to the window". When is it appropriate?
354 */
355 ERR("WM_NCRBUTTONUP\n");
356 break;
357
358 case WM_XBUTTONUP:
359 case WM_NCXBUTTONUP:
360 if (HIWORD(wParam) == XBUTTON1 || HIWORD(wParam) == XBUTTON2)
361 {
363 MAKELPARAM(LOWORD(wParam), FAPPCOMMAND_MOUSE | HIWORD(wParam)));
364 }
365 break;
366
367 case WM_CONTEXTMENU:
368 {
370 {
371 if (bUnicode)
372 {
374 }
375 else
376 {
378 }
379 }
380 else
381 {
382 goto GoSS;
383 }
384 break;
385 }
386
387 case WM_CLOSE:
389 return (0);
390
391 case WM_MOUSEACTIVATE:
393 {
395 if (Ret) return (Ret);
396 }
398
399 case WM_ACTIVATE:
400 /* The default action in Windows is to set the keyboard focus to
401 * the window, if it's being activated and not minimized */
402 if (LOWORD(wParam) != WA_INACTIVE &&
404 {
405 //ERR("WM_ACTIVATE %p\n",hWnd);
406 SetFocus(hWnd);
407 }
408 break;
409
410 case WM_MOUSEWHEEL:
413 break;
414
415 case WM_ERASEBKGND:
417 {
418 RECT Rect;
419 HBRUSH hBrush = (HBRUSH)GetClassLongPtrW(hWnd, GCL_HBRBACKGROUND);
420
421 if (NULL == hBrush)
422 {
423 return 0;
424 }
426 {
427 /* can't use GetClipBox with a parent DC or we fill the whole parent */
429 DPtoLP((HDC)wParam, (LPPOINT)&Rect, 2);
430 }
431 else
432 {
434 }
435 FillRect((HDC)wParam, &Rect, hBrush);
436 return (1);
437 }
438
440 case WM_CTLCOLOREDIT:
442 case WM_CTLCOLORBTN:
443 case WM_CTLCOLORDLG:
447
448 case WM_CTLCOLOR:
450
451 case WM_SYSCOMMAND:
453
454 case WM_VKEYTOITEM:
455 case WM_CHARTOITEM:
456 return (-1);
457/*
458 case WM_DROPOBJECT:
459 return DRAG_FILE;
460*/
462 {
464 {
465 return(1);
466 }
467 break;
468 }
469
470 case WM_QUERYDRAGICON:
471 {
472 UINT Len;
473 HICON hIcon;
474
476 if (hIcon)
477 {
478 return ((LRESULT)hIcon);
479 }
480 for (Len = 1; Len < 64; Len++)
481 {
483 {
484 return((LRESULT)hIcon);
485 }
486 }
487 return ((LRESULT)LoadIconW(0, IDI_APPLICATION));
488 }
489
490 case WM_ISACTIVEICON:
491 {
492 BOOL isai;
493 isai = (pWnd->state & WNDS_ACTIVEFRAME) != 0;
494 return isai;
495 }
496
497 case WM_NOTIFYFORMAT:
498 {
499 if (lParam == NF_QUERY)
501 break;
502 }
503
504 case WM_GETICON:
505 {
506 return DefWndGetIcon(pWnd, wParam, lParam);
507 }
508
509 case WM_HELP:
510 {
511 if (bUnicode)
512 {
514 }
515 else
516 {
518 }
519 break;
520 }
521
522 case WM_QUERYOPEN:
524 {
525 return (1);
526 }
527
528 case WM_INPUTLANGCHANGEREQUEST:
529 {
530 HKL hNewKL;
531 HWND hwndFocus;
532
533 if ((wParam & INPUTLANGCHANGE_BACKWARD) && (wParam & INPUTLANGCHANGE_FORWARD))
534 return FALSE;
535
536 hwndFocus = GetFocus();
537 if (hwndFocus && hwndFocus != hWnd &&
539 {
540 return SendMessageW(hwndFocus, Msg, wParam, lParam);
541 }
542
543 if (wParam & INPUTLANGCHANGE_FORWARD)
544 hNewKL = (HKL)UlongToHandle(HKL_NEXT);
545 else if (wParam & INPUTLANGCHANGE_BACKWARD)
546 hNewKL = (HKL)UlongToHandle(HKL_PREV);
547 else
548 hNewKL = (HKL)lParam;
549
551 return TRUE;
552 }
553
554 case WM_INPUTLANGCHANGE:
555 {
556 int count = 0;
557 HWND *win_array = WIN_ListChildren( hWnd );
558
559 if (!win_array)
560 break;
561 while (win_array[count])
562 SendMessageW( win_array[count++], WM_INPUTLANGCHANGE, wParam, lParam);
563 HeapFree(GetProcessHeap(),0,win_array);
564 break;
565 }
566
567 case WM_QUERYUISTATE:
568 {
569 LRESULT Ret = 0;
570 PWND Wnd = ValidateHwnd(hWnd);
571 if (Wnd != NULL)
572 {
573 if (Wnd->HideFocus)
574 Ret |= UISF_HIDEFOCUS;
575 if (Wnd->HideAccel)
576 Ret |= UISF_HIDEACCEL;
577 }
578 return Ret;
579 }
580
581 case WM_CHANGEUISTATE:
582 {
583 BOOL AlwaysShowCues = FALSE;
586 PWND Wnd;
587
588 SystemParametersInfoW(SPI_GETKEYBOARDCUES, 0, &AlwaysShowCues, 0);
589 if (AlwaysShowCues)
590 break;
591
592 Wnd= ValidateHwnd(hWnd);
593 if (!Wnd || lParam != 0)
594 break;
595
596 if (Flags & ~(UISF_HIDEFOCUS | UISF_HIDEACCEL | UISF_ACTIVE))
597 break;
598
599 if (Flags & UISF_ACTIVE)
600 {
601 WARN("WM_CHANGEUISTATE does not yet support UISF_ACTIVE\n");
602 }
603
604 if (Action == UIS_INITIALIZE)
605 {
607 if (Desk == NULL)
608 break;
609
610 Action = Desk->LastInputWasKbd ? UIS_CLEAR : UIS_SET;
611 Flags = UISF_HIDEFOCUS | UISF_HIDEACCEL;
612
613 /* We need to update wParam in case we need to send out messages */
615 }
616
617 switch (Action)
618 {
619 case UIS_SET:
620 /* See if we actually need to change something */
621 if ((Flags & UISF_HIDEFOCUS) && !Wnd->HideFocus)
622 break;
623 if ((Flags & UISF_HIDEACCEL) && !Wnd->HideAccel)
624 break;
625
626 /* Don't need to do anything... */
627 return 0;
628
629 case UIS_CLEAR:
630 /* See if we actually need to change something */
631 if ((Flags & UISF_HIDEFOCUS) && Wnd->HideFocus)
632 break;
633 if ((Flags & UISF_HIDEACCEL) && Wnd->HideAccel)
634 break;
635
636 /* Don't need to do anything... */
637 return 0;
638
639 default:
640 WARN("WM_CHANGEUISTATE: Unsupported Action 0x%x\n", Action);
641 break;
642 }
643
644 if ((Wnd->style & WS_CHILD) && Wnd->spwndParent != NULL)
645 {
646 /* We're a child window and we need to pass this message down until
647 we reach the root */
649 }
650 else
651 {
652 /* We're a top level window, we need to change the UI state */
653 Msg = WM_UPDATEUISTATE;
654 }
655
656 if (bUnicode)
657 return SendMessageW(hWnd, Msg, wParam, lParam);
658 else
659 return SendMessageA(hWnd, Msg, wParam, lParam);
660 }
661
662 case WM_UPDATEUISTATE:
663 {
664 BOOL Change = TRUE;
665 BOOL AlwaysShowCues = FALSE;
668 PWND Wnd;
669
670 SystemParametersInfoW(SPI_GETKEYBOARDCUES, 0, &AlwaysShowCues, 0);
671 if (AlwaysShowCues)
672 break;
673
674 Wnd = ValidateHwnd(hWnd);
675 if (!Wnd || lParam != 0)
676 break;
677
678 if (Flags & ~(UISF_HIDEFOCUS | UISF_HIDEACCEL | UISF_ACTIVE))
679 break;
680
681 if (Flags & UISF_ACTIVE)
682 {
683 WARN("WM_UPDATEUISTATE does not yet support UISF_ACTIVE\n");
684 }
685
686 if (Action == UIS_INITIALIZE)
687 {
689 if (Desk == NULL)
690 break;
691
692 Action = Desk->LastInputWasKbd ? UIS_CLEAR : UIS_SET;
693 Flags = UISF_HIDEFOCUS | UISF_HIDEACCEL;
694
695 /* We need to update wParam for broadcasting the update */
697 }
698
699 switch (Action)
700 {
701 case UIS_SET:
702 /* See if we actually need to change something */
703 if ((Flags & UISF_HIDEFOCUS) && !Wnd->HideFocus)
704 break;
705 if ((Flags & UISF_HIDEACCEL) && !Wnd->HideAccel)
706 break;
707
708 /* Don't need to do anything... */
709 Change = FALSE;
710 break;
711
712 case UIS_CLEAR:
713 /* See if we actually need to change something */
714 if ((Flags & UISF_HIDEFOCUS) && Wnd->HideFocus)
715 break;
716 if ((Flags & UISF_HIDEACCEL) && Wnd->HideAccel)
717 break;
718
719 /* Don't need to do anything... */
720 Change = FALSE;
721 break;
722
723 default:
724 WARN("WM_UPDATEUISTATE: Unsupported Action 0x%x\n", Action);
725 return 0;
726 }
727
728 /* Pack the information and call win32k */
729 if (Change)
730 {
731 if (!NtUserxUpdateUiState(hWnd, Flags | ((DWORD)Action << 3)))
732 break;
733 }
734
735 /* Always broadcast the update to all children */
738 (LPARAM)wParam);
739
740 break;
741 }
742
744 {
745 TRACE("WM_COPYGLOBALDATA hGlobal %p Size %d Flags 0x%x\n",lParam,wParam,GlobalFlags((HGLOBAL)lParam));
746 return lParam;
747 }
748
749/* Move to Win32k !*/
750 case WM_SHOWWINDOW:
751 if (!lParam) break; // Call when it is necessary.
752 case WM_LBUTTONDOWN:
753 case WM_RBUTTONDOWN:
754 case WM_MBUTTONDOWN:
755 case WM_NCLBUTTONDOWN:
756 case WM_NCRBUTTONDOWN:
757 case WM_LBUTTONDBLCLK:
759 case WM_KEYF1:
760 case WM_KEYUP:
761 case WM_SYSKEYUP:
762 case WM_KEYDOWN:
763 case WM_SYSKEYDOWN:
764 case WM_SYSCHAR:
765 case WM_CANCELMODE:
766 case WM_PAINTICON:
767 case WM_PAINT:
768 case WM_PRINT:
769 case WM_SETICON:
773 case WM_NCPAINT:
774 case WM_NCACTIVATE:
775 case WM_NCCALCSIZE:
776 case WM_NCHITTEST:
777 case WM_SYNCPAINT:
778 case WM_SETREDRAW:
780 case WM_GETHOTKEY:
781 case WM_SETHOTKEY:
784 case WM_APPCOMMAND:
785 case WM_SETCURSOR:
787GoSS:
788 {
789 LRESULT lResult;
791 return lResult;
792 }
793 }
794 return 0;
795}
#define UlongToHandle(ul)
Definition: basetsd.h:91
USHORT Change
Definition: bootdev.cpp:133
#define Len
Definition: deflate.h:82
_In_ D3DDDI_VIDEO_PRESENT_TARGET_ID _In_ ULONG _In_ ULONG Flags
Definition: dispmprt.h:245
unsigned short WORD
Definition: ntddk_ex.h:93
GLuint GLuint GLsizei count
Definition: gl.h:1545
UINT NTAPI GlobalFlags(HGLOBAL hMem)
Definition: heapmem.c:520
HKL NTAPI NtUserActivateKeyboardLayout(HKL hKL, ULONG Flags)
Definition: kbdlayout.c:1226
#define WNDS_ACTIVEFRAME
Definition: ntuser.h:615
#define FNID_DEFWINDOWPROC
Definition: ntuser.h:870
#define UserHMGetHandle(obj)
Definition: ntuser.h:233
#define WM_KEYF1
Definition: msg.c:49
LRESULT FASTCALL DefWndGetIcon(PWND pWnd, WPARAM wParam, LPARAM lParam)
Definition: defwnd.c:471
LRESULT FASTCALL DefWndHandleSysCommand(PWND pWnd, WPARAM wParam, LPARAM lParam)
Definition: defwnd.c:123
HBRUSH FASTCALL DefWndControlColor(HDC hDC, UINT ctlType)
Definition: defwnd.c:32
EXTINLINE BOOL NtUserxUpdateUiState(HWND hWnd, DWORD Param)
Definition: ntwrapper.h:686
#define WS_CHILD
Definition: pedump.c:617
#define WS_EX_ACCEPTFILES
Definition: pedump.c:648
#define WS_MINIMIZE
Definition: pedump.c:622
HWND WINAPI GetFocus(void)
Definition: window.c:1887
#define WM_GETHOTKEY
Definition: winuser.h:1681
#define MAKELPARAM(l, h)
Definition: winuser.h:4116
#define KLF_SETFORPROCESS
Definition: winuser.h:117
#define WM_CHARTOITEM
Definition: winuser.h:1677
#define HTCAPTION
Definition: winuser.h:2512
#define WM_QUERYOPEN
Definition: winuser.h:1652
#define WM_SETHOTKEY
Definition: winuser.h:1680
#define WM_WINDOWPOSCHANGING
Definition: winuser.h:1689
#define WM_SYNCPAINT
Definition: winuser.h:1718
#define WM_CANCELMODE
Definition: winuser.h:1663
#define MA_ACTIVATE
Definition: winuser.h:2537
#define WM_APPCOMMAND
Definition: winuser.h:1910
#define HKL_PREV
Definition: winuser.h:110
#define WM_RBUTTONUP
Definition: winuser.h:1808
#define WA_INACTIVE
Definition: winuser.h:2664
#define WM_DEVICECHANGE
Definition: winuser.h:1839
BOOL WINAPI EnumChildWindows(_In_opt_ HWND, _In_ WNDENUMPROC, _In_ LPARAM)
#define WM_QUERYDRAGICON
Definition: winuser.h:1682
BOOL WINAPI ClientToScreen(_In_ HWND, _Inout_ LPPOINT)
#define IDI_APPLICATION
Definition: winuser.h:712
#define WM_RBUTTONDOWN
Definition: winuser.h:1807
BOOL WINAPI IsWindowUnicode(_In_ HWND)
#define WM_SYSCHAR
Definition: winuser.h:1749
#define HKL_NEXT
Definition: winuser.h:109
HWND WINAPI SetFocus(_In_opt_ HWND)
#define WM_QUERYENDSESSION
Definition: winuser.h:1650
#define WM_SYSKEYUP
Definition: winuser.h:1748
#define GCL_HBRBACKGROUND
Definition: winuser.h:672
#define GetClassLongPtrW
Definition: winuser.h:4718
#define NFR_ANSI
Definition: winuser.h:2494
#define WM_NCRBUTTONUP
Definition: winuser.h:1724
#define WM_ICONERASEBKGND
Definition: winuser.h:1670
#define WM_PRINT
Definition: winuser.h:1908
#define NFR_UNICODE
Definition: winuser.h:2495
#define GCL_HICON
Definition: winuser.h:674
#define WM_NCCALCSIZE
Definition: winuser.h:1713
#define CS_PARENTDC
Definition: winuser.h:664
#define WM_WINDOWPOSCHANGED
Definition: winuser.h:1690
BOOL WINAPI DestroyWindow(_In_ HWND)
HICON WINAPI LoadIconW(_In_opt_ HINSTANCE hInstance, _In_ LPCWSTR lpIconName)
Definition: cursoricon.c:2444
#define GCW_ATOM
Definition: winuser.h:669
#define GCL_STYLE
Definition: winuser.h:678
#define WM_PAINTICON
Definition: winuser.h:1669
#define NF_QUERY
Definition: winuser.h:2496
#define WM_VKEYTOITEM
Definition: winuser.h:1676
#define WM_NCRBUTTONDOWN
Definition: winuser.h:1723
UINT LastInputWasKbd
Definition: ntuser.h:157
DWORD style
Definition: ntuser.h:710
UINT HideFocus
Definition: ntuser.h:762
UINT HideAccel
Definition: ntuser.h:763
DWORD state
Definition: ntuser.h:705
struct _WND * spwndParent
Definition: ntuser.h:717
#define WM_COPYGLOBALDATA
Definition: undocuser.h:38
#define WM_NCUAHDRAWCAPTION
Definition: undocuser.h:48
#define WM_QUERYDROPOBJECT
Definition: undocuser.h:57
#define WM_ISACTIVEICON
Definition: undocuser.h:35
#define WM_CLIENTSHUTDOWN
Definition: undocuser.h:37
#define WM_POPUPSYSTEMMENU
Definition: undocuser.h:62
#define WC_DIALOG
Definition: undocuser.h:13
#define WM_NCUAHDRAWFRAME
Definition: undocuser.h:49
static BOOL CALLBACK UserSendUiUpdateMsg(HWND hwnd, LPARAM lParam)
Definition: defwnd.c:244
HWND * WIN_ListChildren(HWND hWndparent)
Definition: mdi.c:139
static __inline PDESKTOPINFO GetThreadDesktopInfo(VOID)
Definition: user_x.h:43
_In_ WDFIOTARGET _In_ _Strict_type_match_ WDF_IO_TARGET_SENT_IO_ACTION Action
Definition: wdfiotarget.h:510
static PVOID FASTCALL DesktopPtrToUser(PVOID ptr)
Definition: utils.c:188
#define GET_Y_LPARAM(lp)
Definition: windowsx.h:300
#define GET_X_LPARAM(lp)
Definition: windowsx.h:299
int WINAPI GetClipBox(_In_ HDC, _Out_ LPRECT)

Referenced by RealDefWindowProcA(), RealDefWindowProcW(), and RegisterClientPFN().