|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
26.03.2010, 19:55 | #1 |
Форумчанин
Регистрация: 18.04.2009
Сообщений: 688
|
МЕТАФАЙЛЫ
Добрый день. сделал всё как написано в книжке, но во-первых не работает, во-вторых есть вопросы (указаны в комментариях)
Код:
Код:
Код:
|
26.03.2010, 23:06 | #2 | ||||||
Участник клуба
Регистрация: 18.10.2008
Сообщений: 1,409
|
Цитата:
Цитата:
Цитата:
Цитата:
SelectObject выбирает созданную кисть в контекст устройства, и возвращает ранеее выбранную кисть Цитата:
The InflateRect function increases or decreases the width and height of the specified rectangle. The InflateRect function adds dx units to the left and right ends of the rectangle and dy units to the top and bottom. The dx and dy parameters are signed values; positive values increase the width and height, and negative values decrease them. Цитата:
Последний раз редактировалось counter; 26.03.2010 в 23:14. |
||||||
27.03.2010, 09:39 | #3 |
Форумчанин
Регистрация: 18.04.2009
Сообщений: 688
|
а чего не работает???(((((
|
27.03.2010, 10:28 | #4 |
Форумчанин
Регистрация: 18.04.2009
Сообщений: 688
|
я кажись понял чё не пашет.
во-первых у меня была кодировка юникода, во вторых синтаксис. но есть важный вопрос по поводу компиляции. вот у нас есть многофайловый проект. например в файле f.h описано объявление класса, в файле f.cpp его реализация, а в файле main.cpp сама прога. как правильно подключить? у меня получилось только подлючить к f.cpp f.h, а к main.cpp f.cpp. но кажись это криво как-то . подскажите плиз как праивльно надо подключить и как всё компилится |
27.03.2010, 10:35 | #5 |
Участник клуба
Регистрация: 18.10.2008
Сообщений: 1,409
|
не компилится из-за ошибок синтаксиса (видимо это был копипаст из книги)
cpp не подключаются, надо подключать h-файлы |
27.03.2010, 12:12 | #6 |
Форумчанин
Регистрация: 18.04.2009
Сообщений: 688
|
если я вот так пишу то нихрена не пашет:
Код:
как вооббще надо правильно было бы подключать? |
27.03.2010, 14:05 | #7 |
Форумчанин
Регистрация: 18.04.2009
Сообщений: 688
|
как я прочитал в книжке: "Использование любого графического объекта предполагает выполнение следующей последовательности операций:
1. Создать графический объект 2. Выбрать созданный объект в контекст устройства 3. Вызывать графическую функцию, работающую с объектом 4. Удалить объект из контекста устройства, вернув предшествующий объект. 5. Уничтожить объект вроде бы первые 4 выполнены: Код:
hPen = CreatePen(PS_SOLID, 10, RGB(255, 160, 140));//1. Создаём графический объект hOldPen = (HPEN)SelectObject(hdc, hPen);//2. Выбираем созданный объект в контекст устройства hBrush = CreateSolidBrush(RGB(140, 160, 255));//1. Создаём графический объект hOldBrush = (HBRUSH)SelectObject(hdc, hBrush);//2. Выбираем созданный объект в контекст устройства Rectangle (hdc, r.left, r.top, r.right, r.bottom);//3. Вызываем графическую функцию, раюотающую с объектом не понятно, с чем функция работает с кистью или пером? в первый раз мы в hdc записали перо, затем пререзаписали кисть. если записали перо в первый раз, а затем поверх кисть записали значит с кистью работали. но зачем тогда надо было в первый раз перо туда записывать? За.ем. у нас 2 раза создаётся перо. Если уж так делаем то по идее мы дожны были бы 1 раз поработать с пером, удалить его, а потом заново создавать? или как? что-то я не догоняю. |
27.03.2010, 15:14 | #8 | ||||
Участник клуба
Регистрация: 18.10.2008
Сообщений: 1,409
|
Цитата:
Цитата:
Цитата:
Цитата:
Как вариант: 1. В начале программы создать перо и кисть (дескрипторы сохранить) CreatePen и CreateSolidBrush 2. Выбрать в контекст перо SelectObject 3. Работать с пером 4. Выбрать в контекст кисть SelectObject 5. Работать с кистью 6. В конце программы удалить объекты перо и кисть DeleteObject Последний раз редактировалось counter; 27.03.2010 в 15:17. |
||||
27.03.2010, 16:43 | #9 |
Форумчанин
Регистрация: 18.04.2009
Сообщений: 688
|
хм. странно как-то
hPen = CreatePen(PS_SOLID, 10, RGB(255, 160, 140));//1. Создаём графический объект hOldPen = (HPEN)SelectObject(hdc, hPen);//2. Выбираем созданный объект в контекст устройства hBrush = CreateSolidBrush(RGB(140, 160, 255));//1. Создаём графический объект hOldBrush = (HBRUSH)SelectObject(hdc, hBrush);//2. Выбираем созданный объект в контекст устройства Rectangle (hdc, r.left, r.top, r.right, r.bottom);//3. Вызываем графическую функцию, раюотающую с объектом удаляю первые 2 строчки - другой результат. получается что функция Rectangle (hdc, r.left, r.top, r.right, r.bottom) работает с 2мя объектами почему-то, только непонятно почему вот заголовочный файл Код:
Код:
|
27.03.2010, 17:23 | #10 | |
Участник клуба
Регистрация: 18.10.2008
Сообщений: 1,409
|
глянул MSDN:
Цитата:
Pen для контура, Brush - для заливки - потому и могут существовать одновременно Удаляйте не нужные объекты Код:
|
|