В старом приложении MFC я должен выполнить запрос на подключение к сети к другому компьютеру, что может занять несколько секунд в случае неправильного имени компьютера, прежде чем истечет время ожидания запроса. Поэтому я запускаю рабочий поток, чтобы установить начальное соединение, чтобы пользовательский интерфейс все еще реагировал.
Запрос на подключение к сети инициируется пользователем, выбирающим пункт меню, который вызывает диалоговое окно для заполнения информации о целевом компьютере. Когда пользователь нажимает кнопку «ОК» в диалоговом окне, запрос на сетевое подключение обрабатывается с использованием рабочего потока.
Что я хочу сделать, так это изменить курсор мыши на индикатор ожидания, а затем удалить индикатор ожидания после фактического установления соединения или истечения времени попытки.
Я сталкиваюсь с тем, что курсор мыши остается указателем, а курсор мыши не меняется на индикатор ожидания.
Сначала я думал, что могу просто изменить курсор мыши с помощью функции BeginWaitCursor()
. Однако это не имеет никакого эффекта, который я вижу.
Дальнейшее чтение показывает, что мне также нужно переопределить метод afx_msg BOOL OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
класса CScrollView
, однако я не могу найти ничего полезного, что описывает, что мне нужно делать в этом методе. Кажется, что метод OnSetCursor()
вызывается по разным причинам, и простое перемещение мыши вызывает срабатывание точки останова в этом методе.
Похоже, что в методе OnSetCursor()
я должен определить текущее состояние приложения и на его основе использовать функцию SetCursor()
для установки одного из возможных стилей курсора мыши, которые ранее были загружены с помощью LoadCursor()
. См. Запретить приложению MFC возвращать курсор к значку по умолчанию, а также Изменить курсор на время потока а>
Однако я не уверен, так ли это на самом деле, и что на самом деле означают параметры, предоставляемые OnSetCursor()
, и как их использовать.
Во втором из двух приведенных выше сообщений SO кажется, что глобальный используется, чтобы решить, вызывается ли метод CView::OnSetCursor()
по умолчанию или нет.
CWaitCursor
? - person 1201ProgramAlarm   schedule 16.09.2019CWaitCursor
выходит из области действия. Я обнаружил, что если я используюBeginWaitCursor()
, а затем помещаю сон после запуска рабочего потока, замораживая пользовательский интерфейс, я также вижу индикацию ожидания курсора мыши. Итак, похоже, что в дополнение кBeginWaitCursor()
мне нужно сделать еще кое-что, чтобы курсор оставался ожидающим курсором. - person Richard Chambers   schedule 16.09.2019CWaitCursor
, но, поскольку ваш основной поток сообщений продолжает работать, он все равно может заменить курсор. Как вы справляетесь с тем, что пользователь выбирает другой пункт меню (или какое-то другое взаимодействие), пока вы пытаетесь подключиться к сети? Возможно, вам придется прибегнуть к модальному диалоговому окну Connecting to server app. - person 1201ProgramAlarm   schedule 16.09.2019OnSetCursor()
для основного фрейм-окна. - person Constantine Georgiou   schedule 16.09.2019