Public Types | Public Member Functions | Public Attributes | Protected Attributes

ResizeManager Struct Reference

Management of controls in resizable dialogs. More...

#include <window.h>

Inheritance diagram for ResizeManager:
Inheritance graph
[legend]
Collaboration diagram for ResizeManager:
Collaboration graph
[legend]

List of all members.

Public Types

typedef std::list< ResizeEntrysuper

Public Member Functions

 ResizeManager (HWND hwnd)
void Add (UINT id, int flags)
void Add (HWND hwnd, int flags)
void HandleSize (int cx, int cy)
void Resize (int dx, int dy)
void SetMinMaxInfo (LPMINMAXINFO lpmmi)

Public Attributes

SIZE _min_wnd_size

Protected Attributes

HWND _hwnd
SIZE _last_size

Detailed Description

Management of controls in resizable dialogs.

Definition at line 484 of file window.h.


Member Typedef Documentation

typedef std::list<ResizeEntry> ResizeManager::super

Definition at line 486 of file window.h.


Constructor & Destructor Documentation

ResizeManager::ResizeManager ( HWND  hwnd )

Definition at line 771 of file window.cpp.

References _last_size, and _min_wnd_size.

 :  _hwnd(hwnd)
{
    ClientRect clnt(hwnd);
    _last_size.cx = clnt.right;
    _last_size.cy = clnt.bottom;

    WindowRect rect(hwnd);
    _min_wnd_size.cx = rect.right - rect.left;
    _min_wnd_size.cy = rect.bottom - rect.top;
}

Member Function Documentation

void ResizeManager::Add ( UINT  id,
int  flags 
) [inline]

Definition at line 490 of file window.h.

Referenced by FindProgramDlg::FindProgramDlg(), and TrayNotifyDlg::TrayNotifyDlg().

        {push_back(ResizeEntry(id, flags));}

Here is the caller graph for this function:

void ResizeManager::Add ( HWND  hwnd,
int  flags 
) [inline]

Definition at line 493 of file window.h.

        {push_back(ResizeEntry(hwnd, flags));}
void ResizeManager::HandleSize ( int  cx,
int  cy 
)

Definition at line 783 of file window.cpp.

References ResizeEntry::_flags, _hwnd, ResizeEntry::_id, _last_size, HWND, MOVE_BOTTOM, MOVE_LEFT, MOVE_RIGHT, MOVE_TOP, and ScreenToClient().

Referenced by Resize(), and ResizeController< Dialog >::WndProc().

{
    ClientRect clnt_rect(_hwnd);
    SIZE new_size = {cx, cy};

    int dx = new_size.cx - _last_size.cx;
    int dy = new_size.cy - _last_size.cy;

    if (!dx && !dy)
        return;

    _last_size = new_size;

    HDWP hDWP = BeginDeferWindowPos(size());

    for(ResizeManager::const_iterator it=begin(); it!=end(); ++it) {
        const ResizeEntry& e = *it;
        RECT move = {0};

        if (e._flags & MOVE_LEFT)
            move.left += dx;

        if (e._flags & MOVE_RIGHT)
            move.right += dx;

        if (e._flags & MOVE_TOP)
            move.top += dy;

        if (e._flags & MOVE_BOTTOM)
            move.bottom += dy;

        UINT flags = 0;

        if (!move.left && !move.top)
            flags = SWP_NOMOVE;

        if (move.right==move.left && move.bottom==move.top)
            flags |= SWP_NOSIZE;

        if (flags != (SWP_NOMOVE|SWP_NOSIZE)) {
            HWND hwnd = GetDlgItem(_hwnd, e._id);

            if (hwnd) {
                WindowRect rect(hwnd);
                ScreenToClient(_hwnd, rect);

                rect.left   += move.left;
                rect.right  += move.right;
                rect.top    += move.top;
                rect.bottom += move.bottom;

                hDWP = DeferWindowPos(hDWP, hwnd, 0, rect.left, rect.top, rect.right-rect.left, rect.bottom-rect.top, flags|SWP_NOACTIVATE|SWP_NOZORDER);
            }
        }
    }

    EndDeferWindowPos(hDWP);
}

Here is the call graph for this function:

Here is the caller graph for this function:

void ResizeManager::Resize ( int  dx,
int  dy 
)

Definition at line 842 of file window.cpp.

References _hwnd, _min_wnd_size, HandleSize(), and MoveVisible().

Referenced by FindProgramDlg::FindProgramDlg(), and TrayNotifyDlg::TrayNotifyDlg().

{
    ::SetWindowPos(_hwnd, 0, 0, 0, _min_wnd_size.cx+dx, _min_wnd_size.cy+dy, SWP_NOMOVE|SWP_NOACTIVATE);
    MoveVisible(_hwnd);

    ClientRect clnt_rect(_hwnd);
    HandleSize(clnt_rect.right, clnt_rect.bottom);
}

Here is the call graph for this function:

Here is the caller graph for this function:

void ResizeManager::SetMinMaxInfo ( LPMINMAXINFO  lpmmi ) [inline]

Definition at line 499 of file window.h.

References _min_wnd_size.

Referenced by ResizeController< Dialog >::WndProc().

    {
        lpmmi->ptMinTrackSize.x = _min_wnd_size.cx;
        lpmmi->ptMinTrackSize.y = _min_wnd_size.cy;
    }

Here is the caller graph for this function:


Member Data Documentation

Definition at line 508 of file window.h.

Referenced by HandleSize(), and Resize().

SIZE ResizeManager::_last_size [protected]

Definition at line 509 of file window.h.

Referenced by HandleSize(), and ResizeManager().

Definition at line 505 of file window.h.

Referenced by Resize(), ResizeManager(), and SetMinMaxInfo().


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

ROS Explorer Source Code Documentation
generated on 02.01.2013 by doxygen

ROS Explorer Homepage