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

81 lines
1.8 KiB
C++

#include "stdafx.h"
#include "DemoTaskbarIcon.h"
#include "resource.h" // main symbols
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CDemoTaskbarIcon
BEGIN_MESSAGE_MAP(CDemoTaskbarIcon, COXTaskbarIcon)
//{{AFX_MSG_MAP(CDemoTaskbarIcon)
ON_WM_LBUTTONDOWN()
ON_WM_LBUTTONDBLCLK()
ON_WM_RBUTTONDOWN()
ON_WM_TIMER()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
void CDemoTaskbarIcon::OnLButtonDown(UINT nFlags, CPoint point)
{
UNREFERENCED_PARAMETER(point);
UNREFERENCED_PARAMETER(nFlags);
SetTimer(IDT_TIMER, 500, (TIMERPROC) NULL);
// half sec should be enough to tell a dblclk from a single clk
}
void CDemoTaskbarIcon::OnRButtonDown(UINT nFlags, CPoint point)
{
UNREFERENCED_PARAMETER(point);
UNREFERENCED_PARAMETER(nFlags);
// no dbl in our way, no need to implement a timer
CString sMenuText = _T("WM_RBUTTONDOWN");
DoPopupMenu(sMenuText);
}
void CDemoTaskbarIcon::OnLButtonDblClk(UINT nFlags, CPoint point)
{
UNREFERENCED_PARAMETER(point);
UNREFERENCED_PARAMETER(nFlags);
m_bDownFromDlbClk = TRUE;
::PostMessage(m_pPopupOwner->m_hWnd, WM_COMMAND, ID_OPEN, (LPARAM)m_hWnd);
}
void CDemoTaskbarIcon::DoPopupMenu(LPCTSTR sDemoMenuText)
{
CMenu popMenu;
VERIFY(popMenu.LoadMenu(IDR_POPUPMENU));
// show mouse msg in the menu text
popMenu.ModifyMenu(ID_POPUP_MOUSEMSG, MF_BYCOMMAND, ID_POPUP_MOUSEMSG, sDemoMenuText);
CPoint posMouse;
GetCursorPos(&posMouse);
m_pPopupOwner->SetActiveWindow();
popMenu.GetSubMenu(0)->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON,
posMouse.x, posMouse.y, m_pPopupOwner);
}
void CDemoTaskbarIcon::OnTimer(UINT nIDEvent)
{
KillTimer(nIDEvent);
if (m_bDownFromDlbClk)
{
m_bDownFromDlbClk = FALSE;
}
else
{
CString sMenuText = _T("WM_LBUTTONDOWN");
DoPopupMenu(sMenuText);
}
}