Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

162 lines
4.8 KiB

/*--------------------------------------------------------------------------*
*
* Microsoft Windows
* Copyright (C) Microsoft Corporation, 1992 - 1999
*
* File: msgview.h
*
* Contents: Interface file for CMessageView
*
* History: 28-Apr-99 jeffro Created
*
*--------------------------------------------------------------------------*/
#ifndef __MESSAGEVIEW_H_
#define __MESSAGEVIEW_H_
#include "tstring.h"
/////////////////////////////////////////////////////////////////////////////
// CMessageView
class ATL_NO_VTABLE CMessageView :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CMessageView, &CLSID_MessageView>,
public CComControl<CMessageView>,
public IMessageView,
public IPersistStreamInitImpl<CMessageView>,
public IOleControlImpl<CMessageView>,
public IOleObjectImpl<CMessageView>,
public IOleInPlaceActiveObjectImpl<CMessageView>,
public IViewObjectExImpl<CMessageView>,
public IOleInPlaceObjectWindowlessImpl<CMessageView>
{
public:
CMessageView();
~CMessageView();
DECLARE_NOT_AGGREGATABLE(CMessageView)
DECLARE_MMC_OBJECT_REGISTRATION (
g_szMmcndmgrDll, // implementing DLL
CLSID_MessageView, // CLSID
_T("MessageView Class"), // class name
_T("MessageView.MessageView.1"), // ProgID
_T("MessageView.MessageView")) // version-independent ProgID
BEGIN_COM_MAP(CMessageView)
COM_INTERFACE_ENTRY(IMessageView)
COM_INTERFACE_ENTRY_IMPL(IViewObjectEx)
COM_INTERFACE_ENTRY_IMPL_IID(IID_IViewObject2, IViewObjectEx)
COM_INTERFACE_ENTRY_IMPL_IID(IID_IViewObject, IViewObjectEx)
COM_INTERFACE_ENTRY_IMPL(IOleInPlaceObjectWindowless)
COM_INTERFACE_ENTRY_IMPL_IID(IID_IOleInPlaceObject, IOleInPlaceObjectWindowless)
COM_INTERFACE_ENTRY_IMPL_IID(IID_IOleWindow, IOleInPlaceObjectWindowless)
COM_INTERFACE_ENTRY_IMPL(IOleInPlaceActiveObject)
COM_INTERFACE_ENTRY_IMPL(IOleControl)
COM_INTERFACE_ENTRY_IMPL(IOleObject)
COM_INTERFACE_ENTRY_IMPL(IPersistStreamInit)
END_COM_MAP()
BEGIN_PROPERTY_MAP(CMessageView)
// Example entries
// PROP_ENTRY("Property Description", dispid, clsid)
// PROP_PAGE(CLSID_StockColorPage)
END_PROPERTY_MAP()
BEGIN_MSG_MAP(CMessageView)
MESSAGE_HANDLER (WM_CREATE, OnCreate)
MESSAGE_HANDLER (WM_DESTROY, OnDestroy)
MESSAGE_HANDLER (WM_SIZE, OnSize)
MESSAGE_HANDLER (WM_SETTINGCHANGE, OnSettingChange)
MESSAGE_HANDLER (WM_KEYDOWN, OnKeyDown)
MESSAGE_HANDLER (WM_VSCROLL, OnVScroll)
MESSAGE_HANDLER (WM_MOUSEWHEEL, OnMouseWheel)
CHAIN_MSG_MAP (CComControl<CMessageView>)
END_MSG_MAP()
#define MESSAGE_HANDLER_FUNC(func) LRESULT (func)(UINT msg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
MESSAGE_HANDLER_FUNC (OnCreate);
MESSAGE_HANDLER_FUNC (OnDestroy);
MESSAGE_HANDLER_FUNC (OnSize);
MESSAGE_HANDLER_FUNC (OnSettingChange);
MESSAGE_HANDLER_FUNC (OnKeyDown);
MESSAGE_HANDLER_FUNC (OnVScroll);
MESSAGE_HANDLER_FUNC (OnMouseWheel);
DECLARE_WND_CLASS_EX(NULL, CS_HREDRAW, COLOR_WINDOW);
// IViewObjectEx
STDMETHOD(GetViewStatus)(DWORD* pdwStatus)
{
ATLTRACE(_T("IViewObjectExImpl::GetViewStatus\n"));
*pdwStatus = VIEWSTATUS_SOLIDBKGND | VIEWSTATUS_OPAQUE;
return S_OK;
}
// IMessageView
STDMETHOD(SetTitleText)(LPCOLESTR pszTitleText);
STDMETHOD(SetBodyText)(LPCOLESTR pszBodyText);
STDMETHOD(SetIcon)(IconIdentifier id);
STDMETHOD(Clear)();
public:
HRESULT OnDraw(ATL_DRAWINFO& di);
private:
void RecalcLayout();
void RecalcIconLayout();
void RecalcTitleLayout();
void RecalcBodyLayout();
void UpdateSystemMetrics();
struct TextElement;
void DrawTextElement (HDC hdc, TextElement& te, DWORD dwFlags = 0);
int CalcTextElementHeight (const TextElement& te, int cx);
HRESULT SetTextElement (TextElement& te, LPCOLESTR pszNewText);
void CreateFonts ();
void DeleteFonts ();
void VertScroll (int nScrollCmd, int nScrollPos, int nRepeat);
void ScrollToPosition (int yScroll);
void UpdateScrollSizes ();
int GetOverallHeight() const
{ return (m_TextElement[Body].rect.bottom + m_sizeMargin.cy); }
private:
enum { Title, Body, ElementCount };
struct TextElement
{
TextElement() : rect (0,0,0,0) {}
tstring str;
WTL::CFont font;
WTL::CRect rect;
};
TextElement m_TextElement[ElementCount];
HICON m_hIcon;
WTL::CRect m_rectIcon;
// for scrolling
int m_yScroll;
int m_yScrollMax;
int m_yScrollMin;
int m_cyPage;
int m_cyLine;
int m_nAccumulatedScrollDelta; // for WM_MOUSEWHEEL processing
WTL::CSize m_sizeWindow;
WTL::CSize m_sizeIcon;
WTL::CSize m_sizeMargin;
};
#endif //__MESSAGEVIEW_H_