Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.64/14: Рейтинг темы: голосов - 14, средняя оценка - 4.64
7 / 7 / 2
Регистрация: 16.10.2010
Сообщений: 74
1

Как закрасить Rectangle

20.01.2012, 16:53. Просмотров 2913. Ответов 16
Метки нет (Все метки)

Всем привет, у меня такая проблема - сделал програмку которая рисует рандомно прямоугольники в небольшой форме, теперь хочу чтобы они были разноцветными, добавил пару строк но компилятор выдал мне Extra parameter in call to __stdcall Rectangle(HDC__ *,int,int,int,int)
Вот инклуды и переменные
C++
1
2
3
4
5
6
7
8
9
10
#include <windows.h>    
#pragma hdrstop
#define SizeWindow 400  
//описание переменных
MSG msg;            
HDC hdc;            
HBRUSH hBrush;      
HWND Wnd;       
WNDCLASS wnds;      
char ClassName[255]="Rectangle";
Вот часть кода где вылетает ошибка
C++
1
2
3
4
hBrush=CreateSolidBrush(random(1000000));
Rectangle(hdc,random(SizeWindow),
random(SizeWindow/2),
random(SizeWindow),random(SizeWindow),hBrush);
причем без hBrush'а все работает и рисует без проблем
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.01.2012, 16:53
Ответы с готовыми решениями:

Класс Rectangle совпадает с функцией Rectangle
Пишу свой класс Rectangle, который при отрисовки использует функцию Rectangle из GDI. Возникает...

Как создать Rectangle динамически?
Всем доброго времени суток!) Пишу приложение под Андроид и не могу понять в чем дело. Хочу...

Как заштриховать Rectangle в WPF?
Подскажите как заштриховать Rectangle в wpf?

Как спрятать часть изображения rectangle?
Добрый день! Представьте себе winFrom'овский textBox со скроллами. То есть имеется видимая часть (в...

16
30 / 30 / 6
Регистрация: 15.12.2011
Сообщений: 108
20.01.2012, 17:12 2
поидее надо написать так
C++
1
2
3
4
hBrush=CreateSolidBrush(random(1000000));
HGDIOBJ oldBrush = SelectObject(hdc, hBrush);
//рисуем прямоугольник, не передавая браш в Rectangle функцию.
SelectObject(oldBrush);
0
7 / 7 / 2
Регистрация: 16.10.2010
Сообщений: 74
20.01.2012, 17:20  [ТС] 3
дык при этом теряются координаты и прямоугольники не рисуются рандомно
0
30 / 30 / 6
Регистрация: 15.12.2011
Сообщений: 108
20.01.2012, 17:29 4
Цитата Сообщение от whizzkey Посмотреть сообщение
дык при этом теряются координаты и прямоугольники не рисуются рандомно
ты просто неправильно используешь gdi функции. нужно вот так вот
C++
1
2
3
4
5
6
hBrush=CreateSolidBrush(random(1000000));
HGDIOBJ oldBrush = SelectObject(hdc, hBrush);
Rectangle(hdc,random(SizeWindow),
random(SizeWindow/2),
random(SizeWindow),random(SizeWindow));
SelectObject(oldBrush);
0
7 / 7 / 2
Регистрация: 16.10.2010
Сообщений: 74
20.01.2012, 17:39  [ТС] 5
Повыскакивали Ошибки!!!
C++
1
2
3
#1 Cannot convert 'void *' to 'HDC__ *'
#2 Type mismatch in parameter 'hdc' (wanted 'HDC__ *', got 'void *')
#3 Too few parameters in call to '__stdcall SelectObject(HDC__ *,void *)'

З.Ы. я gdi правильно подключил? HGDIOBJ oldBrush;
0
30 / 30 / 6
Регистрация: 15.12.2011
Сообщений: 108
20.01.2012, 17:45 6
тебя не затруднит выложить проэкт ? т.к. я пользовался MFC обертками для рисования, и мне тяжело так на абум анализировать ошибки.
0
7 / 7 / 2
Регистрация: 16.10.2010
Сообщений: 74
20.01.2012, 17:56  [ТС] 7
Держи
0
Вложения
Тип файла: rar Process1.rar (2.48 Мб, 29 просмотров)
30 / 30 / 6
Регистрация: 15.12.2011
Сообщений: 108
20.01.2012, 18:12 8
ооо, все нашел, мой бок, надо SelectObject(hdc, oldBrush); вместо SelectObject(oldBrush);
сори
0
7 / 7 / 2
Регистрация: 16.10.2010
Сообщений: 74
20.01.2012, 18:20  [ТС] 9
Серавно загоняет, ругается на case , комментю SelectObject(hdc, oldBrush) и HGDIOBJ oldBrush=SelectObject(hdc, hBrush) и все работает по старому(
0
30 / 30 / 6
Регистрация: 15.12.2011
Сообщений: 108
20.01.2012, 18:22 10
попробуй так
C++
1
2
3
4
5
6
7
8
9
10
case WM_TIMER:
{
hBrush=CreateSolidBrush(random(1000000));
HGDIOBJ oldBrush = SelectObject(hdc, hBrush);
Rectangle(hdc,random(SizeWindow),
random(SizeWindow/2),
random(SizeWindow),random(SizeWindow));
SelectObject(hdc, oldBrush);
}
break;
0
7 / 7 / 2
Регистрация: 16.10.2010
Сообщений: 74
20.01.2012, 18:29  [ТС] 11
Не, убрать дефолт я немогу, иначе окно программы не появляется
0
30 / 30 / 6
Регистрация: 15.12.2011
Сообщений: 108
20.01.2012, 18:31 12
ок, что за ошибка там вылетает ??? ибо у мя в студии все собралось норм.
0
7 / 7 / 2
Регистрация: 16.10.2010
Сообщений: 74
20.01.2012, 18:39  [ТС] 13
я делаю в C++ Buildere, он пишет Case bypasses initialization of a local variable
..............
Хехе все я разобрался - убрал инициализацию переменной HGDIOBJ oldBrush = SelectObject(hdc, hBrush) из Каси и о Чудо! все пашет=)
0
30 / 30 / 6
Регистрация: 15.12.2011
Сообщений: 108
20.01.2012, 18:43 14
возьми код под case в фигурные скобочки, т.к. там используецо локальная переменная.
0
Жарю без масла
867 / 749 / 225
Регистрация: 13.01.2012
Сообщений: 1,702
20.01.2012, 18:51 15
Цитата Сообщение от whizzkey Посмотреть сообщение
Всем привет, у меня такая проблема - сделал програмку которая рисует рандомно прямоугольники в небольшой форме, теперь хочу чтобы они были разноцветными, добавил пару строк но компилятор выдал мне Extra parameter in call to __stdcall Rectangle(HDC__ *,int,int,int,int)
Вот инклуды и переменные
C++
1
2
3
4
5
6
7
8
9
10
#include <windows.h>    
#pragma hdrstop
#define SizeWindow 400  
//описание переменных
MSG msg;            
HDC hdc;            
HBRUSH hBrush;      
HWND Wnd;       
WNDCLASS wnds;      
char ClassName[255]="Rectangle";
Вот часть кода где вылетает ошибка
C++
1
2
3
4
hBrush=CreateSolidBrush(random(1000000));
Rectangle(hdc,random(SizeWindow),
random(SizeWindow/2),
random(SizeWindow),random(SizeWindow),hBrush);
причем без hBrush'а все работает и рисует без проблем
так и должно быть. ф-ия Rectangle принимает 5 параметров, а не 6, и hBrush там лишний
0
30 / 30 / 6
Регистрация: 15.12.2011
Сообщений: 108
20.01.2012, 18:56 16
канешн, hBrush убери оттуда, я наверное провтыкал
0
7 / 7 / 2
Регистрация: 16.10.2010
Сообщений: 74
20.01.2012, 18:58  [ТС] 17
Всё уже работает! см #13 пост, можно закрывать тему
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.01.2012, 18:58

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Как из класса добавить rectangle в canvas
Добрый день, есть окно wpf mainwindow на нем canvas, есть класс class1 как из class1 добавить...

Как создать проверку столкновения Rectangle и Vector2?
Как создать проверку столкновения Rectangle и Vector2 на С#

Как узнать расположение на Canvas'е фигур Rectangle и Ellipse
Как узнать расположение на Canvas'е у таких фигур как System.Windows.Shapes.Ellipse и...

Как создать несколько объектов с разными координатами в Rectangle
Есть класс easyBlock, в нем описание блоков, которые должны рисовать на форме Один блок вывести не...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.