Какое событие отправляется при нажатии кнопки закрытия X для всплывающей подсказки MFC?

Я работаю над очень большим и сложным приложением для Windows, написанным на C++ и использующим MFC.

Я работаю над этой ошибкой, из-за которой, если пользователь нажимает на всплывающую подсказку, она не закрывается, а только по истечении времени ожидания.

Дело в том, что я получил событие NIN_BALLOONUSERCLICK и сумел закрыть всплывающую подсказку, но я не могу поймать событие, возникающее, когда пользователь нажимает кнопку «X» в правом верхнем углу.

Может кто-нибудь помочь мне? Какое событие мне следует искать? Я потратил около 3 дней на поиски в Интернете, но, похоже, никто не знает, как это сделать.

Если вы можете сказать мне, как заставить исчезнуть кнопку закрытия "X", это тоже будет хорошо!


person eladyanai    schedule 17.07.2011    source источник


Ответы (1)


Причина, по которой вы не можете найти такое событие, заключается в том, что его не существует. Невозможно различить всплывающую подсказку, закрытую из-за того, что пользователь щелкнул ее где-то, и всплывающую подсказку, которая была закрыта из-за того, что пользователь нажал именно кнопку закрытия ("X").

Дополнительную информацию можно найти в этой статье в блоге Рэймонда Чена: Почему значки уведомлений не отображают сообщение, когда пользователь нажимает кнопку "X"?

По сути, событие существует не для того, чтобы удерживать вас от плохих поступков, например, раздражать ваших пользователей. Нет абсолютно никаких причин, по которым вам нужно делать что-то другое в зависимости от того, как пользователь отклонил всплывающее уведомление.

Заставлять кнопку «X» исчезать — определенно неправильный выбор. Если вы спросите об этом, это будет звучать так, будто вы именно разработчик, от которого команда Windows Shell пыталась нас защитить. Рад, что кто-то поддерживает нас как ничего не подозревающих пользователей вашего приложения. Пользователям нравится иметь возможность отклонять вещи. Исследования юзабилити неоднократно указывали на то, что отсутствие кнопки «Отмена» вызывает у пользователей сильный стресс и сбивает с толку. Вам нужно работать в рамках разумного, удобного дизайна.

NIN_BALLOONUSERCLICK правильный выбор. Подсказка будет закрыта, когда пользователь нажмет на нее. В документации более подробно описаны все доступные уведомления.

person Cody Gray    schedule 17.07.2011
comment
Здравствуйте, Коди Грей! Большое спасибо за ваш ответ. и не волнуйтесь, я не тот программист, от которого вас спасает Windows, моя проблема в том, что мой класс уведомлений является одноэлементным, и когда я получаю событие NIN_BALLOONUSERCLICK, я делаю его переменные = NULL. но когда пользователь нажимает X, я не получаю событие, и всплывающая подсказка будет открываться снова и снова до истечения времени ожидания ИЛИ NIN_BALLOONUSERCLICK. - person eladyanai; 17.07.2011
comment
не могли бы вы помочь мне найти решение для этого? - person eladyanai; 17.07.2011
comment
@ eladyanai22: нет причин снова показывать всплывающую подсказку, если возвращаются флаги NIN_BALLOONUSERCLICK или NIN_BALLOONTIMEOUT. Вы должны получить NIN_BALLOONTIMEOUT либо по истечении времени ожидания всплывающей подсказки, либо когда пользователь нажимает X. - person Cody Gray; 17.07.2011
comment
я знаю, что нет причин снова показывать всплывающую подсказку, но это ошибка, я хочу закрыть ее, когда пользователь нажимает X, и сделать все переменные моего класса NULL, иначе она снова появится! Я попробую то, что вы сказали о тайм-ауте. - person eladyanai; 17.07.2011