// PropertiesDialog.cpp // // (c)1998-2025 Codejock Software, All Rights Reserved. // // THIS SOURCE FILE IS THE PROPERTY OF CODEJOCK SOFTWARE AND IS NOT TO BE // RE-DISTRIBUTED BY ANY MEANS WHATSOEVER WITHOUT THE EXPRESSED WRITTEN // CONSENT OF CODEJOCK SOFTWARE. // // THIS SOURCE CODE CAN ONLY BE USED UNDER THE TERMS AND CONDITIONS OUTLINED // IN THE XTREME TOOLKIT PRO LICENSE AGREEMENT. CODEJOCK SOFTWARE GRANTS TO // YOU (ONE SOFTWARE DEVELOPER) THE LIMITED RIGHT TO USE THIS SOFTWARE ON A // SINGLE COMPUTER. // // CONTACT INFORMATION: // support@codejock.com // http://www.codejock.com // ///////////////////////////////////////////////////////////////////////////// #include "stdafx.h" #include "TrayIconDemo.h" #include "PropertiesDialog.h" #include "MainFrm.h" #ifdef _DEBUG # define new DEBUG_NEW # undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif bool CPropertiesDialog::m_bMinimized = false; CPropertiesDialog* CPropertiesDialog::m_pInstance = NULL; ///////////////////////////////////////////////////////////////////////////// // CPropertiesDialog dialog CPropertiesDialog::CPropertiesDialog(CWnd* pParentWnd /*=NULL*/) : CXTPResizeDialog(CPropertiesDialog::IDD, pParentWnd) { //{{AFX_DATA_INIT(CPropertiesDialog) m_bAnimateIcon = FALSE; m_bHideIcon = FALSE; m_bShowIcon = TRUE; m_strBalloonMsg = _T(""); m_strBalloonTitle = _T(""); m_iTimeOut = 10; m_strToolTip = _T("Power Tools for MFC!"); m_iBalloonIcon = 1; //}}AFX_DATA_INIT m_strBalloonMsg.LoadString(IDS_BALLOON_MESSAGE); m_strBalloonTitle.LoadString(IDS_BALLOON_TITLE); // Note that LoadIcon does not require a subsequent DestroyIcon in Win32 m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); m_pParentWnd = pParentWnd; m_pInstance = this; } void CPropertiesDialog::DoDataExchange(CDataExchange* pDX) { CXTPResizeDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CPropertiesDialog) DDX_Control(pDX, IDC_TEXT_INFO, m_txtInfo); DDX_Control(pDX, IDC_TXT_TOOLTIP, m_txtToolTip); DDX_Control(pDX, IDC_TXT_TIMEOUT, m_txtTimeOut); DDX_Control(pDX, IDC_TXT_BALLOONTITLE, m_txtBalloonTitle); DDX_Control(pDX, IDC_TXT_BALLOONMSG, m_txtBalloonMsg); DDX_Control(pDX, IDC_TXT_BALLOONICON, m_txtBalloonIcon); DDX_Control(pDX, IDC_EDIT_TOOLTIP, m_editTooltip); DDX_Control(pDX, IDC_EDIT_TIMEOUT, m_editTimeout); DDX_Control(pDX, IDC_EDIT_BALLOONTITLE, m_editBalloonTitle); DDX_Control(pDX, IDC_COMBO_BALLOONICON, m_comboBalloonIcon); DDX_Control(pDX, IDC_CHK_SHOWICON, m_chkShowIcon); DDX_Control(pDX, IDC_CHECK_BIGBALOON, m_btnBigBalloon); DDX_Control(pDX, IDC_CHK_HIDEICON, m_chkHideIcon); DDX_Control(pDX, IDC_CHK_ANIMATEICON, m_chkAnimateIcon); DDX_Control(pDX, IDC_BTN_TOOLTIP, m_btnTooltip); DDX_Control(pDX, IDC_BTN_SHOWBALLOON, m_btnShowBalloon); DDX_Control(pDX, IDC_BTN_MINIMIZETRAY, m_btnMinimizeToTray); DDX_Control(pDX, IDC_TXT_BALLOONTIP, m_txtBalloonTip); DDX_Control(pDX, IDC_GBOX_BALLOONTIP, m_gboxBalloonTip); DDX_Check(pDX, IDC_CHK_ANIMATEICON, m_bAnimateIcon); DDX_Check(pDX, IDC_CHK_HIDEICON, m_bHideIcon); DDX_Check(pDX, IDC_CHK_SHOWICON, m_bShowIcon); DDX_Text(pDX, IDC_EDIT_BALLOONMSG, m_strBalloonMsg); DDV_MaxChars(pDX, m_strBalloonMsg, 255); DDX_Text(pDX, IDC_EDIT_BALLOONTITLE, m_strBalloonTitle); DDV_MaxChars(pDX, m_strBalloonTitle, 63); DDX_Text(pDX, IDC_EDIT_TIMEOUT, m_iTimeOut); DDV_MinMaxInt(pDX, m_iTimeOut, 10, 30); DDX_Text(pDX, IDC_EDIT_TOOLTIP, m_strToolTip); DDX_CBIndex(pDX, IDC_COMBO_BALLOONICON, m_iBalloonIcon); DDX_Control(pDX, IDC_EDIT_BALLOONMSG, m_editBalloonMsg); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CPropertiesDialog, CXTPResizeDialog) //{{AFX_MSG_MAP(CPropertiesDialog) ON_WM_DESTROY() ON_BN_CLICKED(IDC_CHK_SHOWICON, OnChkShowicon) ON_BN_CLICKED(IDC_CHK_HIDEICON, OnChkHideicon) ON_BN_CLICKED(IDC_CHK_ANIMATEICON, OnChkAnimateicon) ON_EN_CHANGE(IDC_EDIT_TOOLTIP, OnChangeEditTooltip) ON_BN_CLICKED(IDC_BTN_TOOLTIP, OnBtnTooltip) ON_EN_CHANGE(IDC_EDIT_BALLOONTITLE, OnChangeEditBalloontitle) ON_EN_CHANGE(IDC_EDIT_TIMEOUT, OnChangeEditTimeout) ON_EN_CHANGE(IDC_EDIT_BALLOONMSG, OnChangeEditBalloonmsg) ON_CBN_SELENDOK(IDC_COMBO_BALLOONICON, OnSelendokComboBalloonicon) ON_BN_CLICKED(IDC_BTN_SHOWBALLOON, OnBtnShowBalloon) ON_BN_CLICKED(IDC_BTN_MINIMIZETRAY, OnBtnMinimizetray) ON_BN_CLICKED(IDC_CHECK_BIGBALOON, OnBigBalloonClick) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CPropertiesDialog message handlers BOOL CPropertiesDialog::OnInitDialog() { CXTPResizeDialog::OnInitDialog(); // Set the default font for all dialog controls. SendMessageToDescendants(WM_SETFONT, (WPARAM)(HFONT)XTPFontManager()->GetFont()); // Set the icon for this dialog. SetIcon(m_hIcon, TRUE); // Set big icon SetIcon(m_hIcon, FALSE); // Set small icon // Set control resizing. SetResize(IDC_EDIT_TOOLTIP, XTP_ANCHOR_TOPLEFT, XTP_ANCHOR_TOPRIGHT); SetResize(IDC_BTN_TOOLTIP, XTP_ANCHOR_TOPRIGHT, XTP_ANCHOR_TOPRIGHT); SetResize(IDC_BTN_MINIMIZETRAY, XTP_ANCHOR_TOPRIGHT, XTP_ANCHOR_TOPRIGHT); SetResize(IDOK, XTP_ANCHOR_TOPRIGHT, XTP_ANCHOR_TOPRIGHT); SetResize(IDC_TEXT_INFO, XTP_ANCHOR_TOPLEFT, XTP_ANCHOR_TOPRIGHT); SetResize(IDC_GBOX_FEATURES, XTP_ANCHOR_TOPLEFT, XTP_ANCHOR_TOPRIGHT); SetResize(IDC_GBOX_BALLOONTIP, XTP_ANCHOR_TOPLEFT, XTP_ANCHOR_TOPRIGHT); SetResize(IDC_EDIT_BALLOONTITLE, XTP_ANCHOR_TOPLEFT, XTP_ANCHOR_TOPRIGHT); SetResize(IDC_TXT_TIMEOUT, XTP_ANCHOR_TOPRIGHT, XTP_ANCHOR_TOPRIGHT); SetResize(IDC_EDIT_TIMEOUT, XTP_ANCHOR_TOPRIGHT, XTP_ANCHOR_TOPRIGHT); SetResize(IDC_EDIT_BALLOONMSG, XTP_ANCHOR_TOPLEFT, XTP_ANCHOR_BOTTOMRIGHT); SetResize(IDC_TXT_BALLOONICON, XTP_ANCHOR_BOTTOMLEFT, XTP_ANCHOR_BOTTOMLEFT); SetResize(IDC_COMBO_BALLOONICON, XTP_ANCHOR_BOTTOMLEFT, XTP_ANCHOR_BOTTOMRIGHT); SetResize(IDC_BTN_SHOWBALLOON, XTP_ANCHOR_BOTTOMRIGHT, XTP_ANCHOR_BOTTOMRIGHT); SetResize(IDC_CHECK_BIGBALOON, XTP_ANCHOR_BOTTOMLEFT, XTP_ANCHOR_BOTTOMLEFT); m_btnBigBalloon.EnableWindow(XTPSystemVersion()->IsWinVistaOrGreater()); // Load window placement LoadPlacement(_T("CPropertiesDialog")); m_txtBalloonTip.SetFont(&XTPAuxData().xtpFontBold); EnableControls(); // display the balloon tooltip. OnBtnShowBalloon(); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } void CPropertiesDialog::OnDestroy() { // Save window placement SavePlacement(_T("CPropertiesDialog")); m_pInstance = NULL; CXTPResizeDialog::OnDestroy(); } void CPropertiesDialog::OnChkShowicon() { UpdateData(); CMainFrame* pMainFrame = (CMainFrame*)AfxGetMainWnd(); ASSERT_VALID(pMainFrame); if (m_bShowIcon) { pMainFrame->m_TrayIcon.AddIcon(); } else { pMainFrame->m_TrayIcon.RemoveIcon(); } } void CPropertiesDialog::OnChkHideicon() { UpdateData(); CMainFrame* pMainFrame = (CMainFrame*)AfxGetMainWnd(); ASSERT_VALID(pMainFrame); if (m_bHideIcon) { pMainFrame->m_TrayIcon.HideIcon(); } else { pMainFrame->m_TrayIcon.ShowIcon(); } } void CPropertiesDialog::OnChkAnimateicon() { UpdateData(); CMainFrame* pMainFrame = (CMainFrame*)AfxGetMainWnd(); ASSERT_VALID(pMainFrame); if (m_bAnimateIcon) { pMainFrame->m_TrayIcon.StartAnimation(); } else { pMainFrame->m_TrayIcon.StopAnimation(); } } void CPropertiesDialog::OnChangeEditTooltip() { UpdateData(); } void CPropertiesDialog::OnBtnTooltip() { UpdateData(); CMainFrame* pMainFrame = (CMainFrame*)AfxGetMainWnd(); ASSERT_VALID(pMainFrame); pMainFrame->m_TrayIcon.SetTooltipText(m_strToolTip); } void CPropertiesDialog::OnChangeEditBalloontitle() { UpdateData(); } void CPropertiesDialog::OnChangeEditTimeout() { } void CPropertiesDialog::OnChangeEditBalloonmsg() { UpdateData(); } void CPropertiesDialog::OnSelendokComboBalloonicon() { UpdateData(); } #ifndef NIIF_LARGE_ICON # define NIIF_LARGE_ICON 0x00000020 #endif #ifndef NIIF_NOSOUND # define NIIF_NOSOUND 0x00000010 #endif #ifndef NIIF_USER # define NIIF_USER 0x00000004 #endif UINT balloonIcon[] = { NIIF_ERROR, // Error icon. NIIF_INFO, // Information icon. NIIF_NONE, // No icon. NIIF_WARNING // Warning icon. }; void CPropertiesDialog::OnBtnShowBalloon() { if (!UpdateData()) return; CMainFrame* pMainFrame = (CMainFrame*)AfxGetMainWnd(); ASSERT_VALID(pMainFrame); HICON hIconBaloon = NULL; DWORD dwInfoFlags = (m_iBalloonIcon < 4) ? balloonIcon[m_iBalloonIcon] : (NIIF_USER); if (m_btnBigBalloon.IsWindowEnabled() && m_btnBigBalloon.GetCheck()) { hIconBaloon = static_cast( LoadImage(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDR_MAINFRAME), IMAGE_ICON, GetSystemMetrics(SM_CXICON), GetSystemMetrics(SM_CYICON), LR_DEFAULTCOLOR)); _ASSERTE(hIconBaloon); dwInfoFlags = NIIF_USER | NIIF_LARGE_ICON; } pMainFrame->m_TrayIcon.ShowBalloonTip(m_strBalloonMsg, m_strBalloonTitle, dwInfoFlags, m_iTimeOut, hIconBaloon); } void CPropertiesDialog::MinMaxWindow() { CMainFrame* pMainFrame = (CMainFrame*)AfxGetMainWnd(); ASSERT_VALID(pMainFrame); m_bMinimized = !m_bMinimized; if (m_bMinimized) { pMainFrame->m_TrayIcon.MinimizeToTray(pMainFrame); if (m_pInstance) { m_pInstance->m_btnMinimizeToTray.SetWindowText(_T("&Maximize from Tray...")); } } else { pMainFrame->m_TrayIcon.MaximizeFromTray(pMainFrame); if (m_pInstance) { m_pInstance->m_btnMinimizeToTray.SetWindowText(_T("&Minimize to Tray...")); } } } void CPropertiesDialog::OnBtnMinimizetray() { MinMaxWindow(); } void CPropertiesDialog::OnBigBalloonClick() { m_comboBalloonIcon.EnableWindow(!m_btnBigBalloon.GetCheck()); m_txtBalloonIcon.EnableWindow(!m_btnBigBalloon.GetCheck()); } void CPropertiesDialog::EnableControls() { CMainFrame* pMainFrame = (CMainFrame*)AfxGetMainWnd(); BOOL bEnable = pMainFrame->m_TrayIcon.IsShellVersion5(); // Requirements: // Windows 2000 or later, VC6 with platform SDK or // later to use these features. m_chkHideIcon.EnableWindow(bEnable); m_txtBalloonTip.EnableWindow(bEnable); m_txtBalloonTitle.EnableWindow(bEnable); m_editBalloonTitle.EnableWindow(bEnable); m_txtTimeOut.EnableWindow(bEnable); m_editTimeout.EnableWindow(bEnable); m_txtBalloonMsg.EnableWindow(bEnable); m_editBalloonMsg.EnableWindow(bEnable); m_txtBalloonIcon.EnableWindow(bEnable); m_comboBalloonIcon.EnableWindow(bEnable); m_btnShowBalloon.EnableWindow(bEnable); m_editBalloonMsg.SetBackColor(bEnable ? GetXtremeColor(COLOR_WINDOW) : GetXtremeColor(COLOR_3DFACE)); } INT_PTR CPropertiesDialog::DoModal(CWnd* pParentWnd) { m_pParentWnd = pParentWnd; return CXTPResizeDialog::DoModal(); }