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

Как закрасить Rectangle - C++

20.01.2012, 16:53. Просмотров 2106. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.01.2012, 16:53
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Как закрасить Rectangle (C++):

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

Как закрасить линию?
Вот линия MoveToEx(hdc,0,350,0); LineTo(hdc,700,350); Как сделать чтобы...

Как закрасить треугольник?
Как мне закрасить треугольники? #include&lt;windows.h&gt; #include&lt;string.h&gt;...

Как закрасить шар полностью?
Здравствуйте! Мне хотелось закрасить шар полностью, но при использовании...

Как закрасить круг (circle)
Как закрасить круг в любой цвет, не могу найти таких ф-ций, setfillstyle не...

Как закрасить прямоугольник кроме кружков?
#include &lt;iostream&gt; #include &lt;Windows.h&gt; #include &lt;clocale&gt; using...

16
Melkor
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
whizzkey
7 / 7 / 2
Регистрация: 16.10.2010
Сообщений: 74
20.01.2012, 17:20  [ТС] #3
дык при этом теряются координаты и прямоугольники не рисуются рандомно
0
Melkor
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
whizzkey
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
Melkor
30 / 30 / 6
Регистрация: 15.12.2011
Сообщений: 108
20.01.2012, 17:45 #6
тебя не затруднит выложить проэкт ? т.к. я пользовался MFC обертками для рисования, и мне тяжело так на абум анализировать ошибки.
0
whizzkey
7 / 7 / 2
Регистрация: 16.10.2010
Сообщений: 74
20.01.2012, 17:56  [ТС] #7
Держи
0
Вложения
Тип файла: rar Process1.rar (2.48 Мб, 27 просмотров)
Melkor
30 / 30 / 6
Регистрация: 15.12.2011
Сообщений: 108
20.01.2012, 18:12 #8
ооо, все нашел, мой бок, надо SelectObject(hdc, oldBrush); вместо SelectObject(oldBrush);
сори
0
whizzkey
7 / 7 / 2
Регистрация: 16.10.2010
Сообщений: 74
20.01.2012, 18:20  [ТС] #9
Серавно загоняет, ругается на case , комментю SelectObject(hdc, oldBrush) и HGDIOBJ oldBrush=SelectObject(hdc, hBrush) и все работает по старому(
0
Melkor
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
whizzkey
7 / 7 / 2
Регистрация: 16.10.2010
Сообщений: 74
20.01.2012, 18:29  [ТС] #11
Не, убрать дефолт я немогу, иначе окно программы не появляется
0
Melkor
30 / 30 / 6
Регистрация: 15.12.2011
Сообщений: 108
20.01.2012, 18:31 #12
ок, что за ошибка там вылетает ??? ибо у мя в студии все собралось норм.
0
whizzkey
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
Melkor
30 / 30 / 6
Регистрация: 15.12.2011
Сообщений: 108
20.01.2012, 18:43 #14
возьми код под case в фигурные скобочки, т.к. там используецо локальная переменная.
0
retmas
Жарю без масла
865 / 747 / 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
Melkor
30 / 30 / 6
Регистрация: 15.12.2011
Сообщений: 108
20.01.2012, 18:56 #16
канешн, hBrush убери оттуда, я наверное провтыкал
0
whizzkey
7 / 7 / 2
Регистрация: 16.10.2010
Сообщений: 74
20.01.2012, 18:58  [ТС] #17
Всё уже работает! см #13 пост, можно закрывать тему
0
20.01.2012, 18:58
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.01.2012, 18:58
Привет! Вот еще темы с решениями:

с++ rectangle
Всем привет,падает первый же ассерт в rectangle_test.cpp,не могу понять...

Классы Rectangle
Определите в классе Rectangle функцию Line, которая выводит на экран координаты...

ООП С++ rectangle
Всем привет.Возникла проблема с написанием метода,не смог найти алгоритм...

Задача на классы (Rectangle)
Создать класс Rectangle, который сохраняет Декартовы координаты четырех вершин...


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

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

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