SendMessage(WM_COMMAND,ID_FILE_SAVE,0); 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

SendMessage(WM_COMMAND,ID_FILE_SAVE,0);

Поиск

    SendMessage(WM_COMMAND,ID_FILE_SAVE,0);

    CString s=GetActiveDocument()->GetPathName();

    ifstream dat(s,ios::nocreate);

    if (!dat.is_open()) throw Error(1);

    Problem * pP = new Problem();

    dat >> *pP;

    m_thisThreadParams.pProblem=pP;

    dat.close();

    m_thisThreadParams.hWnd = GetSafeHwnd();

m_thisThreadParams.pResults=NULL;

    

    AfxBeginThread(SolveFunction,&m_thisThreadParams);

}

catch (Error&er)

{

er.ErrorMessage();

}

}

 

Вывод сообщений об ошибках

 

Для вывода сообщений об ошибках теперь в классе обработки исключений вместо cout, нужно использовать глобальную функцию AfxMessageBox, которая выводит сообщение заданного содержания. Например, так:

::AfxMessageBox(“Файл не найден.”,MB_OK|MB_ICONSTOP);

После текста сообщения указываются флаги кнопок и иконок, которые должны содержаться в окошке сообщения.При желании можно выяснить какая кнопка нажата пользователем по возвращаемому целочисленному коду (см. MSDN).

 

Экстренная остановка рабочего потока

 

Требование экстренной остановки будем передавать из главного потока в рабочий с помощью командного сообщения от новой пользовательской клавиши-акселератора <ESC>.Зайдем в соответствующий раздел ресурсов: ResourceView->Optimizer resources->Accelerator->IDR_MAINFRAME и выберем двойным щелчком последнюю (пустую) строку в таблице клавиш-акселераторов. В окошке Accel Properties в поле Key: выберем нужную нам клавишу “VK_ESCAPE” и введем в поле ID: имя ее идентификатора, например, “ID_ESCAPE”. Галочки в группе Modifiers должны все быть сняты. Жмем <Enter>.

 

Создаем обработчик нового сообщения WM_COMMAND: View->ClassWizard. Открываем вкладку Message Maps, выбираем Class name->”CCildFrame" и новую клавишу-акселератор: Object IDs:-> ID_ESCAPE. Messages:->”COMMAND”->Add Function и соглашаемся с предложенным именем функции “OnEscape”.

Обсудим теперь каким образом остановить процесс решения из обработчика OnEscape. Здесь можно предложить 2 способа.

 

1 способ: отправка пользовательского сообщения от основного потока дополнительному.

 

Как уже говорилось, в Win32 бывают потоки двух видов: потоки пользовательского интерфейса (у которых есть свой цикл обработки сообщений) и рабочие потоки (у которых этого цикла нет).

 

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

 

Напоминаю, что обычно цикл обработки сообщений организовывается следующим образом:

 



Поделиться:


Последнее изменение этой страницы: 2024-06-27; просмотров: 44; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.216.196 (0.014 с.)