| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Visual C++/MFC/WTL > Создание метода для соединения 2 точек |
| Автор: zabludshiy 27.11.2012, 22:47 | ||
| Здравствуйте уважаемые форумчане Мне необходимо реализовать алгоритм плавающего горизонта. Для этого создаю класс с помощью insert->new class... Class type = Generic class. Получаю шаблон класса, где создаю несколько методов, в один из которых будут передаваться координаты 2 точек, которые соединяются линией между собой. В итоге получилось следующее:
При компиляции следующая ошибка (среда visual c++ 6.0): :\Program Files\Microsoft Visual Studio\MyProjects\kr\shapes.cpp(54) : error C2664: 'CClientDC::CClientDC' : cannot convert parameter 1 from 'class shapes *const ' to 'class CWnd *' Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast Error executing cl.exe. Может кто-нибудь укажет направление "куда копать". В стандартных файлах, н-р CKлассView::OnDraw(CDC *pDC), в параметрах идет объявление контекста устройства CDC* pDC, но откуда берется и где инициализируется этот контекст не пойму. В литературе нашел объявление CClientDC* pDC=new CClientDC(this), которое можно использовать внутри событий и методов, но применить не получилось. Насколько я разобрался, чтобы соединить 2 точки в Visual C++ нужно работать с контекстом устройства, но как его получить, чтобы он корректно работал в методе не пойму. Если нужно его передавать как параметр, то где его объявление и инициализация делается в создаваемом классе? Не могу найти ответ. При создании класса с помощью мастера, я указывал его как стандартный , может нужно создавать класс, как MFC и указать его base class , например, View или какой нибудь другой? С Visual C++ 6.0 разбираюсь около месяца, поэтому если напечатал что-то не корректно, прошу строго не судить. |
| Автор: 586 27.11.2012, 23:42 |
| В "new CClientDC" нужно передавать указатель на окно, где будет производиться рисование. Добавлено @ 23:43 Да и нежелательно для рисования каждой линии каждый раз создавать CClientDC. Лучше создать его перед рисованием. |
| Автор: zabludshiy 28.11.2012, 21:19 | ||||
| Спасибо за направление, ситуация начала проясняться Я класс создал в отдельном файле (вернее 2 файлов shapes.h b shapes.cpp) и подключаю файл shapes.h в СКлассView (krView.cpp). Создаваемое приложение однодокументное. Если я объявляю переменную CWnd *W и передаю ее в контекст устройства pDC=new CClientDC(W), то компилятор ошибки не выдает, но будет ли это корректно работать. Правильно ли я получаю указатель на окно, где будет проводиться рисование или все сложнее и нужно вызывать какие-нибудь методы для получения указателя на окно. Я так понимаю нужен указатель на активное окно, тогда метод будет применяться к нужному окну. Если так, то еще нужно переменной W присвоить указатель на активное окно или что-то в этом роде, но как это сделать что-то не могу найти.
и
|
| Автор: 586 29.11.2012, 07:02 | ||||
Окно передавай в конструктор:
В конструктор передавай указатель на класс, который объявлен в "krView.h". В результате, должно быть примерно так:
Если у тебя так, то и создавать объект CClientDC не нужно вообще, используй объект, который пришёл в OnDraw. |
| Автор: zabludshiy 30.11.2012, 22:42 |
| Спасибо, получилось |