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

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: (+)(ст)BitBlt , CDC  (Прочитано 46204 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Алексей++
глобальный и пушистый
Глобальный модератор

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


« : 24-08-2003 04:20 » 

...
« Последнее редактирование: 14-10-2008 18:59 от Алексей1153++ » Записан

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

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


« Ответ #1 : 04-04-2004 08:00 » 

(тут - чтобы новую тему не создавать)

к примеру я рисую линию

Код:
void CPlotter1153::OnPaint()
{
CPaintDC dc(this); // device context for painting
...
int x1,y1,x2,y2;
...
dc.MoveTo(x1,y1);
dc.LineTo(x2,y2);
   

и если линия пересекла прямоугольник контекста, то будет нехорошо:

888888888888888888888888888888
8888888888
88888888888888888888
888888888888
888888888888888888
888888888888
888888888888888888
888888
888888888888888888888888
888888
888888888888888888888888
888888
888888888888888888888888
888888
888888888888888888888888
888888
888888888888888888888888
888888888888888888888888888888
88
8888888888888888888888888888
8888
88888888888888888888888888
888888
888888888888888888888888
88888888888888
8888888888888888
888888888888888888
888888888888


можно ли, не обрезая линию аналитически, сделать так

888888888888888888888888888888
888888888888888888888888888888
888888888888888888888888888888
888888888888888888888888888888
888888
888888888888888888888888
888888
888888888888888888888888
888888
888888888888888888888888
888888
888888888888888888888888
888888
888888888888888888888888
888888
888888888888888888888888
888888
888888888888888888888888
888888
888888888888888888888888
888888
888888888888888888888888
888888888888888888888888888888
888888888888888888888888888888


то есть средствами самого контекста

?
« Последнее редактирование: 19-11-2007 17:28 от Алексей1153++ » Записан

Джон
просто
Администратор

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

« Ответ #2 : 07-04-2004 22:13 » 

Алексей1153,  Уф вроде готово. Сначала преамбула. Я вообще-то не понял как ты за пределами контекста рисуешь? Я шокирован!  :new_shot:

Но если то, что ты спрашивал, как раз то, про что я подумал, что ты спрашивал.
То вот. Смотри след. топик.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Джон
просто
Администратор

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

« Ответ #3 : 07-04-2004 22:33 » 

В связи с нехваткой времени - crash tutorial. Сорри. :о(
Расчитан на продвинутых новичков, которые:
a) уже умеют создавать проекты
b) имеют представление о том, что такое есть  Device Context
c) что-нить рисовали (линия, прямоугольник и тд) в функциях типа OnPaint, OnDraw

Итак, для эксперимента нам понадобится какая-нить студия (я использовал 6ю)
Для "облегчения" кода выбираем MFC exe. У кого аллергия на MFC - могут сделать
тоже самое с API функциями, необходимо только добавить хендлы в качестве первого
параметра.
Создаём проект (я назвал его "Test"), тип прилоложения (MDI, SDI, Dialog) - SDI.
Единственная функция которая нас будет интересовать - реакция на сообщение винды
WM_PAINT. Принимаем все настройки проекта по умолчанию.

Если вы выбрали в качестве имени проекта "Test", то мастер создал класс CTestView.
С виртуальной функцией OnDraw.

функция выглядит примерно так:
Код:
void CTestView::OnDraw(CDC* pDC)
{
CTestDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);

}
Поскольку мы не собираемся работать с документом, то код можно удалить:
Код:
void CTestView::OnDraw(CDC* pDC)
{
}
Нарисуем какой-нить объект, который в дальнейшем мы хотим обрезать, я
выбрал простую линию.
Код:
	
void CTestView::OnDraw(CDC* pDC)
{
// сохраним оригинальный ДК
int nOrigDC = pDC->SaveDC();

// это будет цвет нашего фона
COLORREF crBk = RGB(0xAB,0xCD,0xEF);

// заполним им клиентскую область
CRect rcBk;
GetClientRect(rcBk);
pDC->FillSolidRect(rcBk,crBk);

// нарисуем жёлтую линию в основном ДК
// по диагонали, от левого верхнего угла к правому нижнему
CPen p(PS_SOLID,4,RGB(0xff,0xff,0x00));
pDC->SelectObject(p);
pDC->MoveTo(0,0);
pDC->LineTo(rcBk.right,rcBk.bottom);

//***************************************
// сюда будет вставляться дальнейший код
//***************************************

// восстановим сохранённый ДК
pDC->RestoreDC(nOrigDC);

}
Всё, самая тяжёлая - подготовительная часть закончена. Этот код не будет изменяться,
поэтому я тоже не буду его повторять, в целях экономии. Компилируем. Смотрим.

Теперь формулируем задание - показать только часть рисунка - в данном случае линии.
Я выбрал для "показа" прямоугольное окошко с рамкой в 50 точек. Т.е. мы будем
видеть линию только в пределах выбранного прямоугольника, всё остальное - рамка -
заполняется цветом фона. Говоря другими словами - сделаем маску, через которую будет
видна часть рисунка. В качестве задания предлагаю самостоятельно поиграться с масками
более сложной формы, используя чёрно-белые рисунки.
Итак - определяю цвета (здесь нет никаких правил, целиком ваше желание, фантазия и
способности Ага ):

Всё что в маске белого цвета должно остаться без изменения, т.е. прозрачная область.
Чёрный цвет маски - определяет нивидимую часть рисунка, или просто фон.

Таким образом моя маска выглядит как чёрный прямоугольник, размером с клиентскую
область, в центре которого находится белый прямоугольник.
Код:
	// зададим прямоугольник - я использовал отступ в 50 точек
CRect rc(rcBk.left+50, rcBk.top+50,rcBk.right-50,
 rcBk.bottom-50);
Для создания маски воспользуемся ещё одним ДевайсКонтекстом, совместимым (compatible)
с рабочим, который потом трансформируем в рабочий ДК.
Код:
	CDC dcMem;
dcMem.CreateCompatibleDC(pDC);
Первоначально у нового ДК нет размеров, точнее он имеет нулевые размеры
создадим их, взяв за основу ВМР размером с клиентскую область
Код:
	CBitmap bmpMem;
bmpMem.CreateCompatibleBitmap(pDC,rcBk.Width(),rcBk.Height());
dcMem.SelectObject(&bmpMem);
Нарисуем в новом ДК прямоугольник белым цветом
Код:
	dcMem.FillSolidRect(rc, RGB(0xff,0xff,0xff));
Теперь осталось совместить новый контекст с рабочим.
Для этой цели в винде предусмотрена функция BitBlt (Bit Block Transfer).

Которая получает след параметры:

координаты лево, верх, (х у) ширина, высота - цели
в нашем случае это вся клиетская область т.е. 0,0, rcBk.Width(), rcBk.Height(),
(я для наглядности использовал вызов функцмй Width() и Height(), в реальных проектах
лучше использовать разницу соответствующих координат - работает быстрее, чем вызов функции).

указатель на ДК источника (откуда будет производится трансформация)

координаты лево, верх, (х у) источника

и последний самый загадочный параметр т.н. ROP-код (Raster operation code), который мы
разберём подробнее несколько позже.

Итак, трансформируем ДК с маской в основной ДК
Код:
	pDC->BitBlt(0, 0, rcBk.Width(), rcBk.Height(),
 &dcMem, 0, 0, 0x00B8074A);

Компилируем. Смотрим. Всё бы ничего, да только рамка вокруг получилась белая.
Давайте исправим этот недостаток. Для этого достаточно выбрать в рабочем контексте
кисть с цветом фона. Причём сделать это надо до вызова BitBlt
Код:
	CBrush br(BS_SOLID, crBk);
pDC->SelectObject(br);
pDC->BitBlt(0, 0, rcBk.Width(), rcBk.Height(),
 &dcMem, 0, 0, 0x00B8074A);
