Графика в MS Visual 2005 C++
Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain
- Romeo
- Сообщения: 3126
- Зарегистрирован: 02 мар 2004, 17:25
- Откуда: Крым, Севастополь
- Контактная информация:
Ты меня невнимательно читаешь, вот в чём главная проблема. Когда я писал CDocument, я имел ввиду именно этот класс, а не его наследника, который был сгенерирован студией. CDocument является базовым для всех классов-документов, в том числе и для твоего класса-документа - CdevelopingDoc.
Если в твоем классе-документе уже переопределён метод OnNewDocument (что, на самом деле, так и есть, исходя из твоего предыдущего поста), то в этом случае ничего никуда не нужно копировать. Достаточно только отимплементить тело метода.
Если в твоем классе-документе уже переопределён метод OnNewDocument (что, на самом деле, так и есть, исходя из твоего предыдущего поста), то в этом случае ничего никуда не нужно копировать. Достаточно только отимплементить тело метода.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
- Vladimir89
- Сообщения: 76
- Зарегистрирован: 21 май 2007, 02:25
Достаточно только отимплементить тело метода.
А это как? оО впервые слышу такое слово
А это как? оО впервые слышу такое слово
Си ++
Здоровье --
Здоровье --
- Romeo
- Сообщения: 3126
- Зарегистрирован: 02 мар 2004, 17:25
- Откуда: Крым, Севастополь
- Контактная информация:
Аааа! Где смайл, где человечек бьётся головой о стену?" писал(а):Достаточно только отимплементить тело метода.
А это как? оО впервые слышу такое слово
По этому и предыдущему моему посту должно быть понятно, что алгоритм по заполнению массива нужно размесить в теле метода OnNewDocument и всё, больше ничего не требуется. Для понимания этого достаточно наличия обычный логики, даже не нужно знать что такое implementation (хотя это и смешно не знать).
Пробуй эксперементировать. Ты же программистом собираешься быть. Ожидание детальных разъяснений и разжевываний - удел слабых духом. Из таких редко получаются путёвые программисты. Не уподобляйся им и стремись расти над собой!
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
- Vladimir89
- Сообщения: 76
- Зарегистрирован: 21 май 2007, 02:25
Итак. Я плюнул на MFC и как мне тут раньше советовали умные люди начал писать тоже самое в Win32. Получилось.
Теперь мне нужно узнать последнюю вещь: как сделать задержку (переключение) между множеством точек которые я вывел на экран и гистограммой, которая рисуется после точек (но так чтобы точки можно было успеть рассмотреть).
Теперь мне нужно узнать последнюю вещь: как сделать задержку (переключение) между множеством точек которые я вывел на экран и гистограммой, которая рисуется после точек (но так чтобы точки можно было успеть рассмотреть).
Си ++
Здоровье --
Здоровье --
- Romeo
- Сообщения: 3126
- Зарегистрирован: 02 мар 2004, 17:25
- Откуда: Крым, Севастополь
- Контактная информация:
Используй таймер. Смотри API функции SetTimer, KillTimer.
P.S. Зря от MFC отказался, совсем без библиотек сейчас уже не пишут. Как вариант можно было использовать ATL + WTL.
P.S. Зря от MFC отказался, совсем без библиотек сейчас уже не пишут. Как вариант можно было использовать ATL + WTL.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
- Vladimir89
- Сообщения: 76
- Зарегистрирован: 21 май 2007, 02:25
Я тут пыталс ясделать следующее: в меню File сделать новую кнопку "Гистограмма" по нажатию которой стирались бы точки и рисовалась гистограмма.
Я в .рс эдиторе добавил туда новую кнопку, но я не понимаю какой ID для нее лучше выбрать... там есть дофига всяких: IDI, IDM... никак не могу понять что это значит и для чего каждый нужен.
Я от балды сделал название: ID_FILE, потом в switcha'x после WM_COMMAND добавил новый Case с таким названием. В него записал: WM_PAINT а потомбегин паинт и т.д.
НЕ работает.
Как мне заставить кнопку заработать? Мне уже тупо интересно)))
Я в .рс эдиторе добавил туда новую кнопку, но я не понимаю какой ID для нее лучше выбрать... там есть дофига всяких: IDI, IDM... никак не могу понять что это значит и для чего каждый нужен.
Я от балды сделал название: ID_FILE, потом в switcha'x после WM_COMMAND добавил новый Case с таким названием. В него записал: WM_PAINT а потомбегин паинт и т.д.
НЕ работает.
Как мне заставить кнопку заработать? Мне уже тупо интересно)))
Си ++
Здоровье --
Здоровье --
- Romeo
- Сообщения: 3126
- Зарегистрирован: 02 мар 2004, 17:25
- Откуда: Крым, Севастополь
- Контактная информация:
Вот поэтому я тебе и сказал, что зря ты отказался от MFC. Чтобы писать на чистом Win32 API нужно очень хорошу понимать архитектуру приложений Win и подробности процессов маршрутизации сообщений.
Правильно делать так:
Правильно делать так:
Код: Выделить всё
case WM_COMMAND:
{
switch(wparam)
{
case ID_FILE:
bGisto = true;
InvalidateRect(NULL);
break;
}
}
case WM_PAINT:
{
if (bGisto)
{
// Рисуем гистограмму
}
else
{
// Рисуем точки
}
}
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
- Vladimir89
- Сообщения: 76
- Зарегистрирован: 21 май 2007, 02:25
Да я почему от MFC отказался. Я тупой и никак не получалось заставить код, который находился в обьекте документа работать в в классе onDraw.
Я делал все как писар Холзнер в своей книге про MS Visual С++ 6 но не работало.
Почему то комманда GetDocument() не работала. Вот я и перешел на просто Win32.
Я делал все как писар Холзнер в своей книге про MS Visual С++ 6 но не работало.
Почему то комманда GetDocument() не работала. Вот я и перешел на просто Win32.
Си ++
Здоровье --
Здоровье --
- Vladimir89
- Сообщения: 76
- Зарегистрирован: 21 май 2007, 02:25
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;
error C2065: 'bGisto' : undeclared identifier
error C2660: 'InvalidateRect' : function does not take 1 arguments
Что делать?
Си ++
Здоровье --
Здоровье --
Самостоятельно исправь ошибки.