Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как наложить BITMAP на кнопку 
:(
    Опции темы
coach
Дата 28.8.2006, 22:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 28.8.2006

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



Есть кнопка, созданная через CreateWindow()
как можно наложить на эту кнопку BITMAP

PM MAIL   Вверх
chozen
Дата 28.8.2006, 23:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 64
Регистрация: 14.8.2006

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



Ну, что ж:
 - получаем DC кнопеля
 - создаем tagPAINTSTRUCT  smile  Объявляем, точнее.
 - создаем CreateCompatibleDC к DC кнопки, CreateCompatibleBitmap к DC кнопеля
 - заполняем структуру BITMAPINFO
 - далее SetDIBits и SelectObject к компатибл dc

Кароч, щас не могу найти так быстро исходник... Надо, напиши, поИСЧУ!

PM MAIL   Вверх
GremlinProg
Дата 28.8.2006, 23:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 99
Всего: 106





--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
RDN_ResidentS
  Дата 26.12.2006, 15:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 26.12.2006

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



Цитата

chozen

Кароч, щас не могу найти так быстро исходник... Надо, напиши, поИСЧУ!


Пожалуйста найди исходник и выложи... ОК? Очень нужен!!!

И еще кто знает как наложить BITMAP на кнопку, пожалуйста  опишите алгоритм создания.
Р.S. пожалуйста напишите алгоритм нормальным языком без фени... и прочих выражений, на языке С++.
PM MAIL   Вверх
Aleksandor
Дата 26.12.2006, 22:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Практик
**


Профиль
Группа: Участник
Сообщений: 272
Регистрация: 22.11.2005
Где: россия, зеленогра д

Репутация: 10
Всего: 12



Цитата(coach @ 28.8.2006,  22:30)
Есть кнопка, созданная через CreateWindow()
как можно наложить на эту кнопку BITMAP

В смысле background сделать для кнопки? Или рисовать всю кнопку самому? 


--------------------
Call out Gouranga be happy!!!
Gouranga Gouranga Gouranga ....
That which brings the highest happiness!!
PM MAIL   Вверх
RDN_ResidentS
  Дата 27.12.2006, 22:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 26.12.2006

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



Цитата

Aleksandor
Цитата

Цитата(coach @ 28.8.2006,  22:30)
Есть кнопка, созданная через CreateWindow()
как можно наложить на эту кнопку BITMAP


В смысле background сделать для кнопки? Или рисовать всю кнопку самому? 


Напиши и как background сделать для кнопки, и как рисовать всю кнопку самому.
Пожалуйста, очень надо! smile 
 smile  smile  smile 
PM MAIL   Вверх
Aleksandor
Дата 27.12.2006, 22:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Практик
**


Профиль
Группа: Участник
Сообщений: 272
Регистрация: 22.11.2005
Где: россия, зеленогра д

Репутация: 10
Всего: 12



Ну если самому рисовать то OWNERDRAW примерно так
создаешь кнопку (кнопка это тоже окно)

    hwndButton1 = CreateWindow("BUTTON","", WS_CHILD | BS_OWNERDRAW, 
    5, rcRebar.bottom+3, 55, 8,   hWnd, (HMENU) ID_BUTTON1,  hInst, NULL); 

загружаешь для нее битмапы (нажатая, отпущена)
   hbmClose = LoadBitmap( hInst, MAKEINTRESOURCE(IDB_BITMAP19)); 
   hbmCloseA = LoadBitmap( hInst, MAKEINTRESOURCE(IDB_BITMAP20)); 

обрабатываешь сообщения WM_DRAWITEM
Код

         case WM_DRAWITEM: 
{
        LPDRAWITEMSTRUCT lpdis = (LPDRAWITEMSTRUCT) lParam; 
        if (lpdis->CtlType!=ODT_BUTTON) break;
        hdcMem = CreateCompatibleDC(lpdis->hDC); 

        if (lpdis->CtlID==ID_BUTTON9) {
        if (lpdis->itemState & ODS_SELECTED) SelectObject(hdcMem, hbmCloseA);          
        else SelectObject(hdcMem, hbmClose); }

StretchBlt( lpdis->hDC, lpdis->rcItem.left, lpdis->rcItem.top, lpdis->rcItem.right - lpdis->rcItem.left,  lpdis->rcItem.bottom - lpdis->rcItem.top, hdcMem, 0, 0, 55, 8, SRCCOPY); 

            DeleteDC(hdcMem);             
}
            return TRUE; 


 Ну еще приходится сабклассить кнопки чтобы обрабатывать переключение фокуса и табуляции, у штатных это все включено. Кроме того стили XP не поддерживаются. В общем мороки много  smile  Приходится все ручками делать.

Насчет бакграунда проще но не могу сейчас писать, может завтра.


--------------------
Call out Gouranga be happy!!!
Gouranga Gouranga Gouranga ....
That which brings the highest happiness!!
PM MAIL   Вверх
RDN_ResidentS
Дата 27.12.2006, 23:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 26.12.2006

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



Спасибо огромное Aleksandor!!!!
PM MAIL   Вверх
Kornev
Дата 1.5.2007, 18:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 12.12.2006

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



Александр, громаднейшее спасибо!!!!!
только по моему в CreateWindow нужно ещё добавить | WS_VISIBLE
По крайней мере у меня без єтого работать не стало.
А остальное - СУПЕР
 smile

Добавлено через 3 минуты и 5 секунд
Подскажи пожалуйста, а как можно сделать чтоб кнопка ещё меняла свой вид, когда на неё наводишь курсор?
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




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


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

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