Окончательная версия выглядит так:
Код:
void CTestView::OnDraw(CDC* pDC)
{
// сохраним оригинальный ДК
int nOrigDC = pDC->SaveDC();

// это будет цвет нашего фона
COLORREF crBk = RGB(0xab,0xcd,0xef);

// заполним им клиентскую область
CRect rcBk;
GetClientRect(rcBk);
pDC->FillSolidRect(rcBk,crBk);

// нарисуем жёлтую линию тлщиной 4 точки в основном ДК
// по диагонали, от левого верхнего угла к правому нижнему
CPen p(PS_SOLID,4,RGB(0xff,0xff,0x00));
pDC->SelectObject(p);
pDC->MoveTo(0,0);
pDC->LineTo(rcBk.right,rcBk.bottom);

// зададим прямоугольник - я использовал отступ в 50 точек
CRect rc(rcBk.left+50, rcBk.top+50,rcBk.right-50,
                           rcBk.bottom-50);

CDC dcMem;
dcMem.CreateCompatibleDC(pDC);

CBitmap bmpMem;
bmpMem.CreateCompatibleBitmap(pDC,rcBk.Width(),
                              rcBk.Height());
dcMem.SelectObject(&bmpMem);

dcMem.FillSolidRect(rc, RGB(0xff,0xff,0xff));

CBrush br(BS_SOLID, crBk);
pDC->SelectObject(br);
pDC->BitBlt(0, 0, rcBk.Width(), rcBk.Height(),
                          &dcMem, 0, 0, 0x00B8074A);

// восстановим сохранённый ДК
pDC->RestoreDC(nOrigDC);
}

Компилируем. Смотрим.

Я немного изменил код и вынес механизм маски в отдельные функции (MFC и API версии)
Код:
void PaintMask(CDC *pDC, CRect rcBk, CRect rc, COLORREF crBk)
{
CDC dcMem;
dcMem.CreateCompatibleDC(pDC);

CBitmap bmpMem;
bmpMem.CreateCompatibleBitmap(pDC,rcBk.Width(),
                        rcBk.Height());
dcMem.SelectObject(&bmpMem);

dcMem.FillSolidRect(rc, RGB(0xff,0xff,0xff));

CBrush br(BS_SOLID, crBk);
pDC->SelectObject(br);
pDC->BitBlt(0, 0, rcBk.Width(), rcBk.Height(),
                       &dcMem, 0, 0, 0x00B8074A);
}

void PaintMask(HDC hdcOrig, LPRECT lpRectBk, LPRECT lpRect,
 COLORREF crBk)
{
int nWidthBk = lpRectBk->right-lpRectBk->left;
int nHeightBk = lpRectBk->bottom-lpRectBk->top;

HDC hdcMem = ::CreateCompatibleDC(hdcOrig);
HBITMAP hbmMem = ::CreateCompatibleBitmap(hdcOrig,
 nWidthBk, nHeightBk);
  ::SelectObject(hdcMem, hbmMem);

::SetBkColor(hdcMem, RGB(0xff,0xff,0xff));
::ExtTextOut(hdcMem, 0, 0, ETO_OPAQUE, lpRect, NULL,
 0, NULL);

HBRUSH hBrush, hBrushOrig;
hBrush = ::CreateSolidBrush(crBk);
hBrushOrig = (HBRUSH)::SelectObject(hdcOrig,hBrush);
 
::BitBlt(hdcOrig, 0,0, nWidthBk, nHeightBk, hdcMem,
0,0, 0x00B8074A);

::SelectObject(hdcOrig, hBrushOrig);
::DeleteObject(hBrush);
::DeleteObject(hbmMem);
::DeleteDC(hdcMem);
}

