Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.191.42.205] |
|
Страницы: (8) « Первая ... 5 6 [7] 8 все ( Перейти к последнему сообщению ) |
Сообщ.
#91
,
|
|
|
Цитата Acvarif @ Былдер в свое время был идеальной средой для разработки визуальных приложений. Если в метку типа Label1 (Static Control)нужно поместить текст то без всяких заморочек Label1->Caption = "текст"; MFC код длинее, но не сложнее SetDlgItemText(IDC_STATIC1,"текст"); IDC_STATIC1 - это идентификатор ресурса в файле rc, SetDlgItemText - функция-член класса CWnd. Все просто Цитата Acvarif @ MFC неплохо придуман. На первый взгляд небольшое неудобство - мало компонентов. Хотя может в большинстве случаев того, что есть, вполне достаточно.. их (компонентов) вообще нет, это контролы - классы для управления объектами виндос (окнами) |
Сообщ.
#92
,
|
|
|
Спасибо за помощь.
Билдеровскую прогу удалось повторить на MFC. Все (прием-передача) крутится в одном потоке. Немного причешу и выложу в архиве. Может кому будет полезна. Далее задачка разобрать по косточкам буфер приема и отобразить на цветной панели цветные прямоугольники. Панель разбита сеткой прямоугольных ячеек. 120 по горизонтали, 500 по вертикали 120Х500. Принимаемые данные грубо говоря это координаты ячеек в сетке которые нужно засвечивать цветом отличным от цвета сетки и цвета пустой ячейки. Пока это задача минимум. Как правильно поступиь? Прикручивать к проекту OpenGl (GLUT и т.п.) или можно обойтись средствами MFC? |
Сообщ.
#93
,
|
|
|
И ради этого ты с Билдера ушёл?
Цитата приклепать сложную графику |
Сообщ.
#94
,
|
|
|
Нет. Дальше графика действительно сложная. Сетка это пока начало.
|
Сообщ.
#95
,
|
|
|
Цитата Acvarif @ Нет. Дальше графика действительно сложная. Сетка это пока начало. я бы GLUT прикрутил для реально сложной графики |
Сообщ.
#96
,
|
|
|
В скрепке архив проекта MFCtest.
Прикреплённый файлMFCtest.rar (146,87 Кбайт, скачиваний: 81)
Может кому пригодится в качестве примера приема-передачи по COM в асинхронном режиме. Также в архиве есть текстовый файл MFCtest.txt который является тестовой текстовой строкой для известной программы работы с COM портом ComPortTolkit. На ПК должно быть как минимум 2 COM порта соединенных перекрестным кабелем (выход передачи одного на вход приема другого). Один работает на передачу из программы ComPortTolkit. Другой на прием с пом. проги из проекта MFCtest.
ComPortTolkit передает порядка 850 байт на MFCtest обратно получает ответ 128 байт. Если где чего не так не судите строго. |
Сообщ.
#97
,
|
|
|
Цитата Acvarif @ Прикручивать к проекту OpenGl (GLUT и т.п.) или можно обойтись средствами MFC? Скорее всего MFC (т.е. обычного GDI) хватит. |
Сообщ.
#98
,
|
|
|
Все же попробую GLUT. Скачал и раскидал нужные файлы по нужным местам http://rucodes.com/opengl-microsoft-visual-studio-c.html
Дальше немного растерялся. В проекте имеется глобальный буфер bufrd[] где каждую секунду обновляются данные с COM порта, которые нуно разобрать и отобразить в графическом окне. Каким образом создается графическое окно с GLUT? Это должен быть отдельный файл в составе существующего проекта? Какова технология добавления графического окна к уже существующему проекту? |
Сообщ.
#99
,
|
|
|
Цитата Acvarif @ Все же попробую GLUT. ... В проекте имеется глобальный буфер bufrd[]... Дальше немного растерялся. ... Какова технология добавления графического окна к уже существующему проекту? Упс... Получается, что ты даже отдалённо не знаешь, какова должна быть структура проекта. А выбор уже сделал.. Глобальный буфер с данными в многопоточной программе я бы не посоветовал. Это и не нужно ни с какой точки зрения. |
Сообщ.
#100
,
|
|
|
Структуру не представляю. Простейший поиск по сети - приложения GLUT консольные WIN32. Какова должна быть структура MFC GLUT пока смутно представляю. Очевидно должен быть еще один поток. В имеющемся файле ..Dlg или.. не врубаюсь. Чем плох глобальный буфер?
|
Сообщ.
#101
,
|
|
|
Цитата Acvarif @ Очевидно должен быть еще один поток. В имеющемся файле ..Dlg или.. не врубаюсь. Чем плох глобальный буфер? Этим вот и плох. Из одного потока буфер заполняется. Из другого читается. Как будешь синхронизировать эти потоки для доступа к данным ? |
Сообщ.
#102
,
|
|
|
Думаю с помщью флага. Ведь период обмена 1 сек. Буфер заполняется (115200) примерно через 100 мс. Далее установка флага и работа с буфером до конца секунды. Но обычно делаются качели - 2 глобальных буфера которые заполняются попеременно. Пока один заполняется с другим можно работать. в следующую секунду все меняется местами. Ничего особенного.. Не врубаюсь где нужно писать код с GLUT, в каком файле? Где запускать поток, в каком файле? Каким образом в проекте должно появиться графическое окно? Совсем смутно с этим.
По поводу двух потоков - понял. Спасибо. Не в тему. С наступающим Новым Годом! Всех благ! Удачи! |
Сообщ.
#103
,
|
|
|
Цитата Acvarif @ Но обычно делаются качели - 2 глобальных буфера которые заполняются попеременно. Пока один заполняется с другим можно работать. в следующую секунду все меняется местами. Ничего особенного.. ..И тут вдруг будет обнаружено, что эта "естественная синхронизация" может, хотя и изредко, нарушаться. Когда второй буфер уже заполнен и происходит обмен буферами, первый ещё не считан и, как раз в этот момент, считывается. |
Сообщ.
#104
,
|
|
|
Цитата Acvarif @ Не врубаюсь где нужно писать код с GLUT, в каком файле? Где запускать поток, в каком файле? Каким образом в проекте должно появиться графическое окно? Совсем смутно с этим. определяешь функцию потока, в которой пишешь код glut, потом вызываешь через AfxBeginThread из какого места? например по нажатию кнопки. Добавлено с наступающим Новым годом петуха! |
Сообщ.
#105
,
|
|
|
Цитата С Новым Годом! Всех благ!определяешь функцию потока, в которой пишешь код glut, потом вызываешь через AfxBeginThread из какого места? например по нажатию кнопки. с наступающим Новым годом петуха! Определил функцию потока рисования и входящие в нее функции 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; } По запуску программы создал поток image = CreateThread( NULL, 0, ImageThread, GetSafeHwnd(), CREATE_SUSPENDED, NULL); Sleep(10); По нажатию кнопки поток запускается void CMFCtestDlg::OnBnClickedButton4() { // активировать поток рисования ResumeThread(image); } При запуске 'Build' все застревает на функции создания окна glutCreateWindow("test"); 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 Не врубаюсь, что не определено? |