Оригинальный DVD-ROM: eXeL@B DVD !
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 2 июня!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

ПРОГРАММИРОВАНИЕ НА C и С++



Программисты долго мучаются с кодом прогаммы, изучают С++, WinAPI функции, MSDN. Потом пишут банальную систему защиты или навешивают банальный протектор, а крэкеры и реверсеры справляются с такой защитой за 5 минут. В итоге, продажи программы почти нулевые. Чтобы такого не допустить, тут самому надо немного поднабрать опыта отладки, реверсинга, тот же отладчик Ollydbg изучить или дизассемблер IDA Pro. Но где искать по крохам эти знания? Нет, конечно можно годами "методом тыка" разбираться, но куда быстрее видеокурс специальный посмотреть. Вот тут он есть: ссылка. Автор курса с большим опытом и объясняет понятно, я из этого курса много узнал про то как работает компьютер, процессор, про инструменты специальные и как с ними работать. Мои коллеги программисты на работе ничего такого и не знают, теперь я им нос утру.
В чем заключается идея:
Мы рисуем не на главном контексте, а на вторичном (backbuffer),
а затем переносим его содержимое на главный.

з.ы. Там есть такая фенечка #define DISPLAY
(чтобы это увидить, но убрать строку #undef DISPLAY
дык вот, она затем, если мы вдруг захотим увидить,
что же делается в нашем вторичном контексте,
а для этого выводим его на экран (DISLPAY).

з.з.ы
Этот код дает общее понятие о том, как это делается
и не более того, т.е. надо кучу проверок вставить и т.д.

з.з.з.ы
Математика тут такая, что ток в моем проекте катит.
 
 void CALLBACK TimerProc(
 
     HWND hwnd,	    // handle of window for timer messages
 
     UINT uMsg,	    // WM_TIMER message
 
     UINT idEvent,   // timer identifier
 
     DWORD dwTime    // current system time
 
    )
 
 {
 
 	RECT rect;
 
 	GetClientRect (GetDlgItem (AfxGetApp ()->m_pMainWnd->m_hWnd, IDC_STATIC), &rect);
 
 	static double width = rect.right;
 
 	static double height = rect.bottom;
 
 	HDC dc = GetDC (GetDlgItem (AfxGetApp ()->m_pMainWnd->m_hWnd, IDC_STATIC));
 
 
 
 #define DISPLAY
 
 #undef DISPLAY
 
 
 
 #if defined DISPLAY
 
 	HDC hdc = CreateDC ("DISPLAY", NULL, NULL, NULL);
 
 #else
 
 	HDC hdc = CreateCompatibleDC (dc);
 
 	HBITMAP hBitmap = CreateCompatibleBitmap (hdc, rect.width, rect.height);
 
 	SelectObject (hdc, hBitmap);
 
 #endif
 
 	FillRect(hdc, &rect, (HBRUSH) (COLOR_WINDOW+1));
 
 	Ellipse (hdc, rect.left, rect.top, rect.right, rect.bottom);
 
 	MoveToEx (hdc, rect.right/2, (int)rect.bottom/2, NULL);
 
 	LineTo (hdc, (int)((cos(width+=0.01)+1)*120), (int)((sin(height+=0.01)+1)*120));
 
 	MoveToEx (hdc, rect.right/2, (int)rect.bottom/2, NULL);
 
 	LineTo (hdc, (int)((sin(width)+1)*120), (int)((cos(height)+1)*120));
 
 	BitBlt (dc, 0, 0, rect.right, rect.bottom, hdc, 0, 0, SRCCOPY);
 
 #if !defined DISPLAY
 
 	DeleteObject (hBitmap);
 
 #endif
 
 	ReleaseDC (GetDlgItem (AfxGetApp ()->m_pMainWnd->m_hWnd, IDC_STATIC), dc);
 
 	DeleteDC  (hdc);
 
 }
 
 
 
 void CDrawDlg::OnBnClickedButton1()
 
 {
 
 	SetTimer (1000, 10, TimerProc);
 
 }
 
 
 
 void CDrawDlg::OnBnClickedButton2()
 
 {
 
 	KillTimer (1000);
 
 }
 
 


<< ВЕРНУТЬСЯ В ПОДРАЗДЕЛ

<< ВЕРНУТЬСЯ В ОГЛАВЛЕНИЕ




Материалы находятся на сайте https://exelab.ru/pro/



Оригинальный DVD-ROM: eXeL@B DVD !


Вы находитесь на EXELAB.rU
Проект ReactOS