// HelpPropertyPage.cpp : implementation file // #include "stdafx.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CHelpPropertyPage property page CHelpPropertyPage::CHelpPropertyPage(UINT uIDD) : CAutoDeletePropPage(uIDD), m_hWndWhatsThis (0) { //{{AFX_DATA_INIT(CHelpPropertyPage) // NOTE: the ClassWizard will add member initialization here //}}AFX_DATA_INIT } CHelpPropertyPage::~CHelpPropertyPage() { } void CHelpPropertyPage::DoDataExchange(CDataExchange* pDX) { CAutoDeletePropPage::DoDataExchange(pDX); //{{AFX_DATA_MAP(CHelpPropertyPage) // NOTE: the ClassWizard will add DDX and DDV calls here //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CHelpPropertyPage, CAutoDeletePropPage) //{{AFX_MSG_MAP(CHelpPropertyPage) ON_WM_CONTEXTMENU() //}}AFX_MSG_MAP ON_MESSAGE(WM_HELP, OnHelp) ON_COMMAND(IDM_WHATS_THIS, OnWhatsThis) END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CHelpPropertyPage message handlers void CHelpPropertyPage::OnWhatsThis() { _TRACE (1, L"Entering CHelpPropertyPage::OnWhatsThis\n"); // Display context help for a control if ( m_hWndWhatsThis ) { DoContextHelp (m_hWndWhatsThis); } _TRACE (-1, L"Leaving CHelpPropertyPage::OnWhatsThis\n"); } BOOL CHelpPropertyPage::OnHelp(WPARAM /*wParam*/, LPARAM lParam) { _TRACE (1, L"Entering CHelpPropertyPage::OnHelp\n"); const LPHELPINFO pHelpInfo = (LPHELPINFO)lParam; if (pHelpInfo && pHelpInfo->iContextType == HELPINFO_WINDOW) { // Display context help for a control DoContextHelp ((HWND) pHelpInfo->hItemHandle); } _TRACE (-1, L"Leaving CHelpPropertyPage::OnHelp\n"); return TRUE; } void CHelpPropertyPage::DoContextHelp (HWND /*hWndControl*/) { } void CHelpPropertyPage::OnContextMenu(CWnd* /*pWnd*/, CPoint point) { // point is in screen coordinates _TRACE (1, L"Entering CHelpPropertyPage::OnContextMenu\n"); CMenu bar; if ( bar.LoadMenu(IDR_WHATS_THIS_CONTEXT_MENU1) ) { CMenu& popup = *bar.GetSubMenu (0); ASSERT(popup.m_hMenu); if ( popup.TrackPopupMenu (TPM_RIGHTBUTTON | TPM_LEFTBUTTON, point.x, // in screen coordinates point.y, // in screen coordinates this) ) // route commands through main window { m_hWndWhatsThis = 0; ScreenToClient (&point); CWnd* pChild = ChildWindowFromPoint ( point, // in client coordinates CWP_SKIPINVISIBLE | CWP_SKIPTRANSPARENT); if ( pChild ) m_hWndWhatsThis = pChild->m_hWnd; } } _TRACE (-1, L"Leaving CHelpPropertyPage::OnContextMenu\n"); } ///////////////////////////////////////////////////////////////////////////// // CHelpDialog property page CHelpDialog::CHelpDialog(UINT uIDD, CWnd* pParentWnd) : CDialog(uIDD, pParentWnd), m_hWndWhatsThis (0) { //{{AFX_DATA_INIT(CHelpDialog) // NOTE: the ClassWizard will add member initialization here //}}AFX_DATA_INIT } CHelpDialog::~CHelpDialog() { } void CHelpDialog::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CHelpDialog) // NOTE: the ClassWizard will add DDX and DDV calls here //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CHelpDialog, CDialog) //{{AFX_MSG_MAP(CHelpDialog) ON_WM_CONTEXTMENU() //}}AFX_MSG_MAP ON_MESSAGE(WM_HELP, OnHelp) ON_COMMAND(IDM_WHATS_THIS, OnWhatsThis) END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CHelpDialog message handlers void CHelpDialog::OnWhatsThis() { _TRACE (1, L"Entering CHelpDialog::OnWhatsThis\n"); // Display context help for a control if ( m_hWndWhatsThis ) { DoContextHelp (m_hWndWhatsThis); } _TRACE (-1, L"Leaving CHelpDialog::OnWhatsThis\n"); } BOOL CHelpDialog::OnHelp(WPARAM /*wParam*/, LPARAM lParam) { _TRACE (1, L"Entering CHelpDialog::OnHelp\n"); const LPHELPINFO pHelpInfo = (LPHELPINFO)lParam; if (pHelpInfo && pHelpInfo->iContextType == HELPINFO_WINDOW) { // Display context help for a control DoContextHelp ((HWND) pHelpInfo->hItemHandle); } _TRACE (-1, L"Leaving CHelpDialog::OnHelp\n"); return TRUE; } void CHelpDialog::DoContextHelp (HWND /*hWndControl*/) { } void CHelpDialog::OnContextMenu(CWnd* /*pWnd*/, CPoint point) { // point is in screen coordinates _TRACE (1, L"Entering CHelpDialog::OnContextMenu\n"); CMenu bar; if ( bar.LoadMenu(IDR_WHATS_THIS_CONTEXT_MENU1) ) { CMenu& popup = *bar.GetSubMenu (0); ASSERT(popup.m_hMenu); if ( popup.TrackPopupMenu (TPM_RIGHTBUTTON | TPM_LEFTBUTTON, point.x, // in screen coordinates point.y, // in screen coordinates this) ) // route commands through main window { m_hWndWhatsThis = 0; ScreenToClient (&point); CWnd* pChild = ChildWindowFromPoint ( point, // in client coordinates CWP_SKIPINVISIBLE | CWP_SKIPTRANSPARENT); if ( pChild ) m_hWndWhatsThis = pChild->m_hWnd; } } _TRACE (-1, L"Leaving CHelpDialog::OnContextMenu\n"); }