home *** CD-ROM | disk | FTP | other *** search
- // ThelpCtl.cpp : Implementation of the CTesthelpCtrl OLE control class.
-
- // This is a part of the Microsoft Foundation Classes C++ library.
- // Copyright (C) 1992-1998 Microsoft Corporation
- // All rights reserved.
- //
- // This source code is only intended as a supplement to the
- // Microsoft Foundation Classes Reference and related
- // electronic documentation provided with the library.
- // See these sources for detailed information regarding the
- // Microsoft Foundation Classes product.
-
- #include "stdafx.h"
- #include "testhelp.h"
- #include "ThelpCtl.h"
- #include "ThelpPpg.h"
-
-
- #ifdef _DEBUG
- #define new DEBUG_NEW
- #undef THIS_FILE
- static char THIS_FILE[] = __FILE__;
- #endif
-
-
- // This help id is also defined and used in the
- // testhelp.hpj help project file. It references
- // a topic in the testhelp.hlp help file.
-
- #define IDH_WHATISTHISTHING 18001
-
- IMPLEMENT_DYNCREATE(CTesthelpCtrl, COleControl)
-
-
- /////////////////////////////////////////////////////////////////////////////
- // Message map
-
- BEGIN_MESSAGE_MAP(CTesthelpCtrl, COleControl)
- //{{AFX_MSG_MAP(CTesthelpCtrl)
- ON_WM_CREATE()
- ON_WM_LBUTTONDOWN()
- ON_WM_LBUTTONUP()
- ON_WM_MOUSEMOVE()
-
- //}}AFX_MSG_MAP
- ON_OLEVERB(AFX_IDS_VERB_PROPERTIES, OnProperties)
-
- ON_MESSAGE(WM_HELP,OnHelpCommand) //We'll respond to the WM_HELP message
- //to display help for the control
-
- END_MESSAGE_MAP()
-
-
- /////////////////////////////////////////////////////////////////////////////
- // Dispatch map
-
- BEGIN_DISPATCH_MAP(CTesthelpCtrl, COleControl)
- //{{AFX_DISPATCH_MAP(CTesthelpCtrl)
- DISP_PROPERTY_NOTIFY(CTesthelpCtrl, "Name1", m_szName1, OnName1Changed, VT_BSTR)
- DISP_PROPERTY_NOTIFY(CTesthelpCtrl, "Name2", m_szName2, OnName2Changed, VT_BSTR)
- DISP_PROPERTY_NOTIFY(CTesthelpCtrl, "Name3", m_szName3, OnName3Changed, VT_BSTR)
- DISP_PROPERTY_NOTIFY(CTesthelpCtrl, "UseMyHelp", m_bUseMyHelp, OnUseMyHelpChanged, VT_BOOL)
- DISP_PROPERTY_NOTIFY(CTesthelpCtrl, "ShowToolTip", m_bShowToolTip, OnShowToolTipChanged, VT_BOOL)
- DISP_PROPERTY_NOTIFY(CTesthelpCtrl, "ToolTipText", m_szToolTipText, OnToolTipTextChanged, VT_BSTR)
- DISP_PROPERTY_NOTIFY(CTesthelpCtrl, "UsePopupHelp", m_nUsePopupHelp, OnUsePopupHelpChanged, VT_I2)
- DISP_STOCKPROP_FONT()
- DISP_STOCKPROP_BACKCOLOR()
- DISP_STOCKPROP_FORECOLOR()
- DISP_STOCKPROP_BORDERSTYLE()
- //}}AFX_DISPATCH_MAP
- DISP_FUNCTION_ID(CTesthelpCtrl, "AboutBox", DISPID_ABOUTBOX, AboutBox, VT_EMPTY, VTS_NONE)
- END_DISPATCH_MAP()
-
-
- /////////////////////////////////////////////////////////////////////////////
- // Event map
-
- BEGIN_EVENT_MAP(CTesthelpCtrl, COleControl)
- //{{AFX_EVENT_MAP(CTesthelpCtrl)
- // NOTE - ClassWizard will add and remove event map entries
- // DO NOT EDIT what you see in these blocks of generated code !
- //}}AFX_EVENT_MAP
- END_EVENT_MAP()
-
-
- /////////////////////////////////////////////////////////////////////////////
- // Property pages
-
- // TODO: Add more property pages as needed. Remember to increase the count!
- BEGIN_PROPPAGEIDS(CTesthelpCtrl, 3)
- PROPPAGEID(CTesthelpPropPage::guid)
- // added stock property pages
- PROPPAGEID(CLSID_CColorPropPage);
- PROPPAGEID(CLSID_CFontPropPage);
-
- END_PROPPAGEIDS(CTesthelpCtrl)
-
-
- /////////////////////////////////////////////////////////////////////////////
- // Initialize class factory and guid
-
- IMPLEMENT_OLECREATE_EX(CTesthelpCtrl, "TESTHELP.TesthelpCtrl.1",
- 0x31a2b283, 0x8c11, 0x11cf, 0xb3, 0x7f, 0, 0xaa, 0, 0xb9, 0x2b, 0x50)
-
-
- /////////////////////////////////////////////////////////////////////////////
- // Type library ID and version
-
- IMPLEMENT_OLETYPELIB(CTesthelpCtrl, _tlid, _wVerMajor, _wVerMinor)
-
-
- /////////////////////////////////////////////////////////////////////////////
- // Interface IDs
-
- const IID BASED_CODE IID_DTesthelp =
- { 0x31a2b281, 0x8c11, 0x11cf, { 0xb3, 0x7f, 0, 0xaa, 0, 0xb9, 0x2b, 0x50 } };
- const IID BASED_CODE IID_DTesthelpEvents =
- { 0x31a2b282, 0x8c11, 0x11cf, { 0xb3, 0x7f, 0, 0xaa, 0, 0xb9, 0x2b, 0x50 } };
-
-
- /////////////////////////////////////////////////////////////////////////////
- // Control type information
-
- static const DWORD BASED_CODE _dwTesthelpOleMisc =
- OLEMISC_ACTIVATEWHENVISIBLE |
- OLEMISC_SETCLIENTSITEFIRST |
- OLEMISC_INSIDEOUT |
- OLEMISC_CANTLINKINSIDE |
- OLEMISC_RECOMPOSEONRESIZE;
-
- IMPLEMENT_OLECTLTYPE(CTesthelpCtrl, IDS_TESTHELP, _dwTesthelpOleMisc)
-
-
- /////////////////////////////////////////////////////////////////////////////
- // CTesthelpCtrl::CTesthelpCtrlFactory::UpdateRegistry -
- // Adds or removes system registry entries for CTesthelpCtrl
-
- BOOL CTesthelpCtrl::CTesthelpCtrlFactory::UpdateRegistry(BOOL bRegister)
- {
- // TODO: Verify that your control follows apartment-model threading rules.
- // Refer to MFC TechNote 64 for more information.
- // If your control does not conform to the apartment-model rules, then
- // you must modify the code below, changing the 6th parameter from
- // afxRegApartmentThreading to 0.
-
- if (bRegister)
- return AfxOleRegisterControlClass(
- AfxGetInstanceHandle(),
- m_clsid,
- m_lpszProgID,
- IDS_TESTHELP,
- IDB_TESTHELP,
- afxRegApartmentThreading,
- _dwTesthelpOleMisc,
- _tlid,
- _wVerMajor,
- _wVerMinor);
- else
- return AfxOleUnregisterClass(m_clsid, m_lpszProgID);
- }
-
-
- /////////////////////////////////////////////////////////////////////////////
- // CTesthelpCtrl::CTesthelpCtrl - Constructor
-
- CTesthelpCtrl::CTesthelpCtrl()
- {
- InitializeIIDs(&IID_DTesthelp, &IID_DTesthelpEvents);
-
- }
-
-
- /////////////////////////////////////////////////////////////////////////////
- // CTesthelpCtrl::~CTesthelpCtrl - Destructor
-
- CTesthelpCtrl::~CTesthelpCtrl()
- {
- // TODO: Cleanup your control's instance data here.
- }
-
-
- /////////////////////////////////////////////////////////////////////////////
- // CTesthelpCtrl::OnDraw - Drawing function
-
- void CTesthelpCtrl::OnDraw(CDC* pdc, const CRect& rcBounds, const CRect& rcInvalid)
- {
- // Drawing code, mostly plagiarized from the Circ MFC sample.
- // The only thing done here is setting the border and drawing text
- // specified by our name properties in the control's client area.
- if(!GetBorderStyle()) //Control will always have a border.
- SetBorderStyle(TRUE);
-
- // Set up variables to use for drawing text background.
- // Use our current BackColor for the background color.
- CBrush* pOldBrush;
- CBrush bkBrush(TranslateColor(GetBackColor()));
- CPen* pOldPen;
- CRect rc = rcBounds;
- CFont* pOldFont;
-
- // Set up background mode and text color. Use the
- // current ForeColor for the text color.
- pdc->SetTextColor(TranslateColor(GetForeColor()));
- pdc->SetBkMode(TRANSPARENT);
-
- // Fill our window with the current BackColor
- pdc->FillRect(rcBounds, &bkBrush);
-
- // Save off the existing brush and pen so they
- // can be restored when we're done.
- pOldBrush = pdc->SelectObject(&bkBrush);
- pOldPen = (CPen*)pdc->SelectStockObject(BLACK_PEN);
-
- // Save off the current font so we can restore it and
- // select our current stock font into this DC
- pOldFont = SelectStockFont(pdc);
-
- // Draw the text on our window
- pdc->ExtTextOut(rc.left+10, rc.top +2,
- ETO_CLIPPED, rc, m_szName1, m_szName1.GetLength(), NULL);
- pdc->ExtTextOut(rc.left+10, rc.top +22,
- ETO_CLIPPED, rc, m_szName2, m_szName2.GetLength(), NULL);
- pdc->ExtTextOut(rc.left+10, rc.top +42,
- ETO_CLIPPED, rc, m_szName3, m_szName3.GetLength(), NULL);
-
- // Restore our DC to it's original state.
- pdc->SelectObject(pOldFont);
- pdc->SelectObject(pOldPen);
- pdc->SelectObject(pOldBrush);
-
- }
-
-
- /////////////////////////////////////////////////////////////////////////////
- // CTesthelpCtrl::DoPropExchange - Persistence support
-
- void CTesthelpCtrl::DoPropExchange(CPropExchange* pPX)
- {
- ExchangeVersion(pPX, MAKELONG(_wVerMinor, _wVerMajor));
- COleControl::DoPropExchange(pPX);
- // custom DDX
- PX_String(pPX, _T("Name1"), m_szName1);
- PX_String(pPX, _T("Name2"), m_szName2);
- PX_String(pPX, _T("Name3"), m_szName3);
- PX_Bool(pPX, _T("UseMyHelp"),m_bUseMyHelp, TRUE);
- PX_Bool(pPX, _T("ShowToolTip"), m_bShowToolTip,FALSE);
- PX_Short(pPX, _T("UsePopupHelp"), m_nUsePopupHelp,0);
- PX_String(pPX, _T("ToolTipText"),m_szToolTipText,"");
-
- }
-
-
- /////////////////////////////////////////////////////////////////////////////
- // CTesthelpCtrl::OnResetState - Reset control to default state
-
- void CTesthelpCtrl::OnResetState()
- {
- COleControl::OnResetState(); // Resets defaults found in DoPropExchange
-
- }
-
-
- /////////////////////////////////////////////////////////////////////////////
- // CTesthelpCtrl::AboutBox - Display an "About" box to the user
-
- void CTesthelpCtrl::AboutBox()
- {
- CDialog dlgAbout(IDD_ABOUTBOX_TESTHELP);
- dlgAbout.DoModal();
- }
-
-
- /////////////////////////////////////////////////////////////////////////////
- // CTesthelpCtrl message handlers
-
- void CTesthelpCtrl::OnName1Changed()
- {
-
- SetModifiedFlag();
- InvalidateControl();
- }
-
- void CTesthelpCtrl::OnName2Changed()
- {
-
- SetModifiedFlag();
- InvalidateControl();
- }
-
- void CTesthelpCtrl::OnName3Changed()
- {
- SetModifiedFlag();
- InvalidateControl();
- }
-
- LONG CTesthelpCtrl::OnHelpCommand(UINT wParam, LONG lParam)
- {
- LPHELPINFO hi = (LPHELPINFO)lParam;
-
- // If the control is in a running application
- // we'll just show context help.
- if( (AmbientUserMode()||IsWindow(m_hWnd)) && m_bUseMyHelp )
- {
- if(m_nUsePopupHelp==0)
- {
- AfxGetApp()->WinHelp(IDH_WHATISTHISTHING, HELP_CONTEXTPOPUP);
- return TRUE;
- }
- else
- {
- AfxGetApp()->WinHelp(0, HELP_CONTENTS);
- return TRUE;
- }
-
-
- }
- return Default();
-
- }
-
- void CTesthelpCtrl::OnUseMyHelpChanged()
- {
- // TODO: Add notification handler code
-
- SetModifiedFlag();
- }
-
-
- void CTesthelpCtrl::RelayEvent(UINT message, WPARAM wParam, LPARAM lParam)
- {
- // This function will create a MSG structure, fill it in a pass it to
- // the ToolTip control, m_ttip. Note that we ensure the point is in window
- // coordinates (relative to the control's window).
- if(NULL != m_ttip.m_hWnd)
- {
- MSG msg;
- msg.hwnd = m_hWnd;
- msg.message = message;
- msg.wParam = wParam;
- msg.lParam = lParam;
- msg.time = 0;
- msg.pt.x = LOWORD(lParam);
- msg.pt.y = HIWORD(lParam);
-
- m_ttip.RelayEvent(&msg);
- }
-
- }
-
- int CTesthelpCtrl::OnCreate(LPCREATESTRUCT lpCreateStruct)
- {
- if (COleControl::OnCreate(lpCreateStruct) == -1)
- return -1;
- // The following code will create a the ToolTip control
- // once the ocx's window is created.
- if(!m_ttip.Create(this))
- TRACE(_T("Unable to Create ToolTip"));
- else
- if(!m_ttip.AddTool(this, LPCTSTR(m_szToolTipText)))
- TRACE(_T("Unable to add tip for the control window"));
- else
- m_ttip.Activate(m_bShowToolTip);
-
-
- return 0;
- }
-
- void CTesthelpCtrl::OnLButtonDown(UINT nFlags, CPoint point)
- {
- // pass this message to the ToolTip control
- RelayEvent(WM_LBUTTONDOWN, (WPARAM)nFlags,
- MAKELPARAM(LOWORD(point.x), LOWORD(point.y)));
- COleControl::OnLButtonDown(nFlags, point);
- }
-
- void CTesthelpCtrl::OnLButtonUp(UINT nFlags, CPoint point)
- {
- // pass this message to the ToolTip control
- RelayEvent(WM_LBUTTONUP, (WPARAM)nFlags,
- MAKELPARAM(LOWORD(point.x), LOWORD(point.y)));
-
- COleControl::OnLButtonUp(nFlags, point);
- }
-
- void CTesthelpCtrl::OnMouseMove(UINT nFlags, CPoint point)
- {
- // pass this message to the ToolTip control
- RelayEvent(WM_MOUSEMOVE, (WPARAM)nFlags,
- MAKELPARAM(LOWORD(point.x), LOWORD(point.y)));
-
- COleControl::OnMouseMove(nFlags, point);
- }
-
- void CTesthelpCtrl::OnShowToolTipChanged()
- {
- // Activate or DeActivate the ToolTip
- if(m_ttip.m_hWnd && AmbientUserMode())
- {
- m_ttip.Activate(m_bShowToolTip);
- SetModifiedFlag();
- }
- }
-
- void CTesthelpCtrl::OnToolTipTextChanged()
- {
- // Change the ToolTip's text
- if(m_ttip.m_hWnd && AmbientUserMode())
- {
- m_ttip.UpdateTipText((LPCTSTR)m_szToolTipText,this);
- SetModifiedFlag();
- }
-
- }
-
-
- void CTesthelpCtrl::OnUsePopupHelpChanged()
- {
- // TODO: Add notification handler code
-
- SetModifiedFlag();
- }
-