На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела Visual C++ / MFC / WTL (далее Раздела)
1) На Раздел распространяются все Правила Форума.
2) Перед тем, как создать новый топик, убедитесь, что Вы читали Правила создания тем в Разделе.
3) Вопросы, не связанные с программированием (настройки MS Visual Studio, книги, библиотеки и т.д.),
обсуждаются в разделе C/C++: Прочее
4) Вопросы разработки .NET (Windows Form, C++/CLI и т.п.) приложений на Visual C++/C# обсуждаются в разделе .NET.
5) Нарушение Правил может повлечь наказание со стороны модераторов.

Полезные ссылки:
user posted image FAQ Раздела user posted image Обновления для FAQ Раздела user posted image Поиск по Разделу user posted image MSDN Library Online
Модераторы: ElcnU
Страницы: (8) « Первая ... 5 6 [7] 8  все  ( Перейти к последнему сообщению )  
> Visual Studio 2008 + COM Port
    Цитата Acvarif @
    Былдер в свое время был идеальной средой для разработки визуальных приложений. Если в метку типа Label1 (Static Control)нужно поместить текст то без всяких заморочек
    ExpandedWrap disabled
      Label1->Caption = "текст";

    MFC код длинее, но не сложнее :D
    ExpandedWrap disabled
      SetDlgItemText(IDC_STATIC1,"текст");

    IDC_STATIC1 - это идентификатор ресурса в файле rc, SetDlgItemText - функция-член класса CWnd. Все просто :)

    Цитата Acvarif @
    MFC неплохо придуман. На первый взгляд небольшое неудобство - мало компонентов. Хотя может в большинстве случаев того, что есть, вполне достаточно..

    их (компонентов) вообще нет, это контролы - классы для управления объектами виндос (окнами) :D
    Сообщение отредактировано: Cfon -
      Спасибо за помощь.
      Билдеровскую прогу удалось повторить на MFC. Все (прием-передача) крутится в одном потоке. Немного причешу и выложу в архиве. Может кому будет полезна.
      Далее задачка разобрать по косточкам буфер приема и отобразить на цветной панели цветные прямоугольники. Панель разбита сеткой прямоугольных ячеек. 120 по горизонтали, 500 по вертикали 120Х500. Принимаемые данные грубо говоря это координаты ячеек в сетке которые нужно засвечивать цветом отличным от цвета сетки и цвета пустой ячейки. Пока это задача минимум. Как правильно поступиь? Прикручивать к проекту OpenGl (GLUT и т.п.) или можно обойтись средствами MFC?
        И ради этого ты с Билдера ушёл?
        Цитата
        приклепать сложную графику
          Нет. Дальше графика действительно сложная. Сетка это пока начало.
            Цитата Acvarif @
            Нет. Дальше графика действительно сложная. Сетка это пока начало.

            я бы GLUT прикрутил для реально сложной графики :)
              В скрепке архив проекта MFCtest. Прикреплённый файлПрикреплённый файлMFCtest.rar (146,87 Кбайт, скачиваний: 81) Может кому пригодится в качестве примера приема-передачи по COM в асинхронном режиме. Также в архиве есть текстовый файл MFCtest.txt который является тестовой текстовой строкой для известной программы работы с COM портом ComPortTolkit. На ПК должно быть как минимум 2 COM порта соединенных перекрестным кабелем (выход передачи одного на вход приема другого). Один работает на передачу из программы ComPortTolkit. Другой на прием с пом. проги из проекта MFCtest.
              ComPortTolkit передает порядка 850 байт на MFCtest обратно получает ответ 128 байт.
              Если где чего не так не судите строго.
                Цитата Acvarif @
                Прикручивать к проекту OpenGl (GLUT и т.п.) или можно обойтись средствами MFC?

                Скорее всего MFC (т.е. обычного GDI) хватит.
                  Все же попробую GLUT. Скачал и раскидал нужные файлы по нужным местам http://rucodes.com/opengl-microsoft-visual-studio-c.html
                  Дальше немного растерялся. В проекте имеется глобальный буфер bufrd[] где каждую секунду обновляются данные с COM порта, которые нуно разобрать и отобразить в графическом окне.
                  Каким образом создается графическое окно с GLUT? Это должен быть отдельный файл в составе существующего проекта? Какова технология добавления графического окна к уже существующему проекту?
                    Цитата Acvarif @
                    Все же попробую GLUT.
                    ...
                    В проекте имеется глобальный буфер bufrd[]...
                    Дальше немного растерялся.
                    ...
                    Какова технология добавления графического окна к уже существующему проекту?

                    Упс...
                    Получается, что ты даже отдалённо не знаешь, какова
                    должна быть структура проекта.
                    А выбор уже сделал.. :huh:
                    Глобальный буфер с данными в многопоточной программе я бы не посоветовал.
                    Это и не нужно ни с какой точки зрения.
                      Структуру не представляю. Простейший поиск по сети - приложения GLUT консольные WIN32. Какова должна быть структура MFC GLUT пока смутно представляю. Очевидно должен быть еще один поток. В имеющемся файле ..Dlg или.. не врубаюсь. Чем плох глобальный буфер?
                      Сообщение отредактировано: Acvarif -
                        Цитата Acvarif @
                        Очевидно должен быть еще один поток. В имеющемся файле ..Dlg или.. не врубаюсь. Чем плох глобальный буфер?

                        Этим вот и плох.
                        Из одного потока буфер заполняется.
                        Из другого читается.
                        Как будешь синхронизировать эти потоки для доступа к данным ?
                          Думаю с помщью флага. Ведь период обмена 1 сек. Буфер заполняется (115200) примерно через 100 мс. Далее установка флага и работа с буфером до конца секунды. Но обычно делаются качели - 2 глобальных буфера которые заполняются попеременно. Пока один заполняется с другим можно работать. в следующую секунду все меняется местами. Ничего особенного.. Не врубаюсь где нужно писать код с GLUT, в каком файле? Где запускать поток, в каком файле? Каким образом в проекте должно появиться графическое окно? Совсем смутно с этим.
                          По поводу двух потоков - понял. Спасибо.
                          Не в тему.
                          С наступающим Новым Годом! Всех благ! Удачи!
                          Сообщение отредактировано: Acvarif -
                            Цитата Acvarif @
                            Но обычно делаются качели - 2 глобальных буфера которые заполняются попеременно. Пока один заполняется с другим можно работать. в следующую секунду все меняется местами. Ничего особенного..

                            ..И тут вдруг будет обнаружено, что эта "естественная синхронизация" может,
                            хотя и изредко, нарушаться.
                            Когда второй буфер уже заполнен и происходит обмен буферами, первый ещё не считан
                            и, как раз в этот момент, считывается.
                              Цитата Acvarif @
                              Не врубаюсь где нужно писать код с GLUT, в каком файле? Где запускать поток, в каком файле? Каким образом в проекте должно появиться графическое окно? Совсем смутно с этим.

                              определяешь функцию потока, в которой пишешь код glut, потом вызываешь через AfxBeginThread :)
                              из какого места? например по нажатию кнопки.

                              Добавлено
                              с наступающим Новым годом петуха! :D
                              Сообщение отредактировано: Cfon -
                                Цитата
                                определяешь функцию потока, в которой пишешь код glut, потом вызываешь через AfxBeginThread
                                из какого места? например по нажатию кнопки.
                                с наступающим Новым годом петуха!
                                С Новым Годом! Всех благ!
                                Определил функцию потока рисования и входящие в нее функции
                                ExpandedWrap disabled
                                  void display()
                                  {
                                      glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
                                   
                                      glPushMatrix();
                                      glRotatef(ang, 0.0, 1.0, 0.0);
                                      glutSolidTeapot(1.0);
                                      glPopMatrix();
                                   
                                      glutSwapBuffers();
                                  }
                                   
                                  void reshape(int x, int y)
                                  {
                                      glMatrixMode(GL_PROJECTION);
                                      glLoadIdentity();
                                      gluPerspective(60, (float)x/(float)y, 0.1, 100);
                                      glMatrixMode(GL_MODELVIEW);
                                      glLoadIdentity();
                                      gluLookAt(0.0, 0.0, 4.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
                                   
                                      glEnable(GL_DEPTH_TEST);
                                      glEnable(GL_LIGHTING);
                                      glEnable(GL_LIGHT0);
                                  }
                                   
                                  void idle()
                                  {
                                      glutPostRedisplay();
                                  }
                                   
                                  DWORD WINAPI ImageThread(LPVOID lpParam)
                                  {
                                      glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE);
                                      glutCreateWindow("test");
                                   
                                      glutDisplayFunc(display);
                                      glutReshapeFunc(reshape);
                                      glutIdleFunc(idle);
                                      glutMainLoop();
                                   
                                      return 0;
                                  }


                                По запуску программы создал поток
                                ExpandedWrap disabled
                                      image = CreateThread( NULL, 0, ImageThread, GetSafeHwnd(), CREATE_SUSPENDED, NULL);
                                    Sleep(10);

                                По нажатию кнопки поток запускается
                                ExpandedWrap disabled
                                  void CMFCtestDlg::OnBnClickedButton4()
                                  {
                                      // активировать поток рисования
                                      ResumeThread(image);
                                  }

                                При запуске 'Build' все застревает на функции создания окна
                                ExpandedWrap disabled
                                      glutCreateWindow("test");


                                ExpandedWrap disabled
                                  Error   1   error LNK2019: unresolved external symbol ___glutCreateWindowWithExit@8 referenced in function _glutCreateWindow_ATEXIT_HACK@4  MFCtestDlg.obj  MFCtest
                                  Error   2   fatal error LNK1120: 1 unresolved externals

                                Не врубаюсь, что не определено?
                                Сообщение отредактировано: Acvarif -
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0479 ]   [ 19 queries used ]   [ Generated: 25.04.24, 20:43 GMT ]