void CTestView::OnDraw(CDC* pDC)
{
// сохраним оригинальный ДК
int nOrigDC = pDC->SaveDC();

// это будет цвет нашего фона
COLORREF crBk = RGB(0xab,0xcd,0xef);

// заполним им клиентскую область
CRect rcBk;
GetClientRect(rcBk);
pDC->FillSolidRect(rcBk,crBk);

// нарисуем жёлтую линию в основном ДК
// по диагонали, от левого верхнего угла к правому нижнему
CPen p(PS_SOLID,4,RGB(0xff,0xff,0x00));
pDC->SelectObject(p);
pDC->MoveTo(0,0);
pDC->LineTo(rcBk.right,rcBk.bottom);

// зададим прямоугольник - я использовал отступ в 50 точек
CRect rc(rcBk.left+50, rcBk.top+50,rcBk.right-50,
 rcBk.bottom-50);

// Тест MFC
//PaintMask(pDC, rcBk, rc, crBk);

/**/ // <- для теста MFC-версии удалите слэш после звёздочки
// Тест API
RECT rectBk, rect;
rectBk.left   = rcBk.left;
rectBk.top   = rcBk.top;
rectBk.right  = rcBk.right;
rectBk.bottom = rcBk.bottom;

rect.left = rc.left;
rect.top = rc.top;
rect.right  = rc.right;
rect.bottom = rc.bottom;

PaintMask(pDC->GetSafeHdc(), &rectBk, &rect, crBk);
/**/
// восстановим сохранённый ДК
pDC->RestoreDC(nOrigDC);
}

Вот так это выглядит на практике, а теперь немного теории. Сразу скажу,что подробная
инфа хорошо описана в литературе (Петцольд) и MSDN. Ключевые слова: "Ternary Raster Operations"
"ROP3". Посмотрите так-же описание и использование функций BitBlt, PatBlt, и StretchBlt.

"Итак, ближе к телу". Как мы увиедли, всё работает довольно просто:
взяли оригинал, создали маску, выбрали кисть и потом всё это смешали. Нетрудно заметить,
что самая сложная часть - смешивание - функция BitBlt. В которой все параметры довольно ясны -
координаты источника, координаты второго ДевайсКонтекста, сам второй ДК.
Загадкой остаётся последний параметр, да ещё его загадочное значение - 0x00B8074A.
Почему 0x00B8074A? А может быть, например, 0x00B80FFF?
Пойдём по порядку. Итак у нас есь три источника информации - оригинал, маска и кисть (Brush)
под кистью в данном случае понимается GDI объект который может содержать цвет и текстуру.
Представим их ввиде слоёв, которые накладываются друг на друга. Каждая точка любого из этих
слоёв, совпадает позиционно с точкой любого другого слоя и представляет собой численное значение
цвета. Биты этих значений "смешиваются" с помощью операций not or and xor. Формулы, такого
смешивания определяем мы, исходя из определённых нами условий.

Сделаем это для приведённого выше примера, но сначала договоримся о терминологии.
Итак оригинальный слой обозначим через D (Destination bitmap), слой кисти обозначим
через Р(Рattern) и слой маски через S (Source bitmap)

Распишем возможные комбинации бит для этих слоёв (для получения кода важен порядок записи
- требования винды):
Код:
	P S D
-----
0 0 0
0 0 1
0 1 0
0 1 1
1 0 0
1 0 1
1 1 0
1 1 1

