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

ВИДЕОКУРС ВЗЛОМ
выпущен 2 августа!


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

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



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

Предположим, что вы хотите показать CProgressCtrl на весь StatusBar. Для этого необходимо проделать следующее: - Выберите пункт меню View - Resource Symbols. Нажмите кнопку New и добавьте новое имя, в нашем примере это будет ID_PROGRBAR. - В файле MainFrm.cpp найдите объявление массива indicators (он находиться сразу после END_MESSAGE_MAP) и отредактируйте его к следующиему виду
static UINT indicators[] =
 
              {
 
                  ID_PROGRBAR
 
               };
- В файле _MainFrm.h создайте protected переменную m_bCreated типа BOOL и public переменную m_progress типа CProgressCtl. - В файле MainFrm.cpp отредактируйте конец функции int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) таким образом: к участку кода:
if (!m_wndStatusBar.Create(this) ||
 
     !m_wndStatusBar.SetIndicators(indicators,
 
     sizeof(indicators)/sizeof (UINT)))
 
 {
 
     TRACE0("Failed to create status bar\n" );
 
     return -1; // fail to create
 
 }
добавьте следующую строку:
else {
 
 m_wndStatusBar.SetPaneInfo(0,ID_PROGRBAR,SBPS_STRETCH,10);
 
 }
Кроме того, добавьте инициализацию нашей переменной m_bCreated
.........
 
 m_bCreated=FALSE;
 
 ..........
- Теперь мы можем использовать ProgressBar в строке статуса, естественно не забыв создать этот объект. Предположим, у нас есть функция CMainFrame::OnWork(). Она будет выглядеть примерно так:
void CMainFrame::OnWork()
 
 {
 
 	RECT rc;
 
     m_wndStatusBar.GetItemRect(0,&rc);
 
 if (m_bCreated==FALSE)
 
    {
 
 		// создаем  m_progress
 
 		m_progress.Create(WS_VISIBLE|WS_CHILD, rc,&m_wndStatusBar, 1);
 
 	// Устанавливаем размер от 0 до 100
 
 		m_progress.SetRange(0,100);
 
 		m_progress.SetStep(1);
 
 		m_bCreated=TRUE;
 
     }
 
     for (int I = 0; I < 100; I++)
 
     {
 
 		Sleep(20);
 
 		m_progress.StepIt();
 
     }
 
 }
-Если откомпилировать проект на этой фазе, то все будет работать, но при изменении размера окна линейка ProgressBar'а размеры менять не будет, поэтому необходимо перекрыть событие OnSize:
void CMainFrame::OnSize(UINT nType, int cx, int cy)
 
 {
 
     CFrameWnd::OnSize(nType, cx, cy);
 
     if (m_bCreated)
 
     {
 
         RECT rc;
 
         m_wndStatusBar.GetItemRect(0,&rc);
 
         m_progress.SetWindowPos(&wndTop, rc.left, rc.top,
 
         rc.right - rc.left,rc.bottom - rc.top, 0);
 
     }
 
 }
- Вот теперь все. Откомпилируйте проект и убедитесь, что все работает.

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

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




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



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


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