Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Функция работы диалога  (Прочитано 11458 раз)
0 Пользователей и 2 Гостей смотрят эту тему.
Junk
Гость
« : 23-12-2005 10:21 » new

Имеется диалог CMyDlg, наследуемый от стандартного CDialog
class CZhelezDlg : public CDialog
В какую функцию диалога можно вписать код ожидания прихода сетевого сообщения? Т.е. такую функцию, которая выполняется, пока этот диалог не закрыли.
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #1 : 23-12-2005 11:17 » 

непонятен вопрос... Опиши задачу почётче

функцию можно добавить любую - на то и производный класс, а заставить выполняться постоянно (смотря что ты имеешь в виду) - это либо отдельный поток, либо модальный диалог
Записан

Junk
Гость
« Ответ #2 : 23-12-2005 11:29 » 

Имеется диалог, в котором отображается процесс приема информации.
Во время выполнения программы нужно все время следить когда через СОМ-порт приходит информация ф-цией WaitCommEvent(). Так вот, куда ее надо вставить, чтобы не пропустить время прихода данных через порт?
Что-нибудь типа метода диалога, когда он простаивает в ожидании.
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #3 : 23-12-2005 11:41 » 

в диалог совать ожидание не надо. Нужен немодальный диалог, типа CProgressDlg

А само событие получения данных отслеживай не в диалоге, а там, где оно у тебя и отслеживается Улыбаюсь
Просто после получения данных выставляй методом CProgressDlg::SetPos() нужный процент
Записан

Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #4 : 23-12-2005 11:46 » 

CProgressDlg - это встроенный в VC клаcc, его можновставить в проект визардом

использование:
Код:
	CProgressDlg ProDlg("процесс");
ProDlg.Create(this); //родитель-диалог
ProDlg.SetRange(0,1000); //диапазон
ProDlg.SetPos(0); //начальная позиция
ProDlg.SetStep(1); // на всякий пожарный
(ProDlg.GetDlgItem(IDCANCEL))->EnableWindow(0);

...
...
...
//выставляем 55%
ProDlg.SetPos(550);

диалог можно убить в любое время через CProgressDlg::DestroyWindow().

можно этого и не делать, он сам корректно сдохнет, когда выйдет из области видимости
« Последнее редактирование: 23-12-2005 11:48 от Алексей1153 » Записан

Junk
Гость
« Ответ #5 : 23-12-2005 11:59 » 

Не, процесс приема данных через СОМ-порт нужно отображать не ProgressBar-ом, а кол-во принятых/отосланных пакетов.
А событие получения данных я еще не решил куда вписать.
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #6 : 23-12-2005 12:10 » 

Не, процесс приема данных через СОМ-порт нужно отображать не ProgressBar-ом, а кол-во принятых/отосланных пакетов.

переопредели диалог так, как нужно Ага

> А событие получения данных я еще не решил куда вписать.
 - точно не в диалог
Записан

nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #7 : 23-12-2005 15:18 » 

Алексей, ты кажется не совсем понял или я не совсем понял. ПРоблему у Junk'a как все это дело сообразить, а не как отобразить (это я так думаю Улыбаюсь ).
Junk, создаешь кнопку на диалоге, по нажатию на которую будет запускаться поток. Потоку передаш функцию которая и будет у тебя прослушивать ком-порт (или фиг ее знает, что она должна делать). Функцию можешь объявить глобально, а можешь методом класса диалога, только в этом одна тонкость. Если в поток будешь передавать функцию, которая будет являться методом класса, то эта функция должна быть static. Вот такая вот хрень, так что учти.
В этой функции как пришло сообщение от ком-порта или от чего там я не знаю (с ком-портом увы так и не поработал, все руку не дойдут), то ты передавай сообщение (желательно создать свое Ага) диалогу. В диалоге
пишишь обработчик этого сообщения, что надо делать (ты кажется что-то хочешь там выводить).
Вот кажется и все. Если вдруг ты все это знал и для тебя это прописные истины, то извини не хотел обидеть, просто я так понял твой вопрос.
« Последнее редактирование: 20-12-2007 19:17 от Алексей1153++ » Записан

ещё один вопрос ...
Junk
Гость
« Ответ #8 : 23-12-2005 16:04 » 

О, спасибо. Именно это я и хотел узнать.
Записан
Junk
Гость
« Ответ #9 : 26-12-2005 10:19 » 

Создал поток, который вызывает функцию опроса СОМ-порта. Но как мне передать в эту функцию хендлы ожидаемых событий, хендл порта и другие переменные? Ведь если объявить их как глобальные (функция опроса нахся в файле COMPort.cpp, глобальные переменные и описание функции - в файле COMPort.h), то при компиляции выдается ошибка, что эти переменные уже определены в COMPort.obj.
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #10 : 26-12-2005 10:42 » 

когда запускаешь поток
::AfxBeginThread(thr,&data,....);

то через dаta ты можешь передать что угодно

//произвольная структура
struct s_data
{
  HANDLE h1;
  HANDLE h2;
};

s_data data;
data.h1=...;
data.h2=...;

::AfxBeginThread(thr,&data,....);
Записан

Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines