summaryrefslogtreecommitdiffstats
path: root/mmc_updater/depends/win32cpp/dialog.h
diff options
context:
space:
mode:
Diffstat (limited to 'mmc_updater/depends/win32cpp/dialog.h')
-rw-r--r--mmc_updater/depends/win32cpp/dialog.h876
1 files changed, 0 insertions, 876 deletions
diff --git a/mmc_updater/depends/win32cpp/dialog.h b/mmc_updater/depends/win32cpp/dialog.h
deleted file mode 100644
index e5123304..00000000
--- a/mmc_updater/depends/win32cpp/dialog.h
+++ /dev/null
@@ -1,876 +0,0 @@
-// Win32++ Version 7.2
-// Released: 5th AUgust 2011
-//
-// David Nash
-// email: dnash@bigpond.net.au
-// url: https://sourceforge.net/projects/win32-framework
-//
-//
-// Copyright (c) 2005-2011 David Nash
-//
-// Permission is hereby granted, free of charge, to
-// any person obtaining a copy of this software and
-// associated documentation files (the "Software"),
-// to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify,
-// merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom
-// the Software is furnished to do so, subject to the
-// following conditions:
-//
-// The above copyright notice and this permission notice
-// shall be included in all copies or substantial portions
-// of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
-// ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
-// TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
-// PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
-// SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR
-// ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
-// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE
-// OR OTHER DEALINGS IN THE SOFTWARE.
-//
-////////////////////////////////////////////////////////
-
-
-////////////////////////////////////////////////////////
-// dialog.h
-// Declaration of the CDialog class
-
-// CDialog adds support for dialogs to Win32++. Dialogs are specialised
-// windows which are a parent window for common controls. Common controls
-// are special window types such as buttons, edit controls, tree views,
-// list views, static text etc.
-
-// The layout of a dialog is typically defined in a resource script file
-// (often Resource.rc). While this script file can be constructed manually,
-// it is often created using a resource editor. If your compiler doesn't
-// include a resource editor, you might find ResEdit useful. It is a free
-// resource editor available for download at:
-// http://www.resedit.net/
-
-// CDialog supports modal and modeless dialogs. It also supports the creation
-// of dialogs defined in a resource script file, as well as those defined in
-// a dialog template.
-
-// Use the Dialog generic program as the starting point for your own dialog
-// applications.
-// The DlgSubclass sample demonstrates how to use subclassing to customise
-// the behaviour of common controls in a dialog.
-
-
-#ifndef _WIN32XX_DIALOG_H_
-#define _WIN32XX_DIALOG_H_
-
-#include "wincore.h"
-
-#ifndef SWP_NOCOPYBITS
- #define SWP_NOCOPYBITS 0x0100
-#endif
-
-namespace Win32xx
-{
-
- class CDialog : public CWnd
- {
- public:
- CDialog(UINT nResID, CWnd* pParent = NULL);
- CDialog(LPCTSTR lpszResName, CWnd* pParent = NULL);
- CDialog(LPCDLGTEMPLATE lpTemplate, CWnd* pParent = NULL);
- virtual ~CDialog();
-
- // You probably won't need to override these functions
- virtual void AttachItem(int nID, CWnd& Wnd);
- virtual HWND Create(CWnd* pParent = NULL);
- virtual INT_PTR DoModal();
- virtual HWND DoModeless();
- virtual void SetDlgParent(CWnd* pParent);
- BOOL IsModal() const { return m_IsModal; }
- BOOL IsIndirect() const { return (NULL != m_lpTemplate); }
-
- protected:
- // These are the functions you might wish to override
- virtual INT_PTR DialogProc(UINT uMsg, WPARAM wParam, LPARAM lParam);
- virtual INT_PTR DialogProcDefault(UINT uMsg, WPARAM wParam, LPARAM lParam);
- virtual void EndDialog(INT_PTR nResult);
- virtual void OnCancel();
- virtual BOOL OnInitDialog();
- virtual void OnOK();
- virtual BOOL PreTranslateMessage(MSG* pMsg);
-
- // Can't override these functions
- static INT_PTR CALLBACK StaticDialogProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
-
- #ifndef _WIN32_WCE
- static LRESULT CALLBACK StaticMsgHook(int nCode, WPARAM wParam, LPARAM lParam);
- #endif
-
- private:
- CDialog(const CDialog&); // Disable copy construction
- CDialog& operator = (const CDialog&); // Disable assignment operator
-
- BOOL m_IsModal; // a flag for modal dialogs
- LPCTSTR m_lpszResName; // the resource name for the dialog
- LPCDLGTEMPLATE m_lpTemplate; // the dialog template for indirect dialogs
- HWND m_hParent; // handle to the dialogs's parent window
- };
-
-
-#ifndef _WIN32_WCE
-
- //////////////////////////////////////
- // Declaration of the CResizer class
- //
- // The CResizer class can be used to rearrange a dialog's child
- // windows when the dialog is resized.
-
- // To use CResizer, follow the following steps:
- // 1) Use Initialize to specify the dialog's CWnd, and min and max size.
- // 3) Use AddChild for each child window
- // 4) Call HandleMessage from within DialogProc.
- //
-
- // Resize Dialog Styles
-#define RD_STRETCH_WIDTH 0x0001 // The item has a variable width
-#define RD_STRETCH_HEIGHT 0x0002 // The item has a variable height
-
- // Resize Dialog alignments
- enum Alignment { topleft, topright, bottomleft, bottomright };
-
- class CResizer
- {
- public:
- CResizer() : m_pParent(0), m_xScrollPos(0), m_yScrollPos(0) {}
- virtual ~CResizer() {}
-
- virtual void AddChild(CWnd* pWnd, Alignment corner, DWORD dwStyle);
- virtual void AddChild(HWND hWnd, Alignment corner, DWORD dwStyle);
- virtual void HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam);
- virtual void Initialize(CWnd* pParent, RECT rcMin, RECT rcMax = CRect(0,0,0,0));
- virtual void OnHScroll(WPARAM wParam, LPARAM lParam);
- virtual void OnVScroll(WPARAM wParam, LPARAM lParam);
- virtual void RecalcLayout();
- CRect GetMinRect() const { return m_rcMin; }
- CRect GetMaxRect() const { return m_rcMax; }
-
- struct ResizeData
- {
- CRect rcInit;
- CRect rcOld;
- Alignment corner;
- BOOL bFixedWidth;
- BOOL bFixedHeight;
- HWND hWnd;
- };
-
- private:
- CWnd* m_pParent;
- std::vector<ResizeData> m_vResizeData;
-
- CRect m_rcInit;
- CRect m_rcMin;
- CRect m_rcMax;
-
- int m_xScrollPos;
- int m_yScrollPos;
- };
-
-#endif
-
-}
-
-//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-
-namespace Win32xx
-{
- ////////////////////////////////////
- // Definitions for the CDialog class
- //
- inline CDialog::CDialog(LPCTSTR lpszResName, CWnd* pParent/* = NULL*/)
- : m_IsModal(TRUE), m_lpszResName(lpszResName), m_lpTemplate(NULL)
- {
- m_hParent = pParent? pParent->GetHwnd() : NULL;
- ::InitCommonControls();
- }
-
- inline CDialog::CDialog(UINT nResID, CWnd* pParent/* = NULL*/)
- : m_IsModal(TRUE), m_lpszResName(MAKEINTRESOURCE (nResID)), m_lpTemplate(NULL)
- {
- m_hParent = pParent? pParent->GetHwnd() : NULL;
- ::InitCommonControls();
- }
-
- //For indirect dialogs - created from a dialog box template in memory.
- inline CDialog::CDialog(LPCDLGTEMPLATE lpTemplate, CWnd* pParent/* = NULL*/)
- : m_IsModal(TRUE), m_lpszResName(NULL), m_lpTemplate(lpTemplate)
- {
- m_hParent = pParent? pParent->GetHwnd() : NULL;
- ::InitCommonControls();
- }
-
- inline CDialog::~CDialog()
- {
- if (m_hWnd != NULL)
- {
- if (IsModal())
- ::EndDialog(m_hWnd, 0);
- else
- Destroy();
- }
- }
-
- inline void CDialog::AttachItem(int nID, CWnd& Wnd)
- // Attach a dialog item to a CWnd
- {
- Wnd.AttachDlgItem(nID, this);
- }
-
- inline HWND CDialog::Create(CWnd* pParent /* = NULL */)
- {
- // Allow a dialog to be used as a child window
-
- assert(GetApp());
- SetDlgParent(pParent);
- return DoModeless();
- }
-
- inline INT_PTR CDialog::DialogProc(UINT uMsg, WPARAM wParam, LPARAM lParam)
- {
- // Override this function in your class derrived from CDialog if you wish to handle messages
- // A typical function might look like this:
-
- // switch (uMsg)
- // {
- // case MESSAGE1: // Some Windows API message
- // OnMessage1(); // A user defined function
- // break; // Also do default processing
- // case MESSAGE2:
- // OnMessage2();
- // return x; // Don't do default processing, but instead return
- // // a value recommended by the Windows API documentation
- // }
-
- // Always pass unhandled messages on to DialogProcDefault
- return DialogProcDefault(uMsg, wParam, lParam);
- }
-
- inline INT_PTR CDialog::DialogProcDefault(UINT uMsg, WPARAM wParam, LPARAM lParam)
- // All DialogProc functions should pass unhandled messages to this function
- {
- LRESULT lr = 0;
-
- switch (uMsg)
- {
- case UWM_CLEANUPTEMPS:
- {
- TLSData* pTLSData = (TLSData*)TlsGetValue(GetApp()->GetTlsIndex());
- pTLSData->vTmpWnds.clear();
- }
- break;
- case WM_INITDIALOG:
- {
- // Center the dialog
- CenterWindow();
- }
- return OnInitDialog();
- case WM_COMMAND:
- switch (LOWORD (wParam))
- {
- case IDOK:
- OnOK();
- return TRUE;
- case IDCANCEL:
- OnCancel();
- return TRUE;
- default:
- {
- // Refelect this message if it's from a control
- CWnd* pWnd = GetApp()->GetCWndFromMap((HWND)lParam);
- if (pWnd != NULL)
- lr = pWnd->OnCommand(wParam, lParam);
-
- // Handle user commands
- if (!lr)
- lr = OnCommand(wParam, lParam);
-
- if (lr) return 0L;
- }
- break; // Some commands require default processing
- }
- break;
-
- case WM_NOTIFY:
- {
- // Do Notification reflection if it came from a CWnd object
- HWND hwndFrom = ((LPNMHDR)lParam)->hwndFrom;
- CWnd* pWndFrom = GetApp()->GetCWndFromMap(hwndFrom);
-
- if (pWndFrom != NULL)
- lr = pWndFrom->OnNotifyReflect(wParam, lParam);
- else
- {
- // Some controls (eg ListView) have child windows.
- // Reflect those notifications too.
- CWnd* pWndFromParent = GetApp()->GetCWndFromMap(::GetParent(hwndFrom));
- if (pWndFromParent != NULL)
- lr = pWndFromParent->OnNotifyReflect(wParam, lParam);
- }
-
- // Handle user notifications
- if (!lr) lr = OnNotify(wParam, lParam);
-
- // Set the return code for notifications
- if (IsWindow())
- SetWindowLongPtr(DWLP_MSGRESULT, (LONG_PTR)lr);
-
- return (BOOL)lr;
- }
-
- case WM_PAINT:
- {
- if (::GetUpdateRect(m_hWnd, NULL, FALSE))
- {
- CPaintDC dc(this);
- OnDraw(&dc);
- }
- else
- // RedrawWindow can require repainting without an update rect
- {
- CClientDC dc(this);
- OnDraw(&dc);
- }
-
- break;
- }
-
- case WM_ERASEBKGND:
- {
- CDC dc((HDC)wParam);
- BOOL bResult = OnEraseBkgnd(&dc);
- dc.Detach();
- if (bResult) return TRUE;
- }
- break;
-
- // A set of messages to be reflected back to the control that generated them
- case WM_CTLCOLORBTN:
- case WM_CTLCOLOREDIT:
- case WM_CTLCOLORDLG:
- case WM_CTLCOLORLISTBOX:
- case WM_CTLCOLORSCROLLBAR:
- case WM_CTLCOLORSTATIC:
- case WM_DRAWITEM:
- case WM_MEASUREITEM:
- case WM_DELETEITEM:
- case WM_COMPAREITEM:
- case WM_CHARTOITEM:
- case WM_VKEYTOITEM:
- case WM_HSCROLL:
- case WM_VSCROLL:
- case WM_PARENTNOTIFY:
- return MessageReflect(m_hWnd, uMsg, wParam, lParam);
-
- } // switch(uMsg)
- return FALSE;
-
- } // INT_PTR CALLBACK CDialog::DialogProc(...)
-
- inline INT_PTR CDialog::DoModal()
- {
- // Create a modal dialog
- // A modal dialog box must be closed by the user before the application continues
-
- assert( GetApp() ); // Test if Win32++ has been started
- assert(!::IsWindow(m_hWnd)); // Only one window per CWnd instance allowed
-
- INT_PTR nResult = 0;
-
- try
- {
- m_IsModal=TRUE;
-
- // Ensure this thread has the TLS index set
- TLSData* pTLSData = GetApp()->SetTlsIndex();
-
- #ifndef _WIN32_WCE
- BOOL IsHookedHere = FALSE;
- if (NULL == pTLSData->hHook )
- {
- pTLSData->hHook = ::SetWindowsHookEx(WH_MSGFILTER, (HOOKPROC)StaticMsgHook, NULL, ::GetCurrentThreadId());
- IsHookedHere = TRUE;
- }
- #endif
-
- HINSTANCE hInstance = GetApp()->GetInstanceHandle();
- pTLSData->pCWnd = this;
-
- // Create a modal dialog
- if (IsIndirect())
- nResult = ::DialogBoxIndirect(hInstance, m_lpTemplate, m_hParent, (DLGPROC)CDialog::StaticDialogProc);
- else
- {
- if (::FindResource(GetApp()->GetResourceHandle(), m_lpszResName, RT_DIALOG))
- hInstance = GetApp()->GetResourceHandle();
- nResult = ::DialogBox(hInstance, m_lpszResName, m_hParent, (DLGPROC)CDialog::StaticDialogProc);
- }
-
- // Tidy up
- m_hWnd = NULL;
- pTLSData->pCWnd = NULL;
- GetApp()->CleanupTemps();
-
- #ifndef _WIN32_WCE
- if (IsHookedHere)
- {
- ::UnhookWindowsHookEx(pTLSData->hHook);
- pTLSData->hHook = NULL;
- }
- #endif
-
- if (nResult == -1)
- throw CWinException(_T("Failed to create modal dialog box"));
-
- }
-
- catch (const CWinException &e)
- {
- TRACE(_T("\n*** Failed to create dialog ***\n"));
- e.what(); // Display the last error message.
-
- // eat the exception (don't rethrow)
- }
-
- return nResult;
- }
-
- inline HWND CDialog::DoModeless()
- {
- assert( GetApp() ); // Test if Win32++ has been started
- assert(!::IsWindow(m_hWnd)); // Only one window per CWnd instance allowed
-
- try
- {
- m_IsModal=FALSE;
-
- // Ensure this thread has the TLS index set
- TLSData* pTLSData = GetApp()->SetTlsIndex();
-
- // Store the CWnd pointer in Thread Local Storage
- pTLSData->pCWnd = this;
-
- HINSTANCE hInstance = GetApp()->GetInstanceHandle();
-
- // Create a modeless dialog
- if (IsIndirect())
- m_hWnd = ::CreateDialogIndirect(hInstance, m_lpTemplate, m_hParent, (DLGPROC)CDialog::StaticDialogProc);
- else
- {
- if (::FindResource(GetApp()->GetResourceHandle(), m_lpszResName, RT_DIALOG))
- hInstance = GetApp()->GetResourceHandle();
-
- m_hWnd = ::CreateDialog(hInstance, m_lpszResName, m_hParent, (DLGPROC)CDialog::StaticDialogProc);
- }
-
- // Tidy up
- pTLSData->pCWnd = NULL;
-
- // Now handle dialog creation failure
- if (!m_hWnd)
- throw CWinException(_T("Failed to create dialog"));
- }
-
- catch (const CWinException &e)
- {
- TRACE(_T("\n*** Failed to create dialog ***\n"));
- e.what(); // Display the last error message.
-
- // eat the exception (don't rethrow)
- }
-
- return m_hWnd;
- }
-
- inline void CDialog::EndDialog(INT_PTR nResult)
- {
- assert(::IsWindow(m_hWnd));
-
- if (IsModal())
- ::EndDialog(m_hWnd, nResult);
- else
- Destroy();
-
- m_hWnd = NULL;
- }
-
- inline void CDialog::OnCancel()
- {
- // Override to customize OnCancel behaviour
- EndDialog(IDCANCEL);
- }
-
- inline BOOL CDialog::OnInitDialog()
- {
- // Called when the dialog is initialized
- // Override it in your derived class to automatically perform tasks
- // The return value is used by WM_INITDIALOG
-
- return TRUE;
- }
-
- inline void CDialog::OnOK()
- {
- // Override to customize OnOK behaviour
- EndDialog(IDOK);
- }
-
- inline BOOL CDialog::PreTranslateMessage(MSG* pMsg)
- {
- // allow the dialog to translate keyboard input
- if ((pMsg->message >= WM_KEYFIRST) && (pMsg->message <= WM_KEYLAST))
- {
- // Process dialog keystrokes for modeless dialogs
- if (!IsModal())
- {
- TLSData* pTLSData = (TLSData*)TlsGetValue(GetApp()->GetTlsIndex());
- if (NULL == pTLSData->hHook)
- {
- if (IsDialogMessage(pMsg))
- return TRUE;
- }
- else
- {
- // A modal message loop is running so we can't do IsDialogMessage.
- // Avoid having modal dialogs create other windows, because those
- // windows will then use the modal dialog's special message loop.
- }
- }
- }
-
- return FALSE;
- }
-
- inline void CDialog::SetDlgParent(CWnd* pParent)
- // Allows the parent of the dialog to be set before the dialog is created
- {
- m_hParent = pParent? pParent->GetHwnd() : NULL;
- }
-
- inline INT_PTR CALLBACK CDialog::StaticDialogProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
- {
- // Find the CWnd pointer mapped to this HWND
- CDialog* w = (CDialog*)GetApp()->GetCWndFromMap(hWnd);
- if (0 == w)
- {
- // The HWND wasn't in the map, so add it now
- TLSData* pTLSData = (TLSData*)TlsGetValue(GetApp()->GetTlsIndex());
- assert(pTLSData);
-
- // Retrieve pointer to CWnd object from Thread Local Storage TLS
- w = (CDialog*)pTLSData->pCWnd;
- assert(w);
- pTLSData->pCWnd = NULL;
-
- // Store the Window pointer into the HWND map
- w->m_hWnd = hWnd;
- w->AddToMap();
- }
-
- return w->DialogProc(uMsg, wParam, lParam);
-
- } // INT_PTR CALLBACK CDialog::StaticDialogProc(...)
-
-#ifndef _WIN32_WCE
- inline LRESULT CALLBACK CDialog::StaticMsgHook(int nCode, WPARAM wParam, LPARAM lParam)
- {
- // Used by Modal Dialogs to PreTranslate Messages
- TLSData* pTLSData = (TLSData*)TlsGetValue(GetApp()->GetTlsIndex());
-
- if (nCode == MSGF_DIALOGBOX)
- {
- MSG* lpMsg = (MSG*) lParam;
-
- // only pre-translate keyboard events
- if ((lpMsg->message >= WM_KEYFIRST && lpMsg->message <= WM_KEYLAST))
- {
- for (HWND hWnd = lpMsg->hwnd; hWnd != NULL; hWnd = ::GetParent(hWnd))
- {
- CDialog* pDialog = (CDialog*)GetApp()->GetCWndFromMap(hWnd);
- if (pDialog && (lstrcmp(pDialog->GetClassName(), _T("#32770")) == 0)) // only for dialogs
- {
- pDialog->PreTranslateMessage(lpMsg);
- break;
- }
- }
- }
- }
-
- return ::CallNextHookEx(pTLSData->hHook, nCode, wParam, lParam);
- }
-#endif
-
-
-
-#ifndef _WIN32_WCE
-
- /////////////////////////////////////
- // Definitions for the CResizer class
- //
-
- void inline CResizer::AddChild(CWnd* pWnd, Alignment corner, DWORD dwStyle)
- // Adds a child window (usually a dialog control) to the set of windows managed by
- // the Resizer.
- //
- // The alignment corner should be set to the closest corner of the dialog. Allowed
- // values are topleft, topright, bottomleft, and bottomright.
- // Set bFixedWidth to TRUE if the width should be fixed instead of variable.
- // Set bFixedHeight to TRUE if the height should be fixed instead of variable.
- {
- ResizeData rd;
- rd.corner = corner;
- rd.bFixedWidth = !(dwStyle & RD_STRETCH_WIDTH);
- rd.bFixedHeight = !(dwStyle & RD_STRETCH_HEIGHT);
- CRect rcInit = pWnd->GetWindowRect();
- m_pParent->ScreenToClient(rcInit);
- rd.rcInit = rcInit;
- rd.hWnd = pWnd->GetHwnd();
-
- m_vResizeData.insert(m_vResizeData.begin(), rd);
- }
-
- void inline CResizer::AddChild(HWND hWnd, Alignment corner, DWORD dwStyle)
- // Adds a child window (usually a dialog control) to the set of windows managed by
- // the Resizer.
- {
- AddChild(FromHandle(hWnd), corner, dwStyle);
- }
-
- inline void CResizer::HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam)
- {
- switch (uMsg)
- {
- case WM_SIZE:
- RecalcLayout();
- break;
-
- case WM_HSCROLL:
- if (0 == lParam)
- OnHScroll(wParam, lParam);
- break;
-
- case WM_VSCROLL:
- if (0 == lParam)
- OnVScroll(wParam, lParam);
- break;
- }
- }
-
- void inline CResizer::Initialize(CWnd* pParent, RECT rcMin, RECT rcMax)
- // Sets up the Resizer by specifying the parent window (usually a dialog),
- // and the minimum and maximum allowed rectangle sizes.
- {
- assert (NULL != pParent);
-
- m_pParent = pParent;
- m_rcInit = pParent->GetClientRect();
- m_rcMin = rcMin;
- m_rcMax = rcMax;
-
- // Add scroll bar support to the parent window
- DWORD dwStyle = (DWORD)m_pParent->GetClassLongPtr(GCL_STYLE);
- dwStyle |= WS_HSCROLL | WS_VSCROLL;
- m_pParent->SetClassLongPtr(GCL_STYLE, dwStyle);
- }
-
- void inline CResizer::OnHScroll(WPARAM wParam, LPARAM /*lParam*/)
- {
- int xNewPos;
-
- switch (LOWORD(wParam))
- {
- case SB_PAGEUP: // User clicked the scroll bar shaft left of the scroll box.
- xNewPos = m_xScrollPos - 50;
- break;
-
- case SB_PAGEDOWN: // User clicked the scroll bar shaft right of the scroll box.
- xNewPos = m_xScrollPos + 50;
- break;
-
- case SB_LINEUP: // User clicked the left arrow.
- xNewPos = m_xScrollPos - 5;
- break;
-
- case SB_LINEDOWN: // User clicked the right arrow.
- xNewPos = m_xScrollPos + 5;
- break;
-
- case SB_THUMBPOSITION: // User dragged the scroll box.
- xNewPos = HIWORD(wParam);
- break;
-
- case SB_THUMBTRACK: // User dragging the scroll box.
- xNewPos = HIWORD(wParam);
- break;
-
- default:
- xNewPos = m_xScrollPos;
- }
-
- // Scroll the window.
- xNewPos = MAX(0, xNewPos);
- xNewPos = MIN( xNewPos, GetMinRect().Width() - m_pParent->GetClientRect().Width() );
- int xDelta = xNewPos - m_xScrollPos;
- m_xScrollPos = xNewPos;
- m_pParent->ScrollWindow(-xDelta, 0, NULL, NULL);
-
- // Reset the scroll bar.
- SCROLLINFO si = {0};
- si.cbSize = sizeof(si);
- si.fMask = SIF_POS;
- si.nPos = m_xScrollPos;
- m_pParent->SetScrollInfo(SB_HORZ, si, TRUE);
- }
-
- void inline CResizer::OnVScroll(WPARAM wParam, LPARAM /*lParam*/)
- {
- int yNewPos;
-
- switch (LOWORD(wParam))
- {
- case SB_PAGEUP: // User clicked the scroll bar shaft above the scroll box.
- yNewPos = m_yScrollPos - 50;
- break;
-
- case SB_PAGEDOWN: // User clicked the scroll bar shaft below the scroll box.
- yNewPos = m_yScrollPos + 50;
- break;
-
- case SB_LINEUP: // User clicked the top arrow.
- yNewPos = m_yScrollPos - 5;
- break;
-
- case SB_LINEDOWN: // User clicked the bottom arrow.
- yNewPos = m_yScrollPos + 5;
- break;
-
- case SB_THUMBPOSITION: // User dragged the scroll box.
- yNewPos = HIWORD(wParam);
- break;
-
- case SB_THUMBTRACK: // User dragging the scroll box.
- yNewPos = HIWORD(wParam);
- break;
-
- default:
- yNewPos = m_yScrollPos;
- }
-
- // Scroll the window.
- yNewPos = MAX(0, yNewPos);
- yNewPos = MIN( yNewPos, GetMinRect().Height() - m_pParent->GetClientRect().Height() );
- int yDelta = yNewPos - m_yScrollPos;
- m_yScrollPos = yNewPos;
- m_pParent->ScrollWindow(0, -yDelta, NULL, NULL);
-
- // Reset the scroll bar.
- SCROLLINFO si = {0};
- si.cbSize = sizeof(si);
- si.fMask = SIF_POS;
- si.nPos = m_yScrollPos;
- m_pParent->SetScrollInfo(SB_VERT, si, TRUE);
- }
-
- void inline CResizer::RecalcLayout()
- // Repositions the child windows. Call this function when handling
- // the WM_SIZE message in the parent window.
- {
- assert (m_rcInit.Width() > 0 && m_rcInit.Height() > 0);
- assert (NULL != m_pParent);
-
- CRect rcCurrent = m_pParent->GetClientRect();
-
- // Adjust the scrolling if required
- m_xScrollPos = MIN(m_xScrollPos, MAX(0, m_rcMin.Width() - rcCurrent.Width() ) );
- m_yScrollPos = MIN(m_yScrollPos, MAX(0, m_rcMin.Height() - rcCurrent.Height()) );
- SCROLLINFO si = {0};
- si.cbSize = sizeof(si);
- si.fMask = SIF_RANGE | SIF_PAGE | SIF_POS;
- si.nMax = m_rcMin.Width();
- si.nPage = rcCurrent.Width();
- si.nPos = m_xScrollPos;
- m_pParent->SetScrollInfo(SB_HORZ, si, TRUE);
- si.nMax = m_rcMin.Height();
- si.nPage = rcCurrent.Height();
- si.nPos = m_yScrollPos;
- m_pParent->SetScrollInfo(SB_VERT, si, TRUE);
-
- rcCurrent.right = MAX( rcCurrent.Width(), m_rcMin.Width() );
- rcCurrent.bottom = MAX( rcCurrent.Height(), m_rcMin.Height() );
- if (!m_rcMax.IsRectEmpty())
- {
- rcCurrent.right = MIN( rcCurrent.Width(), m_rcMax.Width() );
- rcCurrent.bottom = MIN( rcCurrent.Height(), m_rcMax.Height() );
- }
-
- // Declare an iterator to step through the vector
- std::vector<ResizeData>::iterator iter;
-
- for (iter = m_vResizeData.begin(); iter < m_vResizeData.end(); ++iter)
- {
- int left = 0;
- int top = 0;
- int width = 0;
- int height = 0;
-
- // Calculate the new size and position of the child window
- switch( (*iter).corner )
- {
- case topleft:
- width = (*iter).bFixedWidth? (*iter).rcInit.Width() : (*iter).rcInit.Width() - m_rcInit.Width() + rcCurrent.Width();
- height = (*iter).bFixedHeight? (*iter).rcInit.Height() : (*iter).rcInit.Height() - m_rcInit.Height() + rcCurrent.Height();
- left = (*iter).rcInit.left;
- top = (*iter).rcInit.top;
- break;
- case topright:
- width = (*iter).bFixedWidth? (*iter).rcInit.Width() : (*iter).rcInit.Width() - m_rcInit.Width() + rcCurrent.Width();
- height = (*iter).bFixedHeight? (*iter).rcInit.Height() : (*iter).rcInit.Height() - m_rcInit.Height() + rcCurrent.Height();
- left = (*iter).rcInit.right - width - m_rcInit.Width() + rcCurrent.Width();
- top = (*iter).rcInit.top;
- break;
- case bottomleft:
- width = (*iter).bFixedWidth? (*iter).rcInit.Width() : (*iter).rcInit.Width() - m_rcInit.Width() + rcCurrent.Width();
- height = (*iter).bFixedHeight? (*iter).rcInit.Height() : (*iter).rcInit.Height() - m_rcInit.Height() + rcCurrent.Height();
- left = (*iter).rcInit.left;
- top = (*iter).rcInit.bottom - height - m_rcInit.Height() + rcCurrent.Height();
- break;
- case bottomright:
- width = (*iter).bFixedWidth? (*iter).rcInit.Width() : (*iter).rcInit.Width() - m_rcInit.Width() + rcCurrent.Width();
- height = (*iter).bFixedHeight? (*iter).rcInit.Height() : (*iter).rcInit.Height() - m_rcInit.Height() + rcCurrent.Height();
- left = (*iter).rcInit.right - width - m_rcInit.Width() + rcCurrent.Width();
- top = (*iter).rcInit.bottom - height - m_rcInit.Height() + rcCurrent.Height();
- break;
- }
-
- // Position the child window.
- CRect rc(left - m_xScrollPos, top - m_yScrollPos, left + width - m_xScrollPos, top + height - m_yScrollPos);
- if ( rc != (*iter).rcOld)
- {
- CWnd* pWnd = FromHandle((*iter).hWnd);
- CWnd *pWndPrev = pWnd->GetWindow(GW_HWNDPREV); // Trick to maintain the original tab order.
- HWND hWnd = pWndPrev ? pWndPrev->GetHwnd():NULL;
- pWnd->SetWindowPos(hWnd, rc, SWP_NOCOPYBITS);
- (*iter).rcOld = rc;
- }
- }
- }
-
-#endif // #ifndef _WIN32_WCE
-
-} // namespace Win32xx
-
-
-
-#endif // _WIN32XX_DIALOG_H_
-