Страница 2 из 4

Re: Графика в MS Visual 2005 C++

Добавлено: 31 окт 2008, 08:45
Romeo
Ты меня невнимательно читаешь, вот в чём главная проблема. Когда я писал CDocument, я имел ввиду именно этот класс, а не его наследника, который был сгенерирован студией. CDocument является базовым для всех классов-документов, в том числе и для твоего класса-документа - CdevelopingDoc.

Если в твоем классе-документе уже переопределён метод OnNewDocument (что, на самом деле, так и есть, исходя из твоего предыдущего поста), то в этом случае ничего никуда не нужно копировать. Достаточно только отимплементить тело метода.

Re: Графика в MS Visual 2005 C++

Добавлено: 31 окт 2008, 15:02
Vladimir89
Достаточно только отимплементить тело метода.
А это как? оО впервые слышу такое слово

Re: Графика в MS Visual 2005 C++

Добавлено: 01 ноя 2008, 10:14
Romeo
&quot писал(а):Достаточно только отимплементить тело метода.
А это как? оО впервые слышу такое слово
Аааа! Где смайл, где человечек бьётся головой о стену?

По этому и предыдущему моему посту должно быть понятно, что алгоритм по заполнению массива нужно размесить в теле метода OnNewDocument и всё, больше ничего не требуется. Для понимания этого достаточно наличия обычный логики, даже не нужно знать что такое implementation (хотя это и смешно не знать).

Пробуй эксперементировать. Ты же программистом собираешься быть. Ожидание детальных разъяснений и разжевываний - удел слабых духом. Из таких редко получаются путёвые программисты. Не уподобляйся им и стремись расти над собой!

Re: Графика в MS Visual 2005 C++

Добавлено: 21 ноя 2008, 22:18
Vladimir89
Итак. Я плюнул на MFC и как мне тут раньше советовали умные люди начал писать тоже самое в Win32. Получилось.
Теперь мне нужно узнать последнюю вещь: как сделать задержку (переключение) между множеством точек которые я вывел на экран и гистограммой, которая рисуется после точек (но так чтобы точки можно было успеть рассмотреть).

Re: Графика в MS Visual 2005 C++

Добавлено: 22 ноя 2008, 09:42
Romeo
Используй таймер. Смотри API функции SetTimer, KillTimer.

P.S. Зря от MFC отказался, совсем без библиотек сейчас уже не пишут. Как вариант можно было использовать ATL + WTL.

Re: Графика в MS Visual 2005 C++

Добавлено: 22 ноя 2008, 13:08
Vladimir89
Я тут пыталс ясделать следующее: в меню File сделать новую кнопку "Гистограмма" по нажатию которой стирались бы точки и рисовалась гистограмма.
Я в .рс эдиторе добавил туда новую кнопку, но я не понимаю какой ID для нее лучше выбрать... там есть дофига всяких: IDI, IDM... никак не могу понять что это значит и для чего каждый нужен.
Я от балды сделал название: ID_FILE, потом в switcha'x после WM_COMMAND добавил новый Case с таким названием. В него записал: WM_PAINT а потомбегин паинт и т.д.
НЕ работает.
Как мне заставить кнопку заработать? Мне уже тупо интересно)))

Re: Графика в MS Visual 2005 C++

Добавлено: 23 ноя 2008, 11:05
Romeo
Вот поэтому я тебе и сказал, что зря ты отказался от MFC. Чтобы писать на чистом Win32 API нужно очень хорошу понимать архитектуру приложений Win и подробности процессов маршрутизации сообщений.

Правильно делать так:

Код: Выделить всё

case WM_COMMAND: 
{
   switch(wparam)
   {
      case ID_FILE:
         bGisto = true;
         InvalidateRect(NULL);
         break;
   }
}
case WM_PAINT:
{
   if (bGisto)
   {
      // Рисуем гистограмму
   }
   else
   {
      // Рисуем точки
   }
}

Re: Графика в MS Visual 2005 C++

Добавлено: 23 ноя 2008, 15:06
Vladimir89
Да я почему от MFC отказался. Я тупой и никак не получалось заставить код, который находился в обьекте документа работать в в классе onDraw.
Я делал все как писар Холзнер в своей книге про MS Visual С++ 6 но не работало.
Почему то комманда GetDocument() не работала. Вот я и перешел на просто Win32.

Re: Графика в MS Visual 2005 C++

Добавлено: 23 ноя 2008, 15:20
Vladimir89
Romeo писал(а):Вот поэтому я тебе и сказал, что зря ты отказался от MFC. Чтобы писать на чистом Win32 API нужно очень хорошу понимать архитектуру приложений Win и подробности процессов маршрутизации сообщений.

Правильно делать так:

Код: Выделить всё

case WM_COMMAND: 
{
   switch(wparam)
   {
      case ID_FILE:
         bGisto = true;
         InvalidateRect(NULL);
         break;
   }
}
case WM_PAINT:
{
   if (bGisto)
   {
      // Рисуем гистограмму
   }
   else
   {
      // Рисуем точки
   }
}

Добавил твой код следующим образом:

Код: Выделить всё

case WM_COMMAND:
		
		wmId    = LOWORD(wParam);
		wmEvent = HIWORD(wParam);
		// Parse the menu selections:
		switch (wmId)
		{
		case IDM_ABOUT:
			DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
			break;
		case IDM_EXIT:
			DestroyWindow(hWnd);
			break;
		case ID_FILE:
			bGisto = true;
			InvalidateRect(NULL);
         break;
		default:
			return DefWindowProc(hWnd, message, wParam, lParam);
		}
		break;
	case WM_PAINT:           /////////////////////////////////////////////
		if (bGisto)
   {
      // Рисуем гистограмму
   }
   else
   {
      hdc = BeginPaint(hWnd, &ps);
		random(hdc);
		EndPaint(hWnd, &ps);
   }
		
		break;
Выдает 2 ошибки:
error C2065: 'bGisto' : undeclared identifier
error C2660: 'InvalidateRect' : function does not take 1 arguments
Что делать?

Re: Графика в MS Visual 2005 C++

Добавлено: 24 ноя 2008, 11:05
WinMain
Самостоятельно исправь ошибки.