С этого рисунка вы будете всегда начинать ваши эксперименты, он остаётся постоянным. Теперь
определяем алгоритм. Я выбрал в качестве "прозрачного" окна белый цвет, обычно белый цвет
обозначают 1, а чёрный 0. Т.е. я хочу, чтобы на месте тех битов маски (S), которые равны 1
биты оригинала (D) остались неизменёнными. Запишем справа в столбике 1 эти биты:
Код:
Шаг 1.
P S D 1
-----
0 0 0
0 0 1
0 1 0 0
0 1 1 1
1 0 0
1 0 1
1 1 0 0
1 1 1 1
Для чёрной области (нулевые биты маски) я определил цвет фона. Т.е. в этих точках должна
оставаться информация со слоя P запишем их пока в столбец 2:
Код:
Шаг 2.
P S D 1 2
-----
0 0 0   0
0 0 1   0
0 1 0 0
0 1 1 1
1 0 0   1
1 0 1   1
1 1 0 0
1 1 1 1
Совмеcтим столбец 1 и 2 и прочитаем биты снизу вверх получим 1011 1000 = 0xB8. Таким образом
мы плучили команду (или как она называется в MSDN "boolean function") каким образом наши
биты должны смешиваться, или первую часть (старшее машинное слово - 16 бит) кода растровой
операции. Который представляет собой двойное маш. слово (32 бит).
Остальное не наша забота. Вторая часть представляет собой вспомогательные операции для стековой
машины (подробного описания как это делается я не нашёл) и берётся из таблицы (MSDN "Platform SDK:
Windows GDI" "Ternary Raster Operations").

Для этого находим в левом столбце полученный код 0хВ8 и смотрим чему равно значение
ROP кода - 0x00B8074A.
Для некоторых кодов есть даже свои определённые "именные" константы, напр. SRCCOPY - 0x00CC0020
Попробуйте расписать булевскую функцию и понять, что она делает.

Успехов.

зы Всё писалось буквально со спичками в глазах - так что о замеченных ошибках просьба сообщать
не стесняясь. Единственное, что могу гарантировать - код компилируется.
Буду очень признателен ежели кто-нить из титанов (a la Never) возмётся "причесать"
и перевести это в удобоваримую для начинающих форму.
« Последнее редактирование: 19-11-2007 17:35 от Алексей1153++ » Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Алексей++
глобальный и пушистый
Глобальный модератор

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


« Ответ #4 : 08-04-2004 03:10 » 

Цитата

Я вообще-то не понял как ты за пределами контекста рисуешь?

 Ага

Джон, возможно я вопрос неправильно задал
Я тебе проект скину - там плоттер сделан из CStatic (класс CPlotter1153  Улыбаюсь  )

скомпилируй, и нажми кнопку Test - и сразу увидишь, о чём я

в
void CLT6View::OnTest1()
задаются времена и амплитуды выводимых значений - амплитуды 3 и 4 вылазят за рамку, а надо бы не...
Записан

Джон
просто
Администратор

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

« Ответ #5 : 10-04-2004 00:03 » 

Немног разъясню,  Проблема у Лёшки в том, что он в контроле (CStatik) создаёт ДК

CPaintDC dc(this);

но контрол сам отрисовывается в ДК родительского окна. Поэтому все "рисования"
например с отрицательными координатами выскакивают за пределы контрола.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Алексей++
глобальный и пушистый
Глобальный модератор

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


« Ответ #6 : 10-04-2004 01:32 » 

Джон, а что, надо было не статик юзить?

типа едит что-ли....
Записан

Джон
просто
Администратор

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

« Ответ #7 : 10-04-2004 12:10 » 

Алексей1153,  У нас тут 4 дня праздников, посмотрю что там можно сделать.
В принципе , со Статиком решается просто, но тогда они всё-равно лезут за переделы тёмного "экрана", что не есть гут.

Я думаю разговор приобретает индивидуальный характер, поэтому - остальное мылом.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Алексей++
глобальный и пушистый
Глобальный модератор

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


« Ответ #8 : 15-04-2006 19:48 » 

(комент)

имхо ценность тут представляет только пост #3 (Джоновский)

 - Статья?
« Последнее редактирование: 01-05-2007 08:41 от Алексей1153++ » Записан

Джон
просто
Администратор

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

« Ответ #9 : 11-04-2008 09:07 » 

Ааааафигеть, как давно это было. Лёш, насчёт статьи - кто "причёсывать" будет? ЛИрические отступления выбросить. Если что непонятно или не полно - изменим, дополним. Короче плюрализм критики нужен. Ага
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Алексей++
глобальный и пушистый
Глобальный модератор

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


« Ответ #10 : 11-04-2008 09:25 » 

Джон, скажешь - набросаю статью ) Хотя, я вижу, ты уже Томчику85 поручил, или нет ещё ?
Записан

Джон
просто
Администратор

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

« Ответ #11 : 11-04-2008 10:59 » 

Лёш, это был разговор нас с тобой. Ага Статья же расчитана на бОльшую аудиторию. Поэтому я и попросил томчика дать оценку тс свежим взглядом. Хотя если ты считаешь, что всё в порядке - дык, да ради Бога. Делай. Если что-то не хватает - я тута. Ага Я ещё предпочитаю, когда к статье есть практический материал в виде проектика. Тогда сразу видно ЧТО работает и КАК оно работатет. А вот ПОЧЕМУ оно работает - смотри статью. ИМХО.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Алексей++
глобальный и пушистый
Глобальный модератор

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


« Ответ #12 : 11-04-2008 11:12 » 

Джон, не хватает только времени ))) А так всего хватает - и статью могю, и примерчик, в выходные начну, ежели позволит время
Записан

Джон
просто
Администратор

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

« Ответ #13 : 11-04-2008 12:56 » 

Такая же фигня. Причём не то, чтобы совсем, а много за один раз. С "пятиминутками" посовободней. Поэтому для меня проще на короткие вопросы отвечать.

зы Ща глянул (это точно я тот Джон? ты ничего не напутал?), это вобще-то больше про маски, чем про двойную буферизацию... Теория - компиляция и перевод МСДН и Петцольда. Да ещё с WinAPI. Даже не знаю в чём большая ценность статьи заключается? Когда-то было актуально, всё приходилось рисовать ручками. Анимации с переходными эффектами закручивать.

СОмневаюсь, что теперь это ещё кому-нить надо.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
RXL
Технический
Администратор

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

WWW
« Ответ #14 : 11-04-2008 12:59 » 

Джон, было же дело... Да? Ага
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Алексей++
глобальный и пушистый
Глобальный модератор

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


« Ответ #15 : 11-04-2008 14:05 » 

Джон, видать, нудно, раз спрашивают )))

Ща глянул (это точно я тот Джон? ты ничего не напутал

да ты каждый раз эту фразу говоришь Улыбаюсь))
Записан

Джон
просто
Администратор

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

« Ответ #16 : 11-04-2008 14:07 » 

Да уж. "ВСЕГО" четыре года! назад. Кстати в это же время... Что там было про "всё возвращается на круги (хотя я склонен говорить "спирали") своя"? Сечас, на другом витке спирали находишься уже НАД этим же самым местом и оцениваешь его по другому.
Когда-то было время разбираться с такими вещами, а не просто брать и тупо юзать, юзать, юзать... В последнее время всё чаще задаюсь вопросом, а что даёт мне (да и не только мне) ТОГДАШНЕЕ знание СЕЙЧАС? Ответ очень неутешительный. Жаль Не я не в том плане, что вобще нафиг ничего не надо. А про "насколько глубоки должны быть знания по данному конкретному вопросу?". Ну на кой чёрт и кому они нужны эти "Ternary Raster Operations"?
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Джон
просто
Администратор

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

« Ответ #17 : 11-04-2008 14:12 » 

Лёш, так спрашивают двойную буферизацию... Это понятное дело. Пока ещё альтернативы не придумали.

Вопрос в том плане был, что так много и от меня? Я потом просто на дату посмотрел. Блин было же время разбираться с тем, что интересно...
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Алексей++
глобальный и пушистый
Глобальный модератор

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


« Ответ #18 : 11-04-2008 14:21 » 

Улыбаюсь
Записан

tom4ik85
Участник

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

« Ответ #19 : 14-04-2008 09:52 » 

Извините, что так долго не отвечал - не мог на сайт зайти Жаль
Насчет статьи я не против, только никогда этим не занимался.
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

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


« Ответ #20 : 14-04-2008 10:07 » 

ну так у тебя есть прекрасный шанс попробовать Улыбаюсь
Записан

tom4ik85
Участник

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

« Ответ #21 : 14-04-2008 10:48 » 

Я не против Улыбаюсь
А на какую тему?
Определение выхода курсора из контрола или нормальной его отрисовки без моргания?
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

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


« Ответ #22 : 14-04-2008 10:56 » 

эти два предмета нужно рассмотреть по отдельности , для антиморгания - способ один всего знаю (если найдёшь ещё - супер) , для выхода за край окна - надо рассмотреть все способы, которые упоминались, а может и ещё придумаешь. Также рассказать о плюсах и минусах, а потом проект-пример, в котором можно оба предмета объединить - и отрисовку и выход. Вот как-то так )
Потом покажешь предварительный вариант в подфоруме для авторов
Записан

RXL
Технический
Администратор

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

WWW
« Ответ #23 : 14-04-2008 11:30 » new

tom4ik85, тебя добавили в группу авторов.


( статью занял tom4ik85 )
« Последнее редактирование: 18-04-2008 09:33 от Алексей1153++ » Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines