114 lines
2.2 KiB
C++
114 lines
2.2 KiB
C++
|
//-----------------------------------------------------------------------------
|
||
|
// File: viewselwnd.cpp
|
||
|
//
|
||
|
// Desc: Implements CViewSelWnd class (derived from CFlexWnd). CViewSelWnd
|
||
|
// is used by the page object when a device has more than one view.
|
||
|
// CViewSelWnd displays one thumbnail for each view. The user can then
|
||
|
// select which view he/she wants to see with the mouse.
|
||
|
//
|
||
|
// Copyright (C) 1999-2000 Microsoft Corporation. All Rights Reserved.
|
||
|
//-----------------------------------------------------------------------------
|
||
|
|
||
|
#include "common.hpp"
|
||
|
|
||
|
|
||
|
CViewSelWnd::CViewSelWnd() :
|
||
|
m_pUI(NULL), m_nOver(-1)
|
||
|
{
|
||
|
}
|
||
|
|
||
|
CViewSelWnd::~CViewSelWnd()
|
||
|
{
|
||
|
}
|
||
|
|
||
|
BOOL CViewSelWnd::Go(HWND hParent, int left, int bottom, CDeviceUI *pUI)
|
||
|
{
|
||
|
if (pUI == NULL)
|
||
|
{
|
||
|
assert(0);
|
||
|
return FALSE;
|
||
|
}
|
||
|
m_pUI = pUI;
|
||
|
|
||
|
int w = 2 + g_sizeThumb.cx * pUI->GetNumViews();
|
||
|
int h = 2 + g_sizeThumb.cy;
|
||
|
|
||
|
RECT rect = {left, bottom - h, left + w, bottom};
|
||
|
|
||
|
if (!Create(hParent, rect, FALSE))
|
||
|
return FALSE;
|
||
|
|
||
|
assert(m_hWnd);
|
||
|
if (!m_hWnd)
|
||
|
return FALSE;
|
||
|
|
||
|
SetWindowPos(m_hWnd, HWND_TOP, 0, 0, 0, 0,
|
||
|
SWP_NOMOVE | SWP_NOSIZE | SWP_SHOWWINDOW);
|
||
|
SetCapture();
|
||
|
|
||
|
return TRUE;
|
||
|
}
|
||
|
|
||
|
void CViewSelWnd::OnPaint(HDC hDC)
|
||
|
{
|
||
|
for (int i = 0; i < m_pUI->GetNumViews(); i++)
|
||
|
{
|
||
|
CBitmap *pbm = m_pUI->GetViewThumbnail(i, i == m_nOver);
|
||
|
if (pbm != NULL)
|
||
|
pbm->Draw(hDC, i * g_sizeThumb.cx + 1, 1);
|
||
|
}
|
||
|
|
||
|
CPaintHelper ph(m_pUI->m_uig, hDC);
|
||
|
ph.SetPen(UIP_VIEWSELGRID);
|
||
|
RECT rect;
|
||
|
GetClientRect(&rect);
|
||
|
ph.Rectangle(rect, UIR_OUTLINE);
|
||
|
}
|
||
|
|
||
|
void CViewSelWnd::OnMouseOver(POINT point, WPARAM fwKeys)
|
||
|
{
|
||
|
RECT rect;
|
||
|
GetClientRect(&rect);
|
||
|
InflateRect(&rect, -1, -1);
|
||
|
if (PtInRect(&rect, point))
|
||
|
m_nOver = point.x / g_sizeThumb.cx;
|
||
|
else
|
||
|
m_nOver = -1;
|
||
|
Invalidate();
|
||
|
}
|
||
|
|
||
|
void CViewSelWnd::OnClick(POINT point, WPARAM fwKeys, BOOL bLeft)
|
||
|
{
|
||
|
if (!bLeft)
|
||
|
return;
|
||
|
|
||
|
OnMouseOver(point, fwKeys);
|
||
|
|
||
|
if (m_nOver != -1)
|
||
|
{
|
||
|
DEVICEUINOTIFY uin;
|
||
|
uin.msg = DEVUINM_SELVIEW;
|
||
|
uin.from = DEVUINFROM_SELWND;
|
||
|
uin.selview.nView = m_nOver;
|
||
|
m_pUI->Notify(uin);
|
||
|
}
|
||
|
|
||
|
ReleaseCapture();
|
||
|
|
||
|
Destroy();
|
||
|
}
|
||
|
|
||
|
LRESULT CViewSelWnd::WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
||
|
{
|
||
|
LRESULT lr = CFlexWnd::WndProc(hWnd, msg, wParam, lParam);
|
||
|
|
||
|
switch (msg)
|
||
|
{
|
||
|
case WM_CAPTURECHANGED:
|
||
|
Destroy();
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
return lr;
|
||
|
}
|