Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
3 / 3 / 0
Регистрация: 02.01.2011
Сообщений: 149

Automation Error при сворачивании окна с DirectDraw

11.09.2011, 14:50. Показов 1775. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Люди, помогите избавится от ошибки. Использую DirectDraw, все работает, но только лишь я сворачиваю окно, так сразу выскакивает Automation Error. Пытаюсь не прорисовывать, когда WindowState=Minimized, но ошибка появляется в любом случае, когда я разворачиваю окно обратно.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
11.09.2011, 14:50
Ответы с готовыми решениями:

При создании дистрибутива приложения (написанного на VB) возникает ошибка: - Unexpected error number 80010108 has occurred : Automation error.
Уважаемые эксперты VB-ка , помогите разрешить следующую проблему: При создании дистрибутива приложения (написанного на VB) возникает...

Runtime Error 5 при вызове BltFast (DirectDraw)
Добрый день. Выдает ошибку "Invalid procedure call or argument" на строке ddsBack.BltFast CartToIsoX(dx, dy, W), CartToIsoY(dx, dy, H),...

[WPF] Зависает при сворачивании окна
Здравствуйте, странная ситуация, даже не знаю куда копать. Есть wpf форма с datagrid в таблицу которого выводится информация с 500...

8
5 / 5 / 0
Регистрация: 08.12.2009
Сообщений: 213
12.09.2011, 19:23
Я не уверен, но мне кажется, что после разворачивания окна надо перегрузить Primary Surface, т.е. создать его заново.
Может и не прав, давно дело было.

И еще, сколько потоков у тебя в программе ? Если их несколько, которые параллельно готовят картинку к прорисовке, то скорее всего проблема в синхронизации. Т.е. основной поток может определить или окно свернуто/развернуто, а вот побочные об этом ничего не знают и продолжают работу (у меня такое было), в этом случае 100% будет ошибка.
0
3 / 3 / 0
Регистрация: 02.01.2011
Сообщений: 149
14.09.2011, 20:51  [ТС]
Незнаю. Дописал такой код:
Visual Basic
1
2
3
4
5
6
7
8
Private Sub Form_Resize()
If frmCBForm.WindowState = 1 Then
    ddsd.lFlags = DDSD_CAPS Or DDSD_BACKBUFFERCOUNT
    ddsd.ddsCaps.lCaps = DDSCAPS_PRIMARYSURFACE Or DDSCAPS_FLIP Or DDSCAPS_COMPLEX
    ddsd.lBackBufferCount = 1
    Set ddsPrimary = dd.CreateSurface(ddsd)
End If
End Sub
Да и еще если WindowState=1 у меня не прорисовывается, но в любом случае ошибка.
0
3 / 3 / 0
Регистрация: 02.01.2011
Сообщений: 149
17.09.2011, 11:17  [ТС]
Вроде немного разобрался. Когда окно разворачивается, я пересоздаю объект DirectDraw, Primary и Back поверхности. Да. Ошибку уже не выдает, но у меня теперь черный экран.
0
5 / 5 / 0
Регистрация: 08.12.2009
Сообщений: 213
17.09.2011, 11:50
А каким образом ты рисуешь на back поверхности и сколько их у тебя?
Поскольку ты создаешь back заново, то тебе надо подготовить его заново (перерисовать заново).
0
3 / 3 / 0
Регистрация: 02.01.2011
Сообщений: 149
17.09.2011, 12:16  [ТС]
У меня есть специальная процедура, которая рисует на заднюю поверхность, с поверхностей, на которых хранятся изображения.
DDS1 as DirectDrawSurface7
А с нее уже в процедуре рисования, перерисовывается на задний буффе, а снего уже делается Flip на передний.
0
5 / 5 / 0
Регистрация: 08.12.2009
Сообщений: 213
17.09.2011, 12:27
Проверь, что у тебя с этими поверхностями, на которых ты хранишь изображения, очень может быть, что после создания новых передней и задней поверхности на них не остается изображений.
(Я не спец по DirectDraw, поэтому мои советы только предположения.)
Проверь каким образом ты создаешь эти дополнительные поверхности и каким образом они связаны с передними, может надо делать Detach(Attach) пред удалением primary и созданием его заново ?
0
3 / 3 / 0
Регистрация: 02.01.2011
Сообщений: 149
17.09.2011, 12:59  [ТС]
Поверхности на которых я храню изображения объявляю так:
Visual Basic
1
Dim DDS1 as DirectDrawSurface7
Картинку туда загружаю следующим образом:
Visual Basic
1
Set DDS1=mdlDirectDraw7.CreateDDSFromFile (filename,...)
Модуль взят из учений Antiloop'a (http://www.vbdx.chat.ru/)
А прорисовываю я из них методом BltFast (0,0,DDS1,RECT,DDBLTFAST_SRCCOLORKEY Or DDBLTFAST_WAIT)
Вроде все как должно быть. Оно все прекрасно работает до тех пор, пока я не сверну окно.
У меня такие подозрения что он очищает эти поверхности при пересоздании DX. Но как этого избежать, т.к. подгружать все заново при каждом разворачивании окна - очень долго. Да самое что удивительное, что эти поверхности никак не связаны с Primary и Back.
Деактивацию DX, я провожу тоже по учениям Antiloop
Visual Basic
1
2
3
4
5
6
7
8
9
Public Sub DestroyDD()
 
    Call dd.RestoreDisplayMode
    Call dd.SetCooperativeLevel(0, DDSCL_NORMAL)
    
    Set ddsBack = Nothing
    Set ddsPrimary = Nothing
    Set dd = Nothing
End Sub
0
5 / 5 / 0
Регистрация: 08.12.2009
Сообщений: 213
17.09.2011, 13:59
Цитата из Antiloop:
Потеря поверхностей
По многим причинам память, отведенная объектам DirectDrawSurface может быть освобождена без участия программы. Это может происходить, если изменился режим экрана, или другое приложение получило эксклюзивный доступ к видеокарте и очистило всю память, выделенную предыдущим приложениям.
Такая непредусмотренная очистка памяти называется потерей поверхности. Когда происходит потеря поверхности, многие методы заместо работы выдают код ошибки DDERR_SURFACELOST.
Метод IDirectDrawSurface7::Restore (DirectDrawSurface7.Restore) может пересоздать эти потерянные поверхности повторно соединяет их с объектом DirectDraw. При восстановлении поверхности не происходит перезагрузка графических изображений, так что, если вы потеряли поверхность, а затем восстановили ее, вы должны перезагрузить всю графику, которая была в памяти.
Освобождение поверхностей
После того, как вы больше не нуждаетесь в поверхности, например при завершении программы, вы должны освободить память, занимаемую поверхностью с помощью метода Release.
Если вы создавали комплексную поверхность одним вызовом метода CreateSurface, например flipping chain, вы можете освободить только переднюю поверхность. После этого, вы не можете больше использовать другие компоненты цепи флиппинга - задний буфер и т. д. (Для инфо о flipping chain см. Создание поверхностей)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.09.2011, 13:59
Помогаю со студенческими работами здесь

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

Исчезание символа при сворачивании/разворачивании окна
Как сделать так, чтобы при сворачивании-разворачивании окна, символ "b" исчезал? Символ "b" с вывода тех слов, которые...

При сворачивании окна программа перестает работать
Доброе время суток. Моя программа перестает выполнять свою работу если скрыть/свернуть окно или даже поверх формы вылезет какой-нибудь...

Текст на PictureBox стирается при сворачивании-разворачивании окна
Здравствуйте! У меня создается динамически несколько Picturebox. PictureBox vichisl = new PictureBox; private void...

Пропадает рисунок, сделанный мышкой, при сворачивании окна
как пофиксить это? вот код #include "stdafx.h" #include "Win32Project1.h" #include <windowsx.h> #include <thread> #pragma...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru