Поиск:

Ответ в темуСоздание новой темы Создание опроса
> прозрачный фон 
V
    Опции темы
vinter
Дата 8.2.2007, 15:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 4
Всего: 56



почитал похожие топики, ничем не помогло..
проблема : рисую свою кнопку, фон у окна картинка с градиентной заливкой, поэтому задний фон у кнопки поставить не могу(всегда разный будет), рисую в памяти потом кидаю BitBlt'ом, так вот вопрос как мне у битмапа в памяти сделать фон как у картинки, причем чтобы этот фон менялся в зависимости от положения кнопки на окне, надеюсь понятно изьяснился smile 


--------------------
Мой блог
PM MAIL WWW   Вверх
_hunter
Дата 8.2.2007, 15:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 5
Всего: 98



не совсем понятно...
т.е. ты хочеш иметь битмап картинки "под кнопкой"? -- тогда самый простой способ (AFAIK) -- сделать функцию, принимающую этот битмап от парента (в OnEraseBkgnd сохраняй фон и передавай его)


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
vinter
Дата 8.2.2007, 17:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 4
Всего: 56



попробую объяснит яснее, битмап в памяти имеет прямоугольную форму, а я допустим рисую круглую кнопку, так вот круглая кнопка занимает не весь битмап, а только его часть, так вот мне нужно, чтобы часть битмапа которая к кнопке отношения не имеет была цвета заднего фона..


--------------------
Мой блог
PM MAIL WWW   Вверх
_hunter
Дата 8.2.2007, 17:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 5
Всего: 98



ну так делай как я сказал, а rect == описанному вокруг кнопки прямоугольнику...


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
vinter
Дата 8.2.2007, 18:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 4
Всего: 56



т.е мне сохранить кусок фона, на который ложится кнопка, а потом запихать ее в битмап?? я правильно понял?? если правильно то возникает вопрос, как сохранить этот кусок фона..??


--------------------
Мой блог
PM MAIL WWW   Вверх
_hunter
Дата 8.2.2007, 19:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 5
Всего: 98



правильно.
сохранять примерно так:
Код

void CCustomPicture::SaveBackground(CDC* dc, const CRect& rect)
{
    if (_background)
    {
        DeleteObject(_background);
        _background = NULL;
    }

    HBITMAP bitmap = CreateCompatibleBitmap(dc->m_hDC, rect.Width(), rect.Height());
    if (bitmap)
    {
        HDC compatibleDC = CreateCompatibleDC(dc->m_hDC);
        if (compatibleDC)
        {
            HGDIOBJ oldBitmap = SelectObject(compatibleDC, bitmap);
            if (oldBitmap) 
            {
                if (BitBlt(compatibleDC, 0, 0, rect.Width(), rect.Height(), dc->m_hDC, rect.left, rect.top, SRCCOPY)) 
                {
                    _background = bitmap;
                }

                SelectObject(compatibleDC, oldBitmap);
            }

            DeleteDC(compatibleDC);
        }
    }
}

(_background -- член класса типа HBITMAP).
предок вызывает эту функцию в самом конце OnEraseBkgnd() (когда весь фон гарантированно отрисован)


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
vinter
Дата 8.2.2007, 20:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 4
Всего: 56



_hunter, спасибо, попробую отпишусь


--------------------
Мой блог
PM MAIL WWW   Вверх
vinter
Дата 11.2.2007, 15:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 4
Всего: 56



_hunter, создал эту ф-ию она у меня член класса кнопки, но она не вызывается, т.е никогда в нее не заходит, почему такое может быть??, может я че не так понял..да и в MSDN такой ф-ии не нашел..


--------------------
Мой блог
PM MAIL WWW   Вверх
FelikZ
Дата 11.2.2007, 16:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Старый Маразматик
**


Профиль
Группа: Участник
Сообщений: 380
Регистрация: 1.12.2006
Где: Vault 13

Репутация: нет
Всего: 5



OnEraseBkgnd() - определил?


--------------------
user posted image
PM WWW ICQ Skype   Вверх
vinter
Дата 11.2.2007, 17:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 4
Всего: 56



да и оставил, его пустым


--------------------
Мой блог
PM MAIL WWW   Вверх
FelikZ
Дата 11.2.2007, 17:25 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Старый Маразматик
**


Профиль
Группа: Участник
Сообщений: 380
Регистрация: 1.12.2006
Где: Vault 13

Репутация: нет
Всего: 5



Цитата(_hunter писал: )

предок вызывает эту функцию в самом конце OnEraseBkgnd() (когда весь фон гарантированно отрисован)

имелось ввиду что "CCustomPicture::SaveBackground" вызывается в конце тобою определенной
ф-и OnEraseBkgnd() .

Это сообщение отредактировал(а) FelikZ - 11.2.2007, 17:25


--------------------
user posted image
PM WWW ICQ Skype   Вверх
vinter
Дата 11.2.2007, 17:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 4
Всего: 56



FelikZ, спасибо, и последний вопрос как мне этот битмап теперь нарисовать в памяти?? BitBlt?? как??


--------------------
Мой блог
PM MAIL WWW   Вверх
vinter
Дата 11.2.2007, 18:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 4
Всего: 56



нарисовал через DrawState, всем спасибо за помощь!


--------------------
Мой блог
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.0497 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.