2025-11-27 16:46:48 +09:00

345 lines
10 KiB
C++

// OXCustomizeIntelliMousePage.cpp : implementation file
//
// Version: 9.3
#include "stdafx.h"
#include "OXCustomizeIntelliMousePage.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
BOOL COXCustomizeIntelliMouseOrganizer::IsQualified(HWND hWnd, LPCTSTR lpszWndClass)
{
ASSERT(IsAttachedAllInThread());
ASSERT(m_pCustomizeIntelliMousePage!=NULL);
if(!COXIntelliMouseOrganizer::IsQualified(hWnd,lpszWndClass))
return FALSE;
return m_pCustomizeIntelliMousePage->
IsQualifiedForIntelliMouseSupport(hWnd,lpszWndClass);
}
/////////////////////////////////////////////////////////////////////////////
// COXCustomizeIntelliMousePage dialog
IMPLEMENT_DYNCREATE(COXCustomizeIntelliMousePage, COXCustomizePage)
COXCustomizeIntelliMousePage::COXCustomizeIntelliMousePage()
{
//{{AFX_DATA_INIT(COXCustomizeIntelliMousePage)
m_bAltKey = FALSE;
m_bCtrlKey = FALSE;
m_bOnlyViews = FALSE;
m_bShiftKey = FALSE;
m_bSupportIntelliMouse = TRUE;
m_nStartEvent = 0;
//}}AFX_DATA_INIT
m_nDialogID=IDD;
m_sProfileName.Empty();
static CString sStr1;
static CString sStr2;
static CString sStr3;
static CString sStr4;
static CString sStr5;
static CString sStr6;
static CString sStr7;
static CString sStr8;
static CString sStr9;
VERIFY(sStr1.LoadString(IDS_OX_CSTMZEINTELLILBDOWN ));//"Left button down"
VERIFY(sStr2.LoadString(IDS_OX_CSTMZEINTELLIMBDOWN ));//"Middle button down"
VERIFY(sStr3.LoadString(IDS_OX_CSTMZEINTELLIRBDOWN ));//"Right button down"
VERIFY(sStr4.LoadString(IDS_OX_CSTMZEINTELLILBUP ));//"Left button up"
VERIFY(sStr5.LoadString(IDS_OX_CSTMZEINTELLIMBUP ));//"Middle button up"
VERIFY(sStr6.LoadString(IDS_OX_CSTMZEINTELLIRBUP ));//"Right button up"
VERIFY(sStr7.LoadString(IDS_OX_CSTMZEINTELLILBDBL ));//"Left button double click"
VERIFY(sStr8.LoadString(IDS_OX_CSTMZEINTELLIMBDBL ));//"Middle button double click"
VERIFY(sStr9.LoadString(IDS_OX_CSTMZEINTELLIRBDBL ));//"Right button double click"
static LPCTSTR str1[] = {(LPCTSTR) sStr1, _T("WM_LBUTTONDOWN")};
static LPCTSTR str2[] = {(LPCTSTR) sStr2, _T("WM_MBUTTONDOWN")};
static LPCTSTR str3[] = {(LPCTSTR) sStr3, _T("WM_RBUTTONDOWN")};
static LPCTSTR str4[] = {(LPCTSTR) sStr4, _T("WM_LBUTTONUP")};
static LPCTSTR str5[] = {(LPCTSTR) sStr5, _T("WM_MBUTTONUP")};
static LPCTSTR str6[] = {(LPCTSTR) sStr6, _T("WM_RBUTTONUP")};
static LPCTSTR str7[] = {(LPCTSTR) sStr7, _T("WM_LBUTTONDBLCLK")};
static LPCTSTR str8[] = {(LPCTSTR) sStr8, _T("WM_MBUTTONDBLCLK")};
static LPCTSTR str9[] = {(LPCTSTR) sStr9, _T("WM_RBUTTONDBLCLK")};
m_mapStartEventDescriptions.SetAt(WM_LBUTTONDOWN,(LPCTSTR*) str1);
m_mapStartEventDescriptions.SetAt(WM_MBUTTONDOWN,(LPCTSTR*) str2);
m_mapStartEventDescriptions.SetAt(WM_RBUTTONDOWN,(LPCTSTR*) str3);
m_mapStartEventDescriptions.SetAt(WM_LBUTTONUP,(LPCTSTR*) str4);
m_mapStartEventDescriptions.SetAt(WM_MBUTTONUP,(LPCTSTR*) str5);
m_mapStartEventDescriptions.SetAt(WM_RBUTTONUP,(LPCTSTR*) str6);
m_mapStartEventDescriptions.SetAt(WM_LBUTTONDBLCLK,(LPCTSTR*) str7);
m_mapStartEventDescriptions.SetAt(WM_MBUTTONDBLCLK,(LPCTSTR*) str8);
m_mapStartEventDescriptions.SetAt(WM_RBUTTONDBLCLK,(LPCTSTR*) str9);
m_arrStartEvents.Add(WM_LBUTTONDOWN);
m_arrStartEvents.Add(WM_MBUTTONDOWN);
m_arrStartEvents.Add(WM_RBUTTONDOWN);
m_arrStartEvents.Add(WM_LBUTTONUP);
m_arrStartEvents.Add(WM_MBUTTONUP);
m_arrStartEvents.Add(WM_RBUTTONUP);
m_arrStartEvents.Add(WM_LBUTTONDBLCLK);
m_arrStartEvents.Add(WM_MBUTTONDBLCLK);
m_arrStartEvents.Add(WM_RBUTTONDBLCLK);
m_intelliMouseOrganizer.m_pCustomizeIntelliMousePage=this;
}
COXCustomizeIntelliMousePage::~COXCustomizeIntelliMousePage()
{
}
BOOL COXCustomizeIntelliMousePage::
InitializeIntelliMouse(BOOL bSupportIntelliMouse/*=TRUE*/,
UINT nStartEventID/*=WM_MBUTTONDOWN*/,
DWORD dwKeyState/*=0*/,
BOOL bOnlyViews/*=TRUE*/,
LPCTSTR lpszProfileName/*=_T("CustomizeIntelliMouse")*/)
{
int nIndex=0;
for(nIndex=0; nIndex<m_arrStartEvents.GetSize(); nIndex++)
{
if(nStartEventID==m_arrStartEvents[nIndex])
break;
}
if(nIndex==m_arrStartEvents.GetSize())
{
TRACE(_T("COXCustomizeIntelliMousePage::InitializeIntelliMouse: invalid start event ID has been specified\n"));
return FALSE;
}
ASSERT(nIndex>=0 && nIndex<m_mapStartEventDescriptions.GetCount());
m_bSupportIntelliMouse=bSupportIntelliMouse;
m_bOnlyViews=bOnlyViews;
m_nStartEvent=nIndex;
m_bAltKey=((dwKeyState&KEYPRESSED_ALT)!=0);
m_bCtrlKey=((dwKeyState&KEYPRESSED_CONTROL)!=0);
m_bShiftKey=((dwKeyState&KEYPRESSED_SHIFT)!=0);
CWinApp* pApp=AfxGetApp();
ASSERT(pApp!=NULL);
if(lpszProfileName!=NULL)
{
m_sProfileName=lpszProfileName;
m_bSupportIntelliMouse=pApp->GetProfileInt(m_sProfileName,
_T("SupportIntelliMouse"),m_bSupportIntelliMouse);
m_bOnlyViews=pApp->GetProfileInt(m_sProfileName,
_T("OnlyViews"),m_bOnlyViews);
m_nStartEvent=pApp->GetProfileInt(m_sProfileName,
_T("StartEventIndex"),m_nStartEvent);
m_bAltKey=pApp->GetProfileInt(m_sProfileName,
_T("AltKeyPressed"),m_bAltKey);
m_bCtrlKey=pApp->GetProfileInt(m_sProfileName,
_T("CtrlKeyPressed"),m_bCtrlKey);
m_bShiftKey=pApp->GetProfileInt(m_sProfileName,
_T("ShiftKeyPressed"),m_bShiftKey);
}
SetupIntelliMouseSupport();
return TRUE;
}
BOOL COXCustomizeIntelliMousePage::OnCloseManager(BOOL bIsOk)
{
CWinApp* pApp=AfxGetApp();
ASSERT(pApp!=NULL);
if(bIsOk)
{
if(!ApplyChanges())
return FALSE;
if(!m_sProfileName.IsEmpty())
{
pApp->WriteProfileInt(m_sProfileName,
_T("SupportIntelliMouse"),m_bSupportIntelliMouse);
pApp->WriteProfileInt(m_sProfileName,
_T("OnlyViews"),m_bOnlyViews);
pApp->WriteProfileInt(m_sProfileName,
_T("StartEventIndex"),m_nStartEvent);
pApp->WriteProfileInt(m_sProfileName,
_T("AltKeyPressed"),m_bAltKey);
pApp->WriteProfileInt(m_sProfileName,
_T("CtrlKeyPressed"),m_bCtrlKey);
pApp->WriteProfileInt(m_sProfileName,
_T("ShiftKeyPressed"),m_bShiftKey);
}
}
else
{
if(!m_sProfileName.IsEmpty())
{
m_bSupportIntelliMouse=pApp->GetProfileInt(m_sProfileName,
_T("SupportIntelliMouse"),m_bSupportIntelliMouse);
m_bOnlyViews=pApp->GetProfileInt(m_sProfileName,
_T("OnlyViews"),m_bOnlyViews);
m_nStartEvent=pApp->GetProfileInt(m_sProfileName,
_T("StartEventIndex"),m_nStartEvent);
m_bAltKey=pApp->GetProfileInt(m_sProfileName,
_T("AltKeyPressed"),m_bAltKey);
m_bCtrlKey=pApp->GetProfileInt(m_sProfileName,
_T("CtrlKeyPressed"),m_bCtrlKey);
m_bShiftKey=pApp->GetProfileInt(m_sProfileName,
_T("ShiftKeyPressed"),m_bShiftKey);
SetupIntelliMouseSupport();
}
}
return TRUE;
}
void COXCustomizeIntelliMousePage::DoDataExchange(CDataExchange* pDX)
{
COXCustomizePage::DoDataExchange(pDX);
//{{AFX_DATA_MAP(COXCustomizeIntelliMousePage)
DDX_Control(pDX, IDC_OX_SEPARATOR_START_EVENT, m_sepStartEvent);
DDX_Control(pDX, IDC_OX_SEPARATOR_KEYPRESSED, m_sepKeyPressed);
DDX_Control(pDX, IDC_OX_COMBO_START_EVENT, m_comboStartEvent);
DDX_Check(pDX, IDC_OX_CHECK_ALT, m_bAltKey);
DDX_Check(pDX, IDC_OX_CHECK_CTRL, m_bCtrlKey);
DDX_Check(pDX, IDC_OX_CHECK_ONLY_VIEWS, m_bOnlyViews);
DDX_Check(pDX, IDC_OX_CHECK_SHIFT, m_bShiftKey);
DDX_Check(pDX, IDC_OX_CHECK_SUPPORT_INTELLIMOUSE, m_bSupportIntelliMouse);
DDX_CBIndex(pDX, IDC_OX_COMBO_START_EVENT, m_nStartEvent);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(COXCustomizeIntelliMousePage, COXCustomizePage)
//{{AFX_MSG_MAP(COXCustomizeIntelliMousePage)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// COXCustomizeIntelliMousePage message handlers
BOOL COXCustomizeIntelliMousePage::Load(const COXCustomizeManager* pCustomizeManager)
{
// Call default implementation. It will load this demo dialog as the first
// page and will create About and CodeSample pages if specified.
if(!COXCustomizePage::Load(pCustomizeManager))
return FALSE;
return TRUE;
}
void COXCustomizeIntelliMousePage::Unload()
{
// add here code for cleaning up all objects created by demo
//
//
//////////////////////////////////////////////////////////////////////////
COXCustomizePage::Unload();
}
void COXCustomizeIntelliMousePage::OnInitDialog()
{
// must call default implementation
COXCustomizePage::OnInitDialog();
// add here initialization code for your demo dialog. Treat it as a
// normal COXCustomizePage::OnInitDialog function
// populate multicolumn combo box
m_comboStartEvent.SetColumnCount(2);
m_comboStartEvent.SetColumnWidth(0,150);
m_comboStartEvent.SetColumnWidth(1,150);
for(int nIndex=0; nIndex<m_arrStartEvents.GetSize(); nIndex++)
{
LPCTSTR* ppszString=NULL;
VERIFY(m_mapStartEventDescriptions.
Lookup(m_arrStartEvents[nIndex],ppszString));
ASSERT(ppszString!=NULL);
VERIFY(m_comboStartEvent.AddString((LPCTSTR*)ppszString,2)!=-1);
}
m_comboStartEvent.SetFitToSize(TRUE);
// layout
//
m_LayoutManager.TieChild(&m_sepKeyPressed,
OX_LMS_LEFT|OX_LMS_RIGHT,OX_LMT_SAME);
m_LayoutManager.TieChild(&m_sepStartEvent,
OX_LMS_LEFT|OX_LMS_RIGHT,OX_LMT_SAME);
m_LayoutManager.TieChild(&m_comboStartEvent,
OX_LMS_LEFT|OX_LMS_RIGHT,OX_LMT_SAME);
//
///////////////////////////////////////
m_bInitialized=TRUE;
UpdateData(FALSE);
}
BOOL COXCustomizeIntelliMousePage::ApplyChanges()
{
if(!UpdateData(TRUE))
return FALSE;
SetupIntelliMouseSupport();
return TRUE;
}
void COXCustomizeIntelliMousePage::SetupIntelliMouseSupport()
{
ASSERT(m_nStartEvent>=0 && m_nStartEvent<m_arrStartEvents.GetSize());
if(m_intelliMouseOrganizer.IsAttachedAllInThread())
VERIFY(m_intelliMouseOrganizer.DetachAllInThread());
if(m_bSupportIntelliMouse)
{
DWORD dwKeyState=0;
if(m_bShiftKey)
dwKeyState|=KEYPRESSED_SHIFT;
if(m_bCtrlKey)
dwKeyState|=KEYPRESSED_CONTROL;
if(m_bAltKey)
dwKeyState|=KEYPRESSED_ALT;
VERIFY(m_intelliMouseOrganizer.AttachAllInThread(::GetCurrentThreadId(),
m_arrStartEvents[m_nStartEvent],dwKeyState));
}
}
BOOL COXCustomizeIntelliMousePage::
IsQualifiedForIntelliMouseSupport(HWND hWnd, LPCTSTR lpszWndClass)
{
UNREFERENCED_PARAMETER(lpszWndClass);
if(!m_bOnlyViews)
return TRUE;
CWnd* pWnd=CWnd::FromHandlePermanent(hWnd);
if(pWnd==NULL)
return FALSE;
if(!pWnd->IsKindOf(RUNTIME_CLASS(CView)))
return FALSE;
return TRUE;
}