Дополнения к шагам 107 и 108.

У получившейся программы есть два забавных побочных эффекта:
  1. Если нажать кнопку SysTray, и сразу после этого завершить нажатием "OK" или "Escape", иконка не всегда исчезает из SysTray ! Почему иногда иконка исчезает, а иногда нет - непонятно. Но, если перегрузить функцию DestroyWindow() (при помощи хотя бы того же ClassWizard) и вписать в код всего одну строчку:
    BOOL CTestSystrayDlg::DestroyWindow()
    {
     OnButton2();
    
     return CDialog::DestroyWindow();
    }
    
    ,то программа, закрываясь, сама будет тушить свою иконку (например, имитируя нажатие кнопки "Remove" перед закрытием).
  2. Если после запуска программы, не нажав "SysTray", сразу нажать "Hide", то диалоговое окно исчезнет, а иконка не появится. И щелкать мышью больше некуда, чтобы вернуть диалоговое окно. Простейший, наверное, способ эту неприятность исправить следующий:
    void CTestSystrayDlg::OnButton3()
    {
     OnButton1();
     ShowWindow(SW_HIDE);
    }
    
    Т.е. прежде чем прятать окошко, имитируем нажатие кнопки "SysTray", чтобы иконка точно появилась.

    И еще пожелание. Дабы поменьше читатели типа меня чувствовали себя сначала дураками, предлагаю вместо кода типа

    ...
    if (lp==515) AfxMessageBox("Click");
    ...
    
    (это в функции CTestSystrayDlg::OnIcon) использовать код типа
    ...
    if (lp==WM_LBUTTONDBLCLK) AfxMessageBox("Click");
    ...
    
    Работает идентично, а выглядит все ж не так непонятно. Если бы еще и узнать, где в хелпах о таких подробностях почитать можно... Надо ж на основе уроков mfcbystep и свой собственный код научиться сочинять.

Прислал Andriy Yashan.
Автор : Каев Артем.