ReactOS 0.4.16-dev-289-g096a551
Window Class Reference

#include <window.h>

Inheritance diagram for Window:
Collaboration diagram for Window:

Classes

struct  StaticWindowData
 structure for managing critical sections as static class information in struct Window More...
 

Public Types

typedef map< HWND, Window * > WindowMap
 
typedef Window *(* CREATORFUNC) (HWND)
 
typedef Window *(* CREATORFUNC_INFO) (HWND, const void *)
 

Public Member Functions

 Window (HWND hwnd)
 
virtual ~Window ()
 
LRESULT SendParent (UINT nmsg, WPARAM wparam=0, LPARAM lparam=0)
 
LRESULT PostParent (UINT nmsg, WPARAM wparam=0, LPARAM lparam=0)
 
 Window (INT cx, INT cy, BOOL fAutoHide=FALSE)
 
virtual ~Window ()
 
virtual LRESULT CALLBACK WindowProcDx (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
 
void DoAction ()
 

Static Public Member Functions

static HWND Create (CREATORFUNC creator, DWORD dwExStyle, LPCTSTR lpClassName, LPCTSTR lpWindowName, DWORD dwStyle, int x, int y, int w, int h, HWND hwndParent=0, HMENU hMenu=0)
 
static HWND Create (CREATORFUNC_INFO creator, const void *info, DWORD dwExStyle, LPCTSTR lpClassName, LPCTSTR lpWindowName, DWORD dwStyle, int x, int y, int w, int h, HWND hwndParent=0, HMENU hMenu=0)
 
static Windowcreate_mdi_child (const ChildWndInfo &info, const MDICREATESTRUCT &mcs, CREATORFUNC_INFO creator)
 
static LRESULT CALLBACK WindowWndProc (HWND hwnd, UINT nmsg, WPARAM wparam, LPARAM lparam)
 
static INT_PTR CALLBACK DialogProc (HWND hwnd, UINT nmsg, WPARAM wparam, LPARAM lparam)
 
static Windowget_window (HWND hwnd)
 get window controller from window handle
 
template<typename CLASS >
static CLASS * get_window (HWND hwnd)
 
static void register_pretranslate (HWND hwnd)
 
static void unregister_pretranslate (HWND hwnd)
 
static BOOL pretranslate_msg (LPMSG pmsg)
 
static void register_dialog (HWND hwnd)
 
static void unregister_dialog (HWND hwnd)
 
static BOOL dispatch_dialog_msg (LPMSG pmsg)
 
static int MessageLoop ()
 
static void CancelModes ()
 
static BOOL DoRegisterClass (HINSTANCE hInstance)
 
static HWND DoCreateMainWnd (HINSTANCE hInstance, LPCTSTR pszText, INT cx, INT cy, DWORD style=WS_POPUP|WS_THICKFRAME|WS_CLIPCHILDREN, DWORD exstyle=WS_EX_WINDOWEDGE|WS_EX_TOOLWINDOW|WS_EX_TOPMOST, BOOL fAutoHide=FALSE)
 
static INT DoMainLoop ()
 
static WindowGetAppbarData (HWND hwnd)
 
static LRESULT CALLBACK WindowProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
 
static DWORD WINAPI ActionThreadFunc (LPVOID args)
 

Public Attributes

IAccessible IAccessible_iface
 
IOleWindow IOleWindow_iface
 
IEnumVARIANT IEnumVARIANT_iface
 
LONG ref
 

Protected Member Functions

virtual LRESULT Init (LPCREATESTRUCT pcs)
 
virtual LRESULT WndProc (UINT nmsg, WPARAM wparam, LPARAM lparam)
 
virtual int Command (int id, int code)
 
virtual int Notify (int id, NMHDR *pnmh)
 
void OnCommand (HWND hwnd, int id, HWND hwndCtl, UINT codeNotify)
 
void OnPaint (HWND hwnd)
 
void OnRButtonDown (HWND hwnd, BOOL fDoubleClick, int x, int y, UINT keyFlags)
 
void OnKey (HWND hwnd, UINT vk, BOOL fDown, int cRepeat, UINT flags)
 
void OnAppBarCallback (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
 
BOOL AppBar_Register (HWND hwnd)
 
BOOL AppBar_UnRegister (HWND hwnd)
 
BOOL AppBar_SetAutoHide (HWND hwnd, BOOL fHide)
 
BOOL AppBar_AutoHide (HWND hwnd)
 
BOOL AppBar_NoAutoHide (HWND hwnd)
 
BOOL AppBar_SetSide (HWND hwnd, UINT uSide)
 
void AppBar_SetAlwaysOnTop (HWND hwnd, BOOL fOnTop)
 
void AppBar_Hide (HWND hwnd)
 
void AppBar_UnHide (HWND hwnd)
 
void AppBar_SetAutoHideTimer (HWND hwnd)
 
void AppBar_SetAutoUnhideTimer (HWND hwnd)
 
void AppBar_Size (HWND hwnd)
 
void AppBar_QueryPos (HWND hwnd, LPRECT lprc)
 
void AppBar_QuerySetPos (UINT uEdge, LPRECT lprc, PAPPBARDATA pabd, BOOL fMove)
 
void AppBar_PosChanged (PAPPBARDATA pabd)
 
BOOL OnCreate (HWND hwnd, LPCREATESTRUCT lpCreateStruct)
 
void OnActivate (HWND hwnd, UINT state, HWND hwndActDeact, BOOL fMinimized)
 
void OnWindowPosChanged (HWND hwnd, const LPWINDOWPOS lpwpos)
 
void OnSize (HWND hwnd, UINT state, int cx, int cy)
 
void OnMove (HWND hwnd, int x, int y)
 
void OnNCDestroy (HWND hwnd)
 
void OnTimer (HWND hwnd, UINT id)
 
UINT OnNCHitTest (HWND hwnd, int x, int y)
 
void OnLButtonDown (HWND hwnd, BOOL fDoubleClick, int x, int y, UINT keyFlags)
 
void OnMouseMove (HWND hwnd, int x, int y, UINT keyFlags)
 
void OnLButtonUp (HWND hwnd, int x, int y, UINT keyFlags)
 
void GetWorkArea (LPRECT prc) const
 

Static Protected Member Functions

static Windowcreate_controller (HWND hwnd)
 create controller for a new window
 
static StaticWindowDataGetStaticWindowData ()
 
static LRESULT CALLBACK MDICBTHookProc (int code, WPARAM wparam, LPARAM lparam)
 
static LRESULT CALLBACK PropSheetCBTHookProc (int code, WPARAM wparam, LPARAM lparam)
 

Protected Attributes

HWND m_hwnd
 
BOOL m_fAutoHide
 
BOOL m_fOnTop
 
BOOL m_fHiding
 
UINT m_uSide
 
LONG m_cxWidth
 
LONG m_cyHeight
 
LONG m_cxSave
 
LONG m_cySave
 
BOOL m_fAppBarRegd
 
BOOL m_fMoving
 
BOOL m_bDragged
 
POINT m_ptDragOn
 
RECT m_rcAppBar
 
RECT m_rcDrag
 

Static Protected Attributes

static WindowMap s_wnd_map
 
static const voids_new_info = NULL
 
static CREATORFUNC s_window_creator = NULL
 
static HHOOK s_hcbtHook = 0
 
static WindowSet s_pretranslate_windows
 
static WindowSet s_dialogs
 

Detailed Description

Class Window is the base class for several C++ window wrapper classes. Window objects are allocated from the heap. They are automatically freed when the window gets destroyed.

Definition at line 28 of file window.c.

Member Typedef Documentation

◆ CREATORFUNC

typedef Window *(* Window::CREATORFUNC) (HWND)

Definition at line 66 of file window.h.

◆ CREATORFUNC_INFO

typedef Window *(* Window::CREATORFUNC_INFO) (HWND, const void *)

Definition at line 67 of file window.h.

◆ WindowMap

typedef map<HWND,Window*> Window::WindowMap

Definition at line 64 of file window.h.

Constructor & Destructor Documentation

◆ Window() [1/2]

Window::Window ( HWND  hwnd)

Definition at line 71 of file window.cpp.

72 : WindowHandle(hwnd)
73{
74 Lock lock(GetStaticWindowData()._map_crit_sect); // protect access to s_wnd_map
75
76 s_wnd_map[_hwnd] = this;
77}
static StaticWindowData & GetStaticWindowData()
Definition: window.cpp:63
static WindowMap s_wnd_map
Definition: window.h:117
rwlock_t lock
Definition: tcpcore.h:0
_Must_inspect_result_ _In_opt_ PWDF_OBJECT_ATTRIBUTES _Out_ WDFWAITLOCK * Lock
Definition: wdfsync.h:127
_In_ LONG _In_ HWND hwnd
Definition: winddi.h:4023

Referenced by Window().

◆ ~Window() [1/2]

Window::~Window ( )
virtual

Definition at line 79 of file window.cpp.

80{
81 Lock lock(GetStaticWindowData()._map_crit_sect); // protect access to s_wnd_map
82
83 s_wnd_map.erase(_hwnd);
84}
void erase(iterator __pos)
Definition: _map.h:203

Referenced by ~Window().

◆ Window() [2/2]

Window::Window ( INT  cx,
INT  cy,
BOOL  fAutoHide = FALSE 
)
inline

Definition at line 140 of file SHAppBarMessage.cpp.

141 : m_hwnd(NULL)
142 , m_fAutoHide(fAutoHide)
143 , m_cxWidth(cx)
144 , m_cyHeight(cy)
145 {
146 }
#define NULL
Definition: types.h:112
_Out_opt_ int _Out_opt_ int * cy
Definition: commctrl.h:586
_Out_opt_ int * cx
Definition: commctrl.h:585
BOOL m_fAutoHide

◆ ~Window() [2/2]

virtual Window::~Window ( )
inlinevirtual

Definition at line 148 of file SHAppBarMessage.cpp.

149 {
150 }

Member Function Documentation

◆ ActionThreadFunc()

static DWORD WINAPI Window::ActionThreadFunc ( LPVOID  args)
inlinestatic

Definition at line 1109 of file SHAppBarMessage.cpp.

1110 {
1111 Window *this_ = (Window *)args;
1112 this_->DoAction();
1113 return 0;
1114 }
Definition: window.c:28
void DoAction()
Definition: match.c:390

Referenced by OnCommand().

◆ AppBar_AutoHide()

BOOL Window::AppBar_AutoHide ( HWND  hwnd)
inlineprotected

Definition at line 372 of file SHAppBarMessage.cpp.

373 {
374 APPBARDATA abd = { sizeof(abd) };
375 abd.hWnd = hwnd;
376 abd.uEdge = m_uSide;
377
378 HWND hwndAutoHide = (HWND)SHAppBarMessage(ABM_GETAUTOHIDEBAR, &abd);
379 if (hwndAutoHide)
380 return FALSE;
381
382 abd.lParam = TRUE;
384 return FALSE;
385
389
390 RECT rc = m_rcAppBar;
391 switch (m_uSide)
392 {
393 case ABE_TOP:
394 rc.bottom = rc.top + 2;
395 break;
396 case ABE_BOTTOM:
397 rc.top = rc.bottom - 2;
398 break;
399 case ABE_LEFT:
400 rc.right = rc.left + 2;
401 break;
402 case ABE_RIGHT:
403 rc.left = rc.right - 2;
404 break;
405 }
406
407 AppBar_QueryPos(hwnd, &rc);
408 abd.rc = rc;
410 rc = abd.rc;
411
412 m_fHiding = TRUE;
413 SlideWindow(hwnd, &rc);
414
416 return TRUE;
417 }
void SlideWindow(HWND hwnd, LPRECT prc)
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
HANDLE HWND
Definition: compat.h:19
UINT_PTR WINAPI SHAppBarMessage(DWORD msg, PAPPBARDATA data)
Definition: appbar.c:65
unsigned int BOOL
Definition: ntddk_ex.h:94
#define ABE_BOTTOM
Definition: shellapi.h:20
#define ABM_SETAUTOHIDEBAR
Definition: shellapi.h:70
#define ABE_RIGHT
Definition: shellapi.h:19
#define ABE_TOP
Definition: shellapi.h:18
#define ABM_SETPOS
Definition: shellapi.h:65
#define ABE_LEFT
Definition: shellapi.h:17
#define ABM_GETAUTOHIDEBAR
Definition: shellapi.h:69
void AppBar_SetAutoHideTimer(HWND hwnd)
void AppBar_QueryPos(HWND hwnd, LPRECT lprc)
LPARAM lParam
Definition: shellapi.h:222
HWND hWnd
Definition: shellapi.h:218
UINT uEdge
Definition: shellapi.h:220
LONG right
Definition: windef.h:308
LONG bottom
Definition: windef.h:309
LONG top
Definition: windef.h:307
LONG left
Definition: windef.h:306

Referenced by AppBar_SetAutoHide(), and OnLButtonUp().

◆ AppBar_Hide()

void Window::AppBar_Hide ( HWND  hwnd)
inlineprotected

Definition at line 493 of file SHAppBarMessage.cpp.

494 {
495 if (!m_fAutoHide)
496 return;
497
498 RECT rc = m_rcAppBar;
499 switch (m_uSide)
500 {
501 case ABE_TOP:
502 rc.bottom = rc.top + 2;
503 break;
504 case ABE_BOTTOM:
505 rc.top = rc.bottom - 2;
506 break;
507 case ABE_LEFT:
508 rc.right = rc.left + 2;
509 break;
510 case ABE_RIGHT:
511 rc.left = rc.right - 2;
512 break;
513 }
514
515 m_fHiding = TRUE;
516 SlideWindow(hwnd, &rc);
517 }

Referenced by OnActivate(), and OnTimer().

◆ AppBar_NoAutoHide()

BOOL Window::AppBar_NoAutoHide ( HWND  hwnd)
inlineprotected

Definition at line 419 of file SHAppBarMessage.cpp.

420 {
421 APPBARDATA abd = { sizeof(abd) };
422 abd.hWnd = hwnd;
423 abd.uEdge = m_uSide;
424 HWND hwndAutoHide = (HWND)SHAppBarMessage(ABM_GETAUTOHIDEBAR, &abd);
425 if (hwndAutoHide != hwnd)
426 return FALSE;
427
428 abd.lParam = FALSE;
430 return FALSE;
431
436 return TRUE;
437 }
BOOL AppBar_SetSide(HWND hwnd, UINT uSide)

Referenced by AppBar_SetAutoHide().

◆ AppBar_PosChanged()

void Window::AppBar_PosChanged ( PAPPBARDATA  pabd)
inlineprotected

Definition at line 621 of file SHAppBarMessage.cpp.

622 {
623 RECT rc;
625
626 if (m_fAutoHide)
627 {
628 m_rcAppBar = rc;
629 switch (m_uSide)
630 {
631 case ABE_TOP:
633 break;
634 case ABE_BOTTOM:
636 break;
637 case ABE_LEFT:
639 break;
640 case ABE_RIGHT:
642 break;
643 }
644 }
645
646 RECT rcWindow;
647 GetWindowRect(pabd->hWnd, &rcWindow);
648 INT cx = rcWindow.right - rcWindow.left;
649 INT cy = rcWindow.bottom - rcWindow.top;
650 switch (m_uSide)
651 {
652 case ABE_TOP:
653 rc.bottom = rc.top + cy;
654 break;
655 case ABE_BOTTOM:
656 rc.top = rc.bottom - cy;
657 break;
658 case ABE_LEFT:
659 rc.right = rc.left + cx;
660 break;
661 case ABE_RIGHT:
662 rc.left = rc.right - cx;
663 break;
664 }
665 AppBar_QuerySetPos(m_uSide, &rc, pabd, TRUE);
666 }
void AppBar_QuerySetPos(UINT uEdge, LPRECT lprc, PAPPBARDATA pabd, BOOL fMove)
int32_t INT
Definition: typedefs.h:58
#define SM_CYSCREEN
Definition: winuser.h:963
BOOL WINAPI GetWindowRect(_In_ HWND, _Out_ LPRECT)
#define SM_CXSCREEN
Definition: winuser.h:962
int WINAPI GetSystemMetrics(_In_ int)
BOOL WINAPI SetRect(_Out_ LPRECT, _In_ int, _In_ int, _In_ int, _In_ int)

Referenced by OnAppBarCallback().

◆ AppBar_QueryPos()

void Window::AppBar_QueryPos ( HWND  hwnd,
LPRECT  lprc 
)
inlineprotected

Definition at line 556 of file SHAppBarMessage.cpp.

557 {
558 APPBARDATA abd = { sizeof(abd) };
559 abd.hWnd = hwnd;
560 abd.rc = *lprc;
561 abd.uEdge = m_uSide;
562
563 INT cx = 0, cy = 0;
564 if (ABE_LEFT == abd.uEdge || ABE_RIGHT == abd.uEdge)
565 {
566 cx = abd.rc.right - abd.rc.left;
567 abd.rc.top = 0;
569 }
570 else
571 {
572 cy = abd.rc.bottom - abd.rc.top;
573 abd.rc.left = 0;
575 }
576
578
579 switch (abd.uEdge)
580 {
581 case ABE_LEFT:
582 abd.rc.right = abd.rc.left + cx;
583 break;
584 case ABE_RIGHT:
585 abd.rc.left = abd.rc.right - cx;
586 break;
587 case ABE_TOP:
588 abd.rc.bottom = abd.rc.top + cy;
589 break;
590 case ABE_BOTTOM:
591 abd.rc.top = abd.rc.bottom - cy;
592 break;
593 }
594
595 *lprc = abd.rc;
596 }
#define ABM_QUERYPOS
Definition: shellapi.h:64
_In_ int _Inout_ LPRECT lprc
Definition: winuser.h:4469

Referenced by AppBar_AutoHide(), AppBar_QuerySetPos(), and OnMouseMove().

◆ AppBar_QuerySetPos()

void Window::AppBar_QuerySetPos ( UINT  uEdge,
LPRECT  lprc,
PAPPBARDATA  pabd,
BOOL  fMove 
)
inlineprotected

Definition at line 598 of file SHAppBarMessage.cpp.

599 {
600 pabd->rc = *lprc;
601 pabd->uEdge = uEdge;
602 m_uSide = uEdge;
603
604 AppBar_QueryPos(pabd->hWnd, &pabd->rc);
605
607
608 if (fMove)
609 {
610 RECT rc = pabd->rc;
611 MoveWindow(pabd->hWnd, rc.left, rc.top,
612 rc.right - rc.left, rc.bottom - rc.top, TRUE);
613 }
614
615 if (!m_fAutoHide)
616 {
617 m_rcAppBar = pabd->rc;
618 }
619 }
BOOL WINAPI MoveWindow(_In_ HWND, _In_ int, _In_ int, _In_ int, _In_ int, _In_ BOOL)

Referenced by AppBar_PosChanged(), AppBar_SetSide(), AppBar_Size(), and OnLButtonUp().

◆ AppBar_Register()

BOOL Window::AppBar_Register ( HWND  hwnd)
inlineprotected

Definition at line 345 of file SHAppBarMessage.cpp.

346 {
347 APPBARDATA abd = { sizeof(abd) };
348 abd.hWnd = hwnd;
350
352 return m_fAppBarRegd;
353 }
#define APPBAR_CALLBACK
#define BOOL
Definition: nt_native.h:43
#define ABM_NEW
Definition: shellapi.h:62
BOOL m_fAppBarRegd
UINT uCallbackMessage
Definition: shellapi.h:219

Referenced by OnCreate().

◆ AppBar_SetAlwaysOnTop()

void Window::AppBar_SetAlwaysOnTop ( HWND  hwnd,
BOOL  fOnTop 
)
inlineprotected

Definition at line 486 of file SHAppBarMessage.cpp.

487 {
489 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE);
490 m_fOnTop = fOnTop;
491 }
#define SWP_NOACTIVATE
Definition: winuser.h:1245
#define HWND_TOPMOST
Definition: winuser.h:1211
BOOL WINAPI SetWindowPos(_In_ HWND, _In_opt_ HWND, _In_ int, _In_ int, _In_ int, _In_ int, _In_ UINT)
#define SWP_NOMOVE
Definition: winuser.h:1247
#define SWP_NOSIZE
Definition: winuser.h:1248
#define HWND_NOTOPMOST
Definition: winuser.h:1209

◆ AppBar_SetAutoHide()

BOOL Window::AppBar_SetAutoHide ( HWND  hwnd,
BOOL  fHide 
)
inlineprotected

Definition at line 364 of file SHAppBarMessage.cpp.

365 {
366 if (fHide)
367 return AppBar_AutoHide(hwnd);
368 else
369 return AppBar_NoAutoHide(hwnd);
370 }
BOOL AppBar_NoAutoHide(HWND hwnd)
BOOL AppBar_AutoHide(HWND hwnd)

Referenced by AppBar_SetSide(), and OnRButtonDown().

◆ AppBar_SetAutoHideTimer()

void Window::AppBar_SetAutoHideTimer ( HWND  hwnd)
inlineprotected

Definition at line 527 of file SHAppBarMessage.cpp.

528 {
529 if (m_fAutoHide)
530 {
532 }
533 }
#define IDT_AUTOHIDE
UINT_PTR WINAPI SetTimer(_In_opt_ HWND, _In_ UINT_PTR, _In_ UINT, _In_opt_ TIMERPROC)

Referenced by AppBar_AutoHide(), and AppBar_UnHide().

◆ AppBar_SetAutoUnhideTimer()

void Window::AppBar_SetAutoUnhideTimer ( HWND  hwnd)
inlineprotected

Definition at line 535 of file SHAppBarMessage.cpp.

536 {
537 if (m_fAutoHide && m_fHiding)
538 {
540 }
541 }
#define IDT_AUTOUNHIDE

Referenced by OnNCHitTest().

◆ AppBar_SetSide()

BOOL Window::AppBar_SetSide ( HWND  hwnd,
UINT  uSide 
)
inlineprotected

Definition at line 439 of file SHAppBarMessage.cpp.

440 {
441 RECT rc;
443
444 BOOL fAutoHide = FALSE;
445 if (m_fAutoHide)
446 {
447 fAutoHide = m_fAutoHide;
451 }
452
453 switch (uSide)
454 {
455 case ABE_TOP:
456 rc.bottom = rc.top + m_cyHeight;
457 break;
458 case ABE_BOTTOM:
459 rc.top = rc.bottom - m_cyHeight;
460 break;
461 case ABE_LEFT:
462 rc.right = rc.left + m_cxWidth;
463 break;
464 case ABE_RIGHT:
465 rc.left = rc.right - m_cxWidth;
466 break;
467 }
468
469 APPBARDATA abd = { sizeof(abd) };
470 abd.hWnd = hwnd;
471 AppBar_QuerySetPos(uSide, &rc, &abd, TRUE);
472
473 if (fAutoHide)
474 {
476 m_fHiding = TRUE;
477
481 }
482
483 return TRUE;
484 }
BOOL AppBar_SetAutoHide(HWND hwnd, BOOL fHide)
#define SetWindowRedraw(hwnd, fRedraw)
Definition: windowsx.h:534
BOOL WINAPI RedrawWindow(_In_opt_ HWND, _In_opt_ LPCRECT, _In_opt_ HRGN, _In_ UINT)
#define RDW_UPDATENOW
Definition: winuser.h:1223
HWND WINAPI GetDesktopWindow(void)
Definition: window.c:628
#define RDW_ALLCHILDREN
Definition: winuser.h:1224
#define RDW_INVALIDATE
Definition: winuser.h:1217

Referenced by AppBar_NoAutoHide(), DoAction(), and OnCreate().

◆ AppBar_Size()

void Window::AppBar_Size ( HWND  hwnd)
inlineprotected

Definition at line 543 of file SHAppBarMessage.cpp.

544 {
545 if (m_fAppBarRegd)
546 {
547 APPBARDATA abd = { sizeof(abd) };
548 abd.hWnd = hwnd;
549
550 RECT rc;
551 GetWindowRect(hwnd, &rc);
552 AppBar_QuerySetPos(m_uSide, &rc, &abd, TRUE);
553 }
554 }

Referenced by OnMove(), and OnSize().

◆ AppBar_UnHide()

void Window::AppBar_UnHide ( HWND  hwnd)
inlineprotected

Definition at line 519 of file SHAppBarMessage.cpp.

520 {
523
525 }

Referenced by OnActivate(), and OnTimer().

◆ AppBar_UnRegister()

BOOL Window::AppBar_UnRegister ( HWND  hwnd)
inlineprotected

Definition at line 355 of file SHAppBarMessage.cpp.

356 {
357 APPBARDATA abd = { sizeof(abd) };
358 abd.hWnd = hwnd;
359
361 return !m_fAppBarRegd;
362 }
#define ABM_REMOVE
Definition: shellapi.h:63

Referenced by OnNCDestroy().

◆ CancelModes()

void Window::CancelModes ( )
static

Definition at line 295 of file window.cpp.

296{
298}
#define HWND_BROADCAST
Definition: winuser.h:1207
#define WM_CANCELMODE
Definition: winuser.h:1638
#define PostMessage
Definition: winuser.h:5844

Referenced by CancelModes().

◆ Command()

◆ Create() [1/2]

HWND Window::Create ( CREATORFUNC  creator,
DWORD  dwExStyle,
LPCTSTR  lpClassName,
LPCTSTR  lpWindowName,
DWORD  dwStyle,
int  x,
int  y,
int  w,
int  h,
HWND  hwndParent = 0,
HMENU  hMenu = 0 
)
static

Definition at line 87 of file window.cpp.

91{
92 Lock lock(GetStaticWindowData()._create_crit_sect); // protect access to s_window_creator and s_new_info
93
94 s_window_creator = creator;
96
97 return CreateWindowEx(dwExStyle, lpClassName, lpWindowName, dwStyle,
98 x, y, w, h,
99 hwndParent, hMenu, g_Globals._hInstance, 0/*lpParam*/);
100}
static HWND hwndParent
Definition: cryptui.c:300
GLint GLint GLint GLint GLint x
Definition: gl.h:1548
GLint GLint GLint GLint GLint GLint y
Definition: gl.h:1548
GLubyte GLubyte GLubyte GLubyte w
Definition: glext.h:6102
GLfloat GLfloat GLfloat GLfloat h
Definition: glext.h:7723
ExplorerGlobals g_Globals
Definition: explorer.cpp:52
HINSTANCE _hInstance
Definition: globals.h:270
static CREATORFUNC s_window_creator
Definition: window.h:120
static const void * s_new_info
Definition: window.h:119
#define CreateWindowEx
Definition: winuser.h:5767

Referenced by DesktopWindow::Create(), MDIMainFrame::Create(), SDIMainFrame::Create(), DesktopBar::Create(), Create(), StartMenuRoot::Create(), TaskBar::Create(), NotifyArea::Create(), ClockWindow::Create(), and StartMenu::Create().

◆ Create() [2/2]

HWND Window::Create ( CREATORFUNC_INFO  creator,
const void info,
DWORD  dwExStyle,
LPCTSTR  lpClassName,
LPCTSTR  lpWindowName,
DWORD  dwStyle,
int  x,
int  y,
int  w,
int  h,
HWND  hwndParent = 0,
HMENU  hMenu = 0 
)
static

Definition at line 102 of file window.cpp.

106{
107 Lock lock(GetStaticWindowData()._create_crit_sect); // protect access to s_window_creator and s_new_info
108
109 s_window_creator = (CREATORFUNC) creator;
111
112 return CreateWindowEx(dwExStyle, lpClassName, lpWindowName, dwStyle,
113 x, y, w, h,
114 hwndParent, hMenu, g_Globals._hInstance, 0/*lpParam*/);
115}
Window *(* CREATORFUNC)(HWND)
Definition: window.h:66

◆ create_controller()

Window * Window::create_controller ( HWND  hwnd)
staticprotected

create controller for a new window

Definition at line 220 of file window.cpp.

221{
222 if (s_window_creator) { // protect for recursion and create the window object only for the first window
223 Lock lock(GetStaticWindowData()._create_crit_sect); // protect access to s_window_creator and s_new_info
224
225 const void* info = s_new_info;
227
228 CREATORFUNC window_creator = s_window_creator;
230
231 if (info)
232 return CREATORFUNC_INFO(window_creator)(hwnd, info);
233 else
234 return CREATORFUNC(window_creator)(hwnd);
235 }
236
237 return NULL;
238}
Window *(* CREATORFUNC_INFO)(HWND, const void *)
Definition: window.h:67

Referenced by create_controller(), DialogProc(), MDICBTHookProc(), PropSheetCBTHookProc(), and WindowWndProc().

◆ create_mdi_child()

Window * Window::create_mdi_child ( const ChildWndInfo info,
const MDICREATESTRUCT mcs,
CREATORFUNC_INFO  creator 
)
static

Definition at line 118 of file window.cpp.

119{
120 Lock lock(GetStaticWindowData()._create_crit_sect); // protect access to s_window_creator and s_new_info
121
122 s_window_creator = (CREATORFUNC) creator;
123 s_new_info = &info;
124
126
127 HWND hwnd = (HWND) SendMessage(info._hmdiclient, WM_MDICREATE, 0, (LPARAM)&mcs);
128
129 // end hook in case it's not already done
130 if (s_hcbtHook)
132
135
136 if (child && (!hwnd || !child->_hwnd))
137 child = NULL;
138
139 return child;
140}
static struct myctx * mcs
Definition: adnstest.c:53
static HWND child
Definition: cursoricon.c:298
static HHOOK s_hcbtHook
Definition: window.h:133
static LRESULT CALLBACK MDICBTHookProc(int code, WPARAM wparam, LPARAM lparam)
Definition: window.cpp:142
static Window * get_window(HWND hwnd)
get window controller from window handle
Definition: window.cpp:203
DWORD WINAPI GetCurrentThreadId(void)
Definition: thread.c:459
LONG_PTR LPARAM
Definition: windef.h:208
#define WM_MDICREATE
Definition: winuser.h:1815
#define WH_CBT
Definition: winuser.h:35
#define SetWindowsHookEx
Definition: winuser.h:5868
BOOL WINAPI UnhookWindowsHookEx(_In_ HHOOK)
#define SendMessage
Definition: winuser.h:5855

Referenced by ChildWindow::create(), FileChildWindow::create(), and create_mdi_child().

◆ DialogProc()

INT_PTR CALLBACK Window::DialogProc ( HWND  hwnd,
UINT  nmsg,
WPARAM  wparam,
LPARAM  lparam 
)
static

Definition at line 725 of file window.cpp.

726{
727 Window* pThis = get_window(hwnd);
728
729 if (pThis) {
730 switch(nmsg) {
731 case WM_COMMAND:
732 pThis->Command(LOWORD(wparam), HIWORD(wparam));
733 return TRUE; // message has been processed
734
735 case WM_NOTIFY:
736 pThis->Notify(wparam, (NMHDR*)lparam);
737 return TRUE; // message has been processed
738
739 case WM_NOTIFYFORMAT:
740 SetWindowLongPtr(hwnd, DWLP_MSGRESULT, NFR_CURRENT); // set return value NFR_CURRENT
741 return TRUE; // message has been processed
742
743 case WM_NCDESTROY:
744 delete pThis;
745 return TRUE; // message has been processed
746
747 default:
748 return pThis->WndProc(nmsg, wparam, lparam);
749 }
750 } else if (nmsg == WM_INITDIALOG) {
751 pThis = create_controller(hwnd);
752
753 if (pThis)
754 return pThis->Init(NULL);
755 }
756
757 return FALSE; // message has not been processed
758}
@ lparam
Definition: SystemMenu.c:31
@ wparam
Definition: SystemMenu.c:30
#define NFR_CURRENT
Definition: window.h:144
#define LOWORD(l)
Definition: pedump.c:82
#define WM_NOTIFY
Definition: richedit.h:61
virtual LRESULT WndProc(UINT nmsg, WPARAM wparam, LPARAM lparam)
Definition: window.cpp:280
virtual int Command(int id, int code)
Definition: window.cpp:285
static Window * create_controller(HWND hwnd)
create controller for a new window
Definition: window.cpp:220
virtual LRESULT Init(LPCREATESTRUCT pcs)
Definition: window.cpp:241
virtual int Notify(int id, NMHDR *pnmh)
Definition: window.cpp:290
#define SetWindowLongPtr
Definition: treelist.c:70
#define HIWORD(l)
Definition: typedefs.h:247
#define WM_COMMAND
Definition: winuser.h:1743
#define WM_INITDIALOG
Definition: winuser.h:1742
#define WM_NCDESTROY
Definition: winuser.h:1687
#define DWLP_MSGRESULT
Definition: winuser.h:873

Referenced by DialogProc(), and Dialog::DoModal().

◆ dispatch_dialog_msg()

BOOL Window::dispatch_dialog_msg ( LPMSG  pmsg)
static

Definition at line 619 of file window.cpp.

620{
621 for(WindowSet::const_iterator it=Window::s_dialogs.begin(); it!=s_dialogs.end(); ++it)
622 if (IsDialogMessage(*it, pmsg))
623 return TRUE;
624
625 return FALSE;
626}
iterator end()
Definition: _set.h:152
_Rep_type::const_iterator const_iterator
Definition: _set.h:74
static WindowSet s_dialogs
Definition: window.h:138
#define IsDialogMessage
Definition: winuser.h:5821
static clock_t begin
Definition: xmllint.c:458

Referenced by dispatch_dialog_msg(), MessageLoop(), and StartMenuRoot::TrackStartmenu().

◆ DoAction()

void Window::DoAction ( )
inline

Definition at line 971 of file SHAppBarMessage.cpp.

972 {
973#define INTERVAL 250
974 POINT pt;
975 RECT rc1, rc2, rcWork;
977
978 GetWindowRect(s_hwnd1, &rc1);
980 GetWorkArea(&rcWork);
984 ok_long(rc1.bottom, s_rcWorkArea.top + 80);
986 ok_long(rc2.top, s_rcWorkArea.top + 80);
988 ok_long(rc2.bottom, s_rcWorkArea.top + 110);
989 ok_long(rcWork.left, s_rcWorkArea.left);
990 ok_long(rcWork.top, s_rcWorkArea.top + 110);
995
997 GetWorkArea(&rcWork);
1000 ok_long(rc2.right, s_rcWorkArea.right);
1001 ok_long(rc2.bottom, s_rcWorkArea.top + 30);
1002 ok_long(rcWork.left, s_rcWorkArea.left);
1003 ok_long(rcWork.top, s_rcWorkArea.top + 30);
1007 Sleep(INTERVAL);
1008
1010 GetWorkArea(&rcWork);
1013 ok_long(rc2.right, s_rcWorkArea.left + 30);
1014 ok_long(rcWork.left, s_rcWorkArea.left + 30);
1015 ok_long(rcWork.top, s_rcWorkArea.top);
1019 Sleep(INTERVAL);
1020
1022 GetWorkArea(&rcWork);
1025 ok_long(rc2.right, s_rcWorkArea.right);
1026 ok_long(rc2.bottom, s_rcWorkArea.top + 30);
1027 ok_long(rcWork.left, s_rcWorkArea.left);
1028 ok_long(rcWork.top, s_rcWorkArea.top + 30);
1032 Sleep(INTERVAL);
1033
1035 GetWorkArea(&rcWork);
1036 ok_long(rc2.left, s_rcWorkArea.right - 30);
1038 ok_long(rc2.right, s_rcWorkArea.right);
1039 ok_long(rcWork.left, s_rcWorkArea.left);
1040 ok_long(rcWork.top, s_rcWorkArea.top);
1041 ok_long(rcWork.right, s_rcWorkArea.right - 30);
1043 Sleep(INTERVAL);
1044
1046 pt.x = (rc2.left + rc2.right) / 2;
1047 pt.y = (rc2.top + rc2.bottom) / 2;
1048 MOVE(pt.x, pt.y);
1049 LEFT_DOWN();
1050 MOVE(pt.x + 64, pt.y + 64);
1051 Sleep(INTERVAL);
1052
1053 pt.x = s_rcWorkArea.left + 80;
1055 MOVE(pt.x, pt.y);
1056 LEFT_UP();
1057 Sleep(INTERVAL);
1058
1060 GetWorkArea(&rcWork);
1063 ok_long(rc2.right, s_rcWorkArea.left + 30);
1064 ok_long(rcWork.left, s_rcWorkArea.left + 30);
1065 ok_long(rcWork.top, s_rcWorkArea.top);
1068 Sleep(INTERVAL);
1069
1071 pt.x = (rc2.left + rc2.right) / 2;
1072 pt.y = (rc2.top + rc2.bottom) / 2;
1073 MOVE(pt.x, pt.y);
1074 LEFT_DOWN();
1075 MOVE(pt.x + 64, pt.y + 64);
1076 Sleep(INTERVAL);
1077
1078 pt.x = s_rcWorkArea.right - 80;
1080 MOVE(pt.x, pt.y);
1081 LEFT_UP();
1082 Sleep(INTERVAL);
1083
1085 GetWorkArea(&rcWork);
1086 ok_long(rc2.left, s_rcWorkArea.right - 30);
1088 ok_long(rc2.right, s_rcWorkArea.right);
1089 ok_long(rcWork.left, s_rcWorkArea.left);
1090 ok_long(rcWork.top, s_rcWorkArea.top);
1091 ok_long(rcWork.right, s_rcWorkArea.right - 30);
1093 Sleep(INTERVAL);
1094
1096 Sleep(INTERVAL);
1097
1098 GetWorkArea(&rcWork);
1099 ok_long(rcWork.left, s_rcWorkArea.left);
1100 ok_long(rcWork.top, s_rcWorkArea.top);
1103
1104 PostMessage(s_hwnd2, WM_QUIT, 0, 0);
1105 PostThreadMessage(dwTID, WM_QUIT, 0, 0);
1106#undef INTERVAL
1107 }
#define MOVE(x, y)
#define LEFT_UP()
#define LEFT_DOWN()
static RECT s_rcWorkArea
#define INTERVAL
static HWND s_hwnd2
static HWND s_hwnd1
#define ok_long(expression, result)
Definition: atltest.h:133
static const WCHAR rc2[]
Definition: oid.c:1216
#define pt(x, y)
Definition: drawing.c:79
unsigned long DWORD
Definition: ntddk_ex.h:95
void GetWorkArea(LPRECT prc) const
VOID WINAPI DECLSPEC_HOTPATCH Sleep(IN DWORD dwMilliseconds)
Definition: synch.c:790
DWORD WINAPI GetWindowThreadProcessId(HWND hWnd, PDWORD lpdwProcessId)
#define WM_CLOSE
Definition: winuser.h:1624
#define WM_QUIT
Definition: winuser.h:1626
#define PostThreadMessage
Definition: winuser.h:5845

Referenced by ActionThreadFunc().

◆ DoCreateMainWnd()

static HWND Window::DoCreateMainWnd ( HINSTANCE  hInstance,
LPCTSTR  pszText,
INT  cx,
INT  cy,
DWORD  style = WS_POPUP | WS_THICKFRAME | WS_CLIPCHILDREN,
DWORD  exstyle = WS_EX_WINDOWEDGE | WS_EX_TOOLWINDOW | WS_EX_TOPMOST,
BOOL  fAutoHide = FALSE 
)
inlinestatic

Definition at line 165 of file SHAppBarMessage.cpp.

169 {
170 Window *this_ = new Window(cx, cy, fAutoHide);
171 HWND hwnd = CreateWindowEx(exstyle, s_szName, pszText, style,
173 NULL, NULL, hInstance, this_);
176 return hwnd;
177 }
static const TCHAR s_szName[]
Arabic default style
Definition: afstyles.h:94
HINSTANCE hInstance
Definition: charmap.c:19
#define SW_SHOWNORMAL
Definition: winuser.h:773
BOOL WINAPI ShowWindow(_In_ HWND, _In_ int)
BOOL WINAPI UpdateWindow(_In_ HWND)
#define CW_USEDEFAULT
Definition: winuser.h:225

◆ DoMainLoop()

static INT Window::DoMainLoop ( )
inlinestatic

Definition at line 179 of file SHAppBarMessage.cpp.

180 {
181 MSG msg;
182 while (GetMessage(&msg, NULL, 0, 0))
183 {
186 }
187 return (INT)msg.wParam;
188 }
#define msg(x)
Definition: auth_time.c:54
TW_UINT32 TW_UINT16 TW_UINT16 MSG
Definition: twain.h:1829
BOOL WINAPI TranslateMessage(_In_ const MSG *)
#define GetMessage
Definition: winuser.h:5802
#define DispatchMessage
Definition: winuser.h:5777

◆ DoRegisterClass()

static BOOL Window::DoRegisterClass ( HINSTANCE  hInstance)
inlinestatic

Definition at line 152 of file SHAppBarMessage.cpp.

153 {
154 WNDCLASS wc;
155 ZeroMemory(&wc, sizeof(wc));
157 wc.hInstance = hInstance;
160 wc.hbrBackground = (HBRUSH)(COLOR_3DFACE + 1);
162 return !!RegisterClass(&wc);
163 }
static LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
HBRUSH hbrBackground
Definition: winuser.h:3173
HICON hIcon
Definition: winuser.h:3171
HINSTANCE hInstance
Definition: winuser.h:3170
HCURSOR hCursor
Definition: winuser.h:3172
LPCSTR lpszClassName
Definition: winuser.h:3175
WNDPROC lpfnWndProc
Definition: winuser.h:3167
#define ZeroMemory
Definition: winbase.h:1737
#define IDC_ARROW
Definition: winuser.h:687
#define IDI_APPLICATION
Definition: winuser.h:704
#define LoadIcon
Definition: winuser.h:5825
#define LoadCursor
Definition: winuser.h:5824
#define RegisterClass
Definition: winuser.h:5848
#define COLOR_3DFACE
Definition: winuser.h:932

◆ get_window() [1/2]

Window * Window::get_window ( HWND  hwnd)
static

get window controller from window handle

Definition at line 203 of file window.cpp.

204{
205 {
206 Lock lock(GetStaticWindowData()._map_crit_sect); // protect access to s_wnd_map
207
209
210 if (found!=s_wnd_map.end())
211 return found->second;
212 }
213
214 return NULL;
215}
_STLP_TEMPLATE_FOR_CONT_EXT iterator find(const _KT &__x)
Definition: _map.h:210
iterator end()
Definition: _map.h:165
_Rep_type::const_iterator const_iterator
Definition: _map.h:86

Referenced by create_mdi_child(), DialogProc(), get_window(), MDICBTHookProc(), PropSheetCBTHookProc(), and WindowWndProc().

◆ get_window() [2/2]

template<typename CLASS >
static CLASS * Window::get_window ( HWND  hwnd)
inlinestatic

Definition at line 87 of file window.h.

87{return static_cast<CLASS*>(get_window(hwnd));}

Referenced by get_window().

◆ GetAppbarData()

static Window * Window::GetAppbarData ( HWND  hwnd)
inlinestatic

Definition at line 190 of file SHAppBarMessage.cpp.

191 {
193 }
#define GetWindowLongPtr
Definition: treelist.c:73
#define GWLP_USERDATA
Definition: treelist.c:63

Referenced by WindowProc().

◆ GetStaticWindowData()

Window::StaticWindowData & Window::GetStaticWindowData ( )
staticprotected

Definition at line 63 of file window.cpp.

64{
65 static StaticWindowData s_initialized_data;
66
67 return s_initialized_data;
68}

Referenced by Create(), create_controller(), create_mdi_child(), Dialog::DoModal(), get_window(), GetStaticWindowData(), Window(), and ~Window().

◆ GetWorkArea()

void Window::GetWorkArea ( LPRECT  prc) const
inlineprotected

Definition at line 965 of file SHAppBarMessage.cpp.

966 {
967 SystemParametersInfoW(SPI_GETWORKAREA, 0, prc, 0);
968 }
_Out_ LPRECT prc
Definition: ntgdi.h:1658
BOOL WINAPI SystemParametersInfoW(_In_ UINT uiAction, _In_ UINT uiParam, _Inout_opt_ PVOID pvParam, _In_ UINT fWinIni)

Referenced by DoAction().

◆ Init()

◆ MDICBTHookProc()

LRESULT CALLBACK Window::MDICBTHookProc ( int  code,
WPARAM  wparam,
LPARAM  lparam 
)
staticprotected

Definition at line 142 of file window.cpp.

143{
144 if (code == HCBT_CREATEWND) {
145 UnhookWindowsHookEx(s_hcbtHook); // use the hook only for the first created window
146 s_hcbtHook = 0;
147
148 HWND hwnd = (HWND)wparam;
149
150 // create Window controller and associate it with the window handle
152
153 if (!child)
155 }
156
158}
Definition: inflate.c:139
#define HCBT_CREATEWND
Definition: winuser.h:58
LRESULT WINAPI CallNextHookEx(_In_opt_ HHOOK, _In_ int, _In_ WPARAM, _In_ LPARAM)

Referenced by create_mdi_child(), and MDICBTHookProc().

◆ MessageLoop()

int Window::MessageLoop ( )
static

Definition at line 629 of file window.cpp.

630{
631 MSG msg;
632
633 while(GetMessage(&msg, 0, 0, 0)) {
634 try {
635 if (pretranslate_msg(&msg))
636 continue;
637
639 continue;
640
642
643 try {
645 } catch(COMException& e) {
646 HandleException(e, 0);
647 }
648 } catch(COMException& e) {
649 HandleException(e, 0);
650 }
651 }
652
653 return msg.wParam;
654}
#define e
Definition: ke_i.h:82
void HandleException(COMException &e, HWND hwnd)
Exception Handler for COM exceptions.
Exception with context information.
Definition: shellclasses.h:114
static BOOL pretranslate_msg(LPMSG pmsg)
Definition: window.cpp:589
static BOOL dispatch_dialog_msg(LPMSG pmsg)
Definition: window.cpp:619

Referenced by MessageLoop().

◆ Notify()

◆ OnActivate()

void Window::OnActivate ( HWND  hwnd,
UINT  state,
HWND  hwndActDeact,
BOOL  fMinimized 
)
inlineprotected

Definition at line 686 of file SHAppBarMessage.cpp.

687 {
688 APPBARDATA abd = { sizeof(abd) };
689 abd.hWnd = hwnd;
691
692 switch (state)
693 {
694 case WA_ACTIVE:
695 case WA_CLICKACTIVE:
698 break;
699
700 case WA_INACTIVE:
702 break;
703 }
704 }
static int state
Definition: maze.c:121
#define ABM_ACTIVATE
Definition: shellapi.h:68
void AppBar_UnHide(HWND hwnd)
void AppBar_Hide(HWND hwnd)
#define WA_INACTIVE
Definition: winuser.h:2625
#define WA_ACTIVE
Definition: winuser.h:2626
#define WA_CLICKACTIVE
Definition: winuser.h:2627
BOOL WINAPI KillTimer(_In_opt_ HWND, _In_ UINT_PTR)

Referenced by WindowProcDx().

◆ OnAppBarCallback()

void Window::OnAppBarCallback ( HWND  hwnd,
UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam 
)
inlineprotected

Definition at line 311 of file SHAppBarMessage.cpp.

312 {
313 static HWND s_hwndZOrder = NULL;
314
315 switch (wParam)
316 {
317 case ABN_STATECHANGE:
318 break;
319
321 if (lParam)
322 {
323 s_hwndZOrder = GetWindow(hwnd, GW_HWNDPREV);
324 SetWindowPos(hwnd, HWND_BOTTOM, 0, 0, 0, 0,
326 }
327 else
328 {
329 SetWindowPos(hwnd, m_fOnTop ? HWND_TOPMOST : s_hwndZOrder,
330 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE);
331 s_hwndZOrder = NULL;
332 }
333 break;
334
335 case ABN_POSCHANGED:
336 {
337 APPBARDATA abd = { sizeof(abd) };
338 abd.hWnd = hwnd;
339 AppBar_PosChanged(&abd);
340 }
341 break;
342 }
343 }
WPARAM wParam
Definition: combotst.c:138
LPARAM lParam
Definition: combotst.c:139
#define ABN_FULLSCREENAPP
Definition: shellapi.h:74
#define ABN_STATECHANGE
Definition: shellapi.h:72
#define ABN_POSCHANGED
Definition: shellapi.h:73
void AppBar_PosChanged(PAPPBARDATA pabd)
HWND WINAPI GetWindow(_In_ HWND, _In_ UINT)
#define GW_HWNDPREV
Definition: winuser.h:765
#define HWND_BOTTOM
Definition: winuser.h:1208

Referenced by WindowProcDx().

◆ OnCommand()

void Window::OnCommand ( HWND  hwnd,
int  id,
HWND  hwndCtl,
UINT  codeNotify 
)
inlineprotected

Definition at line 261 of file SHAppBarMessage.cpp.

262 {
264 switch (id)
265 {
266 case ID_ACTION:
268 break;
269 case ID_ACTION + 1:
271 if (!hThread)
272 {
273 skip("failed to create thread\n");
276 return;
277 }
279 }
280 }
#define ID_ACTION
#define skip(...)
Definition: atltest.h:64
#define CloseHandle
Definition: compat.h:739
HANDLE WINAPI DECLSPEC_HOTPATCH CreateThread(IN LPSECURITY_ATTRIBUTES lpThreadAttributes, IN DWORD dwStackSize, IN LPTHREAD_START_ROUTINE lpStartAddress, IN LPVOID lpParameter, IN DWORD dwCreationFlags, OUT LPDWORD lpThreadId)
Definition: thread.c:137
HANDLE hThread
Definition: wizard.c:28
static DWORD WINAPI ActionThreadFunc(LPVOID args)

Referenced by WindowProcDx().

◆ OnCreate()

BOOL Window::OnCreate ( HWND  hwnd,
LPCREATESTRUCT  lpCreateStruct 
)
inlineprotected

Definition at line 668 of file SHAppBarMessage.cpp.

669 {
670 m_hwnd = hwnd;
671 m_fOnTop = TRUE;
673
679
682
683 return TRUE;
684 }
BOOL AppBar_Register(HWND hwnd)

Referenced by WindowProcDx().

◆ OnKey()

void Window::OnKey ( HWND  hwnd,
UINT  vk,
BOOL  fDown,
int  cRepeat,
UINT  flags 
)
inlineprotected

Definition at line 305 of file SHAppBarMessage.cpp.

306 {
307 if (vk == VK_ESCAPE)
309 }
WORD vk
Definition: input.c:77
#define VK_ESCAPE
Definition: winuser.h:2217
BOOL WINAPI DestroyWindow(_In_ HWND)

Referenced by WindowProcDx().

◆ OnLButtonDown()

void Window::OnLButtonDown ( HWND  hwnd,
BOOL  fDoubleClick,
int  x,
int  y,
UINT  keyFlags 
)
inlineprotected

Definition at line 824 of file SHAppBarMessage.cpp.

825 {
826 m_fMoving = TRUE;
830 }
POINT m_ptDragOn
HWND WINAPI SetCapture(_In_ HWND hWnd)
BOOL WINAPI GetCursorPos(_Out_ LPPOINT)
Definition: cursoricon.c:2722

Referenced by WindowProcDx().

◆ OnLButtonUp()

void Window::OnLButtonUp ( HWND  hwnd,
int  x,
int  y,
UINT  keyFlags 
)
inlineprotected

Definition at line 918 of file SHAppBarMessage.cpp.

919 {
920 if (!m_fMoving)
921 return;
922
923 OnMouseMove(hwnd, x, y, keyFlags);
924
926
928
929 if (m_fAutoHide)
930 {
931 switch (m_uSide)
932 {
933 case ABE_TOP:
935 break;
936 case ABE_BOTTOM:
938 break;
939 case ABE_LEFT:
941 break;
942 case ABE_RIGHT:
944 break;
945 }
946 }
947
948 if (m_bDragged)
949 {
950 if (m_fAutoHide)
951 {
953 }
954 else
955 {
956 APPBARDATA abd = { sizeof(abd) };
957 abd.hWnd = hwnd;
959 }
960 }
961
963 }
void OnMouseMove(HWND hwnd, int x, int y, UINT keyFlags)
BOOL WINAPI ReleaseCapture(void)
Definition: message.c:2890

Referenced by WindowProcDx().

◆ OnMouseMove()

void Window::OnMouseMove ( HWND  hwnd,
int  x,
int  y,
UINT  keyFlags 
)
inlineprotected

Definition at line 832 of file SHAppBarMessage.cpp.

833 {
834 if (!m_fMoving)
835 return;
836
837 POINT pt;
841 {
843 }
844
845 INT cxScreen = GetSystemMetrics(SM_CXSCREEN);
846 INT cyScreen = GetSystemMetrics(SM_CYSCREEN);
847
848 DWORD dx, dy;
849 UINT ix, iy;
850 if (pt.x < cxScreen / 2)
851 {
852 dx = pt.x;
853 ix = ABE_LEFT;
854 }
855 else
856 {
857 dx = cxScreen - pt.x;
858 ix = ABE_RIGHT;
859 }
860
861 if (pt.y < cyScreen / 2)
862 {
863 dy = pt.y;
864 iy = ABE_TOP;
865 }
866 else
867 {
868 dy = cyScreen - pt.y;
869 iy = ABE_BOTTOM;
870 }
871
872 if (cxScreen * dy > cyScreen * dx)
873 {
874 m_rcDrag.top = 0;
875 m_rcDrag.bottom = cyScreen;
876 if (ix == ABE_LEFT)
877 {
879 m_rcDrag.left = 0;
881 }
882 else
883 {
885 m_rcDrag.right = cxScreen;
887 }
888 }
889 else
890 {
891 m_rcDrag.left = 0;
892 m_rcDrag.right = cxScreen;
893 if (iy == ABE_TOP)
894 {
896 m_rcDrag.top = 0;
898 }
899 else
900 {
902 m_rcDrag.bottom = cyScreen;
904 }
905 }
906
908
909 if (m_bDragged)
910 {
914 TRUE);
915 }
916 }
_Check_return_ long __cdecl labs(_In_ long x)
GLint dy
Definition: linetemp.h:97
GLint dx
Definition: linetemp.h:97
unsigned int UINT
Definition: ndis.h:50
long y
Definition: polytest.cpp:48
long x
Definition: polytest.cpp:48
int iy
Definition: tritemp.h:491
#define SM_CXDRAG
Definition: winuser.h:1031
#define SM_CYDRAG
Definition: winuser.h:1032

Referenced by OnLButtonUp(), and WindowProcDx().

◆ OnMove()

void Window::OnMove ( HWND  hwnd,
int  x,
int  y 
)
inlineprotected

Definition at line 743 of file SHAppBarMessage.cpp.

744 {
745 if (m_fMoving || m_fAutoHide)
746 return;
747
748 if (!m_fHiding)
750 }
void AppBar_Size(HWND hwnd)

Referenced by WindowProcDx().

◆ OnNCDestroy()

void Window::OnNCDestroy ( HWND  hwnd)
inlineprotected

Definition at line 752 of file SHAppBarMessage.cpp.

753 {
755
756 m_hwnd = NULL;
758 delete this;
759 }
BOOL AppBar_UnRegister(HWND hwnd)

Referenced by WindowProcDx().

◆ OnNCHitTest()

UINT Window::OnNCHitTest ( HWND  hwnd,
int  x,
int  y 
)
inlineprotected

Definition at line 803 of file SHAppBarMessage.cpp.

804 {
806
808
809 if (m_uSide == ABE_TOP && uHitTest == HTBOTTOM)
810 return HTBOTTOM;
811
812 if (m_uSide == ABE_BOTTOM && uHitTest == HTTOP)
813 return HTTOP;
814
815 if (m_uSide == ABE_LEFT && uHitTest == HTRIGHT)
816 return HTRIGHT;
817
818 if (m_uSide == ABE_RIGHT && uHitTest == HTLEFT)
819 return HTLEFT;
820
821 return HTCLIENT;
822 }
#define DefWindowProc
Definition: ros2win.h:31
void AppBar_SetAutoUnhideTimer(HWND hwnd)
#define FORWARD_WM_NCHITTEST(hwnd, x, y, fn)
Definition: windowsx.h:191
#define HTBOTTOM
Definition: winuser.h:2496
#define HTRIGHT
Definition: winuser.h:2492
#define HTCLIENT
Definition: winuser.h:2478
#define HTTOP
Definition: winuser.h:2493
#define HTLEFT
Definition: winuser.h:2490

Referenced by WindowProcDx().

◆ OnPaint()

void Window::OnPaint ( HWND  hwnd)
inlineprotected

Definition at line 282 of file SHAppBarMessage.cpp.

283 {
284 PAINTSTRUCT ps;
285
286 TCHAR szText[64];
287 GetWindowText(hwnd, szText, 64);
288
289 RECT rc;
290 GetClientRect(hwnd, &rc);
291
292 if (HDC hdc = BeginPaint(hwnd, &ps))
293 {
294 DrawText(hdc, szText, -1, &rc, DT_SINGLELINE | DT_CENTER | DT_VCENTER);
295 EndPaint(hwnd, &ps);
296 }
297 }
HDC hdc
Definition: main.c:9
static HDC
Definition: imagelist.c:88
#define DT_CENTER
Definition: winuser.h:527
#define DT_SINGLELINE
Definition: winuser.h:540
#define DrawText
Definition: winuser.h:5783
BOOL WINAPI GetClientRect(_In_ HWND, _Out_ LPRECT)
BOOL WINAPI EndPaint(_In_ HWND, _In_ const PAINTSTRUCT *)
#define GetWindowText
Definition: winuser.h:5810
#define DT_VCENTER
Definition: winuser.h:543
HDC WINAPI BeginPaint(_In_ HWND, _Out_ LPPAINTSTRUCT)
char TCHAR
Definition: xmlstorage.h:189

Referenced by WindowProcDx().

◆ OnRButtonDown()

void Window::OnRButtonDown ( HWND  hwnd,
BOOL  fDoubleClick,
int  x,
int  y,
UINT  keyFlags 
)
inlineprotected

Definition at line 299 of file SHAppBarMessage.cpp.

Referenced by WindowProcDx().

◆ OnSize()

void Window::OnSize ( HWND  hwnd,
UINT  state,
int  cx,
int  cy 
)
inlineprotected

Definition at line 715 of file SHAppBarMessage.cpp.

716 {
717 RECT rcWindow;
718
719 if (m_fMoving || (m_fAutoHide && m_fHiding))
720 return;
721
722 if (!m_fHiding)
723 {
724 if (!m_fAutoHide)
726
727 GetWindowRect(hwnd, &rcWindow);
728 m_rcAppBar = rcWindow;
729
730 if (m_uSide == ABE_TOP || m_uSide == ABE_BOTTOM)
731 {
732 m_cyHeight = m_cySave = rcWindow.bottom - rcWindow.top;
733 }
734 else
735 {
736 m_cxWidth = m_cxSave = rcWindow.right - rcWindow.left;
737 }
738 }
739
741 }
BOOL WINAPI InvalidateRect(_In_opt_ HWND, _In_opt_ LPCRECT, _In_ BOOL)

Referenced by WindowProcDx().

◆ OnTimer()

void Window::OnTimer ( HWND  hwnd,
UINT  id 
)
inlineprotected

Definition at line 761 of file SHAppBarMessage.cpp.

762 {
763 POINT pt;
764 RECT rc;
765 HWND hwndActive;
766
767 switch (id)
768 {
769 case IDT_AUTOHIDE:
770 if (m_fAutoHide && !m_fHiding && !m_fMoving)
771 {
773 GetWindowRect(hwnd, &rc);
774 hwndActive = GetForegroundWindow();
775
776 if (!PtInRect(&rc, pt) &&
777 hwndActive != hwnd &&
778 hwndActive != NULL &&
779 GetWindowOwner(hwndActive) != hwnd)
780 {
781 KillTimer(hwnd, id);
783 }
784 }
785 break;
786
787 case IDT_AUTOUNHIDE:
788 KillTimer(hwnd, id);
789
790 if (m_fAutoHide && m_fHiding)
791 {
793 GetWindowRect(hwnd, &rc);
794 if (PtInRect(&rc, pt))
795 {
797 }
798 }
799 break;
800 }
801 }
#define GetWindowOwner(hwnd)
Definition: windowsx.h:314
HWND WINAPI GetForegroundWindow(void)
Definition: ntwrapper.h:392
BOOL WINAPI PtInRect(_In_ LPCRECT, _In_ POINT)

Referenced by WindowProcDx().

◆ OnWindowPosChanged()

void Window::OnWindowPosChanged ( HWND  hwnd,
const LPWINDOWPOS  lpwpos 
)
inlineprotected

Definition at line 706 of file SHAppBarMessage.cpp.

707 {
708 APPBARDATA abd = { sizeof(abd) };
709 abd.hWnd = hwnd;
711
713 }
#define ABM_WINDOWPOSCHANGED
Definition: shellapi.h:71
#define FORWARD_WM_WINDOWPOSCHANGED(hwnd, lpwpos, fn)
Definition: windowsx.h:240

Referenced by WindowProcDx().

◆ PostParent()

LRESULT Window::PostParent ( UINT  nmsg,
WPARAM  wparam = 0,
LPARAM  lparam = 0 
)

Definition at line 667 of file window.cpp.

668{
669 HWND parent = GetParent(_hwnd);
670
671 if (!parent)
672 return 0;
673
674 return PostMessage(parent, nmsg, wparam, lparam);
675}
r parent
Definition: btrfs.c:3010
HWND WINAPI GetParent(_In_ HWND)

Referenced by PostParent(), and StartMenuButton::WndProc().

◆ pretranslate_msg()

BOOL Window::pretranslate_msg ( LPMSG  pmsg)
static

Definition at line 589 of file window.cpp.

590{
591 if ((pmsg->message != WM_KEYDOWN) &&
592 (pmsg->message != WM_SYSKEYDOWN) &&
593 (pmsg->message != WM_SYSCHAR) &&
594 (pmsg->message != WM_CHAR))
595 {
596 return FALSE;
597 }
598
599 for(WindowSet::const_iterator it=Window::s_pretranslate_windows.begin(); it!=s_pretranslate_windows.end(); ++it)
600 if (SendMessage(*it, PM_TRANSLATE_MSG, 0, (LPARAM)pmsg))
601 return TRUE;
602
603 return FALSE;
604}
#define PM_TRANSLATE_MSG
Definition: window.h:266
static WindowSet s_pretranslate_windows
Definition: window.h:137
UINT message
Definition: winuser.h:3118
#define WM_SYSCHAR
Definition: winuser.h:1724
#define WM_CHAR
Definition: winuser.h:1720
#define WM_KEYDOWN
Definition: winuser.h:1718
#define WM_SYSKEYDOWN
Definition: winuser.h:1722

Referenced by MessageLoop(), pretranslate_msg(), and StartMenuRoot::TrackStartmenu().

◆ PropSheetCBTHookProc()

LRESULT CALLBACK Window::PropSheetCBTHookProc ( int  code,
WPARAM  wparam,
LPARAM  lparam 
)
staticprotected

Definition at line 185 of file window.cpp.

186{
187 if (code == HCBT_CREATEWND) {
188 HWND hwnd = (HWND)wparam;
189
190 // create Window controller and associate it with the window handle
192
193 if (!child)
195 }
196
198}

Referenced by PropSheetCBTHookProc().

◆ register_dialog()

void Window::register_dialog ( HWND  hwnd)
static

Definition at line 609 of file window.cpp.

610{
612}
pair< iterator, bool > insert(const value_type &__x)
Definition: _set.h:168

Referenced by Dialog::Dialog(), DialogWindow::DialogWindow(), and register_dialog().

◆ register_pretranslate()

void Window::register_pretranslate ( HWND  hwnd)
static

◆ SendParent()

LRESULT Window::SendParent ( UINT  nmsg,
WPARAM  wparam = 0,
LPARAM  lparam = 0 
)

Definition at line 657 of file window.cpp.

658{
659 HWND parent = GetParent(_hwnd);
660
661 if (!parent)
662 return 0;
663
664 return SendMessage(parent, nmsg, wparam, lparam);
665}

Referenced by StartMenu::CloseStartMenu(), NotifyArea::Command(), SendParent(), StartMenuButton::WndProc(), StartMenu::WndProc(), EditController::WndProc(), and StartMenu::~StartMenu().

◆ unregister_dialog()

void Window::unregister_dialog ( HWND  hwnd)
static

Definition at line 614 of file window.cpp.

615{
617}
void erase(iterator __pos)
Definition: _set.h:182

Referenced by unregister_dialog(), Dialog::~Dialog(), and DialogWindow::~DialogWindow().

◆ unregister_pretranslate()

void Window::unregister_pretranslate ( HWND  hwnd)
static

◆ WindowProc()

static LRESULT CALLBACK Window::WindowProc ( HWND  hwnd,
UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam 
)
inlinestatic

Definition at line 230 of file SHAppBarMessage.cpp.

231 {
232 Window *this_ = GetAppbarData(hwnd);
233 if (uMsg == WM_CREATE)
234 {
236 this_ = (Window *)pCS->lpCreateParams;
238 }
239 if (this_)
240 return this_->WindowProcDx(hwnd, uMsg, wParam, lParam);
241 return DefWindowProc(hwnd, uMsg, wParam, lParam);
242 }
__int3264 LONG_PTR
Definition: mstsclib_h.h:276
static Window * GetAppbarData(HWND hwnd)
virtual LRESULT CALLBACK WindowProcDx(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
LPVOID lpCreateParams
Definition: winuser.h:2943
CREATESTRUCTA * LPCREATESTRUCT
Definition: winuser.h:5738
#define WM_CREATE
Definition: winuser.h:1611

Referenced by DoRegisterClass().

◆ WindowProcDx()

virtual LRESULT CALLBACK Window::WindowProcDx ( HWND  hwnd,
UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam 
)
inlinevirtual

Definition at line 196 of file SHAppBarMessage.cpp.

197 {
198#ifdef VERBOSE
199 MD_msgdump(hwnd, uMsg, wParam, lParam);
200#endif
201 switch (uMsg)
202 {
218
219 case APPBAR_CALLBACK:
221 break;
222
223 default:
224 return DefWindowProc(hwnd, uMsg, wParam, lParam);
225 }
226 return 0;
227 }
static __inline LRESULT MSGDUMP_API MD_msgdump(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: msgdump.h:4655
void OnSize(HWND hwnd, UINT state, int cx, int cy)
void OnTimer(HWND hwnd, UINT id)
UINT OnNCHitTest(HWND hwnd, int x, int y)
void OnMove(HWND hwnd, int x, int y)
BOOL OnCreate(HWND hwnd, LPCREATESTRUCT lpCreateStruct)
void OnLButtonUp(HWND hwnd, int x, int y, UINT keyFlags)
void OnAppBarCallback(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
void OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify)
void OnNCDestroy(HWND hwnd)
void OnRButtonDown(HWND hwnd, BOOL fDoubleClick, int x, int y, UINT keyFlags)
void OnWindowPosChanged(HWND hwnd, const LPWINDOWPOS lpwpos)
void OnPaint(HWND hwnd)
void OnActivate(HWND hwnd, UINT state, HWND hwndActDeact, BOOL fMinimized)
void OnKey(HWND hwnd, UINT vk, BOOL fDown, int cRepeat, UINT flags)
void OnLButtonDown(HWND hwnd, BOOL fDoubleClick, int x, int y, UINT keyFlags)
#define HANDLE_MSG(hwnd, message, fn)
Definition: windowsx.h:322
#define WM_PAINT
Definition: winuser.h:1623
#define WM_SIZE
Definition: winuser.h:1614
#define WM_NCHITTEST
Definition: winuser.h:1689
#define WM_MOUSEMOVE
Definition: winuser.h:1778
#define WM_LBUTTONDOWN
Definition: winuser.h:1779
#define WM_ACTIVATE
Definition: winuser.h:1615
#define WM_RBUTTONDOWN
Definition: winuser.h:1782
#define WM_TIMER
Definition: winuser.h:1745
#define WM_LBUTTONUP
Definition: winuser.h:1780
#define WM_MOVE
Definition: winuser.h:1613
#define WM_WINDOWPOSCHANGED
Definition: winuser.h:1665

Referenced by WindowProc().

◆ WindowWndProc()

LRESULT CALLBACK Window::WindowWndProc ( HWND  hwnd,
UINT  nmsg,
WPARAM  wparam,
LPARAM  lparam 
)
static

Definition at line 247 of file window.cpp.

248{
249 Window* pThis = get_window(hwnd);
250
251 if (!pThis)
252 pThis = create_controller(hwnd);
253
254 if (pThis) {
255 switch(nmsg) {
256 case WM_COMMAND:
257 return pThis->Command(LOWORD(wparam), HIWORD(wparam));
258
259 case WM_NOTIFY:
260 return pThis->Notify(wparam, (NMHDR*)lparam);
261
262 case WM_NOTIFYFORMAT:
263 return NFR_CURRENT;
264
265 case WM_CREATE:
266 return pThis->Init((LPCREATESTRUCT)lparam);
267
268 case WM_NCDESTROY:
269 delete pThis;
270 return 0;
271
272 default:
273 return pThis->WndProc(nmsg, wparam, lparam);
274 }
275 }
276 else
277 return DefWindowProc(hwnd, nmsg, wparam, lparam);
278}

Referenced by WindowWndProc().

◆ WndProc()

Member Data Documentation

◆ IAccessible_iface

IAccessible Window::IAccessible_iface

Definition at line 29 of file window.c.

◆ IEnumVARIANT_iface

IEnumVARIANT Window::IEnumVARIANT_iface

Definition at line 31 of file window.c.

◆ IOleWindow_iface

IOleWindow Window::IOleWindow_iface

Definition at line 30 of file window.c.

◆ m_bDragged

BOOL Window::m_bDragged
protected

Definition at line 256 of file SHAppBarMessage.cpp.

Referenced by OnCreate(), OnLButtonDown(), OnLButtonUp(), and OnMouseMove().

◆ m_cxSave

LONG Window::m_cxSave
protected

◆ m_cxWidth

LONG Window::m_cxWidth
protected

◆ m_cyHeight

LONG Window::m_cyHeight
protected

◆ m_cySave

LONG Window::m_cySave
protected

◆ m_fAppBarRegd

BOOL Window::m_fAppBarRegd
protected

Definition at line 254 of file SHAppBarMessage.cpp.

Referenced by AppBar_Register(), AppBar_Size(), AppBar_UnRegister(), and OnCreate().

◆ m_fAutoHide

◆ m_fHiding

BOOL Window::m_fHiding
protected

◆ m_fMoving

BOOL Window::m_fMoving
protected

◆ m_fOnTop

BOOL Window::m_fOnTop
protected

Definition at line 247 of file SHAppBarMessage.cpp.

Referenced by AppBar_SetAlwaysOnTop(), OnAppBarCallback(), and OnCreate().

◆ m_hwnd

HWND Window::m_hwnd
protected

Definition at line 245 of file SHAppBarMessage.cpp.

Referenced by OnCreate(), and OnNCDestroy().

◆ m_ptDragOn

POINT Window::m_ptDragOn
protected

Definition at line 257 of file SHAppBarMessage.cpp.

Referenced by OnLButtonDown(), and OnMouseMove().

◆ m_rcAppBar

RECT Window::m_rcAppBar
protected

◆ m_rcDrag

RECT Window::m_rcDrag
protected

Definition at line 259 of file SHAppBarMessage.cpp.

Referenced by OnLButtonUp(), and OnMouseMove().

◆ m_uSide

◆ ref

LONG Window::ref

Definition at line 33 of file window.c.

◆ s_dialogs

WindowSet Window::s_dialogs
staticprotected

Definition at line 138 of file window.h.

Referenced by dispatch_dialog_msg(), register_dialog(), and unregister_dialog().

◆ s_hcbtHook

HHOOK Window::s_hcbtHook = 0
staticprotected

Definition at line 133 of file window.h.

Referenced by create_mdi_child(), MDICBTHookProc(), and PropSheetCBTHookProc().

◆ s_new_info

const void * Window::s_new_info = NULL
staticprotected

Definition at line 119 of file window.h.

Referenced by Create(), create_controller(), create_mdi_child(), and Dialog::DoModal().

◆ s_pretranslate_windows

WindowSet Window::s_pretranslate_windows
staticprotected

Definition at line 137 of file window.h.

Referenced by pretranslate_msg(), register_pretranslate(), and unregister_pretranslate().

◆ s_window_creator

Window::CREATORFUNC Window::s_window_creator = NULL
staticprotected

Definition at line 120 of file window.h.

Referenced by Create(), create_controller(), create_mdi_child(), and Dialog::DoModal().

◆ s_wnd_map

Window::WindowMap Window::s_wnd_map
staticprotected

Definition at line 117 of file window.h.

Referenced by get_window(), Window(), and ~Window().


The documentation for this class was generated from the following files: