Змінюй хід війни! Допомагай ЗСУ!

HELP! Нужна срочная помощь по C+ !

  • Автор теми Автор теми Slavik12
  • Дата створення Дата створення
Статус: Офлайн
Реєстрація: 16.04.2009
Повідом.: 76
HELP!!!!! Нужна срочная помощь по C++ !!!

Задача такова - создать компоненту, наследуясь от BitBtn, ничего в ней не изменять кроме того что надо её перерисовать - вобщем сделать её круглой...
 
Это тебе не по С++ а по Сибюлддеру помощь :)
Копать в сторону виндовых регионов: CreateEllipticRgn, SetWindowRgn и т.д.
 
Задание както криво звучит. Компонент наследуемый от Bitbtn. Во первых билдер не знаю есть похожая функция на вижуале она называется BitBlt. Думаю она выполняет тоже самое. Как мне кажется здесь нужно создать свой собственный контрол. Есть окна, есть кнопки, а нам нужно создать круглое окно. Берется создается класс который будет создавать круглое окно и рисовать на нем картинку. При вызове нашей функции мы должны создать окно размерами с изображение, наложить на него эллиптический регион ну, а потом нарисовать на нем картинку.
 
Во первых билдер не знаю есть похожая функция на вижуале она называется BitBlt. Думаю она выполняет тоже самое.
*****. Еще есть созвучные слова "Сартр" и "сортир", "Ван Гог" и "Ван Дамм". Смотри не перепутай.
На вижуале - это круто. Ничего, что это функция из СДК, а не из вижуала?

Как мне кажется здесь нужно создать свой собственный контрол.
Конечено свой! Наследование отменили на прошлой неделе под страхом смертной казни.
Есть окна, есть кнопки...
... а еще есть ничего не понимающие *****и.

ТС, почему бы тебе не взять библиотечку готовых скиновых компонентов? Пусть даже за денежку. Потому как код тоже будет за денежку ;) Кстати, а зачем тебе одна скиновая кнопка? Обычно в бюлдерном скиновом ифейсе скиновые и нескиновые компоненты не дружат между собой...
 
BFG-9000, успокойся остряк.
... а еще есть ничего не понимающие *****и.
Мне как-то всеравно кем вы хотите меня выставить. Могу сказать, что похожую кнопку я написал года четыре назад. Причем у нее можно было задавать картинки на разные состояния: нажата, отжата, пришла мышка, ушла мышка. И я действительно создал класс. И этот класс был наследуемый. И я нигде не кричал, что нужно писать класс с нуля. Это вы уже, что-то придумали. Судя по вашей агрессии у вас явно хреновый день. Не портите его другим.
 
Мне как-то всеравно кем вы хотите меня выставить.

не обижайся, но BFG-9000 в некоторой степени прав, ты написал фигню, "про класс BitBtn не знаю, но есть похожая функция на вижуале BitBlt" - и я поржал :іржач:
 
Ещё раз - нужно просто сделать "копию" BitBtn только круглую, где-то же задаёться форма Rectangle или типа того, где? - Должна быть ф-ция там TCanvas или Paint... я не знаю где именно они находяться (в каком классе)... и не надо писать посмотри там-то - там-то или это за денежку... если кто может помочь помогите пожалуйста.
 
Ещё раз - нужно просто сделать "копию" BitBtn только круглую, где-то же задаёться форма Rectangle или типа того, где? - Должна быть ф-ция там TCanvas или Paint... я не знаю где именно они находяться (в каком классе)... и не надо писать посмотри там-то - там-то или это за денежку... если кто может помочь помогите пожалуйста.

Ну так наследуйся от этой BitBtn а в конструкторе делай CreateEllipticRgn а потом SetWindowRegion.
 
Под рукой билдера нет, поэтому за точность не ручаюсь, но тебе нужно создать класс, наследуемый от TBitBtn, переопределить его метод Paint (не забыв вызвать унаследованый) и создать круглый регион вызовом CreateEllipticRgn().
Можно обработать событие OnCreate и регион создать в нём.
 
Ещё раз - нужно просто сделать "копию" BitBtn только круглую, где-то же задаёться форма Rectangle или типа того, где? - Должна быть ф-ция там TCanvas или Paint...

форма кнопки задается внутрях винды, при создании окна CreateWindow передаются размеры окна, окно будет прямоугольным с указанными размерами. Если тебе нужна своя отрисовка и не прямоугольная форма, то можешь в конструкторе создать REGION нужной формы и установить его окну кнопки с помощью Посилання видалено, этой функции нужно передать хэндл окна кнопки и регион который будет описывать форму окна кнопки. Однако кроме этого нужно еще и написать обработчик WM_PAINT... если нужны всякие там градиенты и т.п. то для непрямоугольных окон это дело непростое.
 
Попробую все варианты, кто может дайте .cpp готовый, просто времени в обрез - ещё аську и p2p надо написать - там пока вообще завал. Заранее спасибо.
 
если нужны всякие там градиенты и т.п. то для непрямоугольных окон это дело непростое.
Не бывает "непрямоугольных окон" :) Окно останется прямоугольным и на его DC (ну или канву если так кому-то ближе ;) )можно будет рисовать обычные прямоугольные битмапки и рассчитывать эффекты как на обычном прямоугольнике. Регион определяет исключительно область, которая будет копироваться на "подложку", т.е. на родительскую DC (канву).
 
Не бывает "непрямоугольных окон" :) Окно останется прямоугольным и на его DC можно будет рисовать обычные прямоугольные битмапки

ну это как посмотреть, прямоугольной останется память, а вот окно уже будет не прямоугольным :D Собственно говоря, к примеру текстуры в 3D играх всегда квадратные и всегда POT (размер стороны является степенью двойки), правда бывает некоторые видеокарты поддерживают не POT текстуры, но это редко используется (для совместимости). Тем не менее от этого видимое изображение текстуры не обязательно квадратное - квадратное только представление в памяти.

Регион определяет исключительно область, которая будет копироваться на "подложку", т.е. на родительскую DC (канву).

не совсем так, регион также определяет область на которую окно будет реагировать при перемещении и кликах мышью, невидимые участки не получат мышиных месаджей
 
помогите кодом, товарищи.
 
ну это как посмотреть, прямоугольной останется память, а вот окно уже будет не прямоугольным :D
Давай все-таки придерживаться официальной терминологии, согласно которой окно - это окно, а регион - это всего-лишь область окна:
The SetWindowRgn function sets the window region of a window. The window region determines the area within the window where the system permits drawing. The system does not display any portion of a window that lies outside of the window region

Окно - это и есть объект в памяти, а то что ты видишь на экране - это отрисовка окна по тем или иным правилам. А то по твоей логике если у окна атрибут SW_HIDE - так оно вообще не существует? ;)
просто времени в обрез - ещё аську и p2p надо написать
А гугль тебе точно не надо писать? Смотри, без гугля у тебя не получится полностью поработить интернет :D
Тебе же сказали, про что надо почитать - не ленись, в МСДН есть семплы и вообще там все просто. Учись, студент.
 
Создаешь новую компоненту в качестве класса предка = bitbtn, а потом уже юзаешь советы тех, кто выше сказывал.
 
Давай все-таки придерживаться официальной терминологии, согласно которой окно - это окно, а регион - это всего-лишь область окна:

да, регион это область окна, но с другой стороны на экране окно представляется областью, ограниченной регионом :D В конечном счете для пользователя окно - это область с которой он взаимодействует. С точки зрения системы да, тут нужно говорить с точки зрения официальной терминологии. Но системное окно у приложения может быть одно на все контролы. И тогда два, три и более окон видимых для пользователя самостоятельными сущностями, с точки зрения системы будут представляться как одно окно. :)

А то по твоей логике если у окна атрибут SW_HIDE - так оно вообще не существует? ;)

почему-же не существует, существует, но оно переведено в другое пространство (HIDE), поэтому его не видно :D Это как i=sqrt(-1) - числа вроде как нет, но вычисления с ним производить можно :)
 
Останнє редагування:
А гугль тебе точно не надо писать? Смотри, без гугля у тебя не получится полностью поработить интернет :D

Ну и это еще не всё, для своего гугля неплохо было бы написать еще и свой браузер :)

⚠ Тільки зареєстровані користувачі бачать весь контент та не бачать рекламу.
тут много кнопок готовых видел (правда точно не помню для плюсов или для шарпа). Можешь скачать и посмотреть код, или заюзать сразу
 
Назад
Зверху Знизу