• 🔥 Бесплатный курс от Академии Кодебай: «Анализ защищенности веб-приложений»

    🛡 Научитесь находить и использовать уязвимости веб-приложений.
    🧠 Изучите SQLi, XSS, CSRF, IDOR и другие типовые атаки на практике.
    🧪 Погрузитесь в реальные лаборатории и взломайте свой первый сайт!
    🚀 Подходит новичкам — никаких сложных предварительных знаний не требуется.

    Доступ открыт прямо сейчас Записаться бесплатно

Windows Api

  • Автор темы Автор темы RDN_ResidentS
  • Дата начала Дата начала
R

RDN_ResidentS

Есть кнопка созданная с помощью CreateWindow()
hButton = CreateWindow("button", "", WS_CHILD | WS_VISIBLE | BS_OWNERDRAW,
10, 10, 62, 18, hWnd, (HMENU) ID_BUTTON, hInst, NULL);

Как на эту кнопку наложить BITMAP??

Что мне нужно от этой кнопки:
1. При наведении на нее курсором мыши чтобы она подсвечивалась.
2. При нажатии на нее она меняла вид на нажатый.
3. При отжатии отображала не нажатую кнопку.
Нужно так сделать чтобы она была схожа на кнопку со стилем BS_DEFPUSHBUTTON. Т. е. при нажатой левой кнопке мыши, она нажималась а при отжатии кнопки она сразу отжималась.

Правда я пробывал, но кнопка что то не так работает, как мне хотелось, если кто может помогите..., please!


Прикрепленные данные


Посмотреть вложение find_up.bmp
Посмотреть вложение find_dn.bmp
Посмотреть вложение MyButton.cpp.txt
Посмотреть вложение Resource.h.txt
 
Не уверен, но попробуй...
1. Получить контекст кнопки HDC hDC=GetDC(......);
2. На события развесить BitBlt (не помню точно, но вроде так)
 
могу помочь только так
Код:
BEGIN_MESSAGE_MAP(CYourDlg, CDialog)
//{{AFX_MSG_MAP(CYourDlg)		
ON_WM_LBUTTONDOWN() //Ловить нажатие на мышь
ON_WM_LBUTTONUP( )//ловить отпускание мыши
//}}AFX_MSG_MAP
END_MESSAGE_MAP()

обьявляешь в классе функции обработки мыши
Код:
afx_msg void OnLButtonDown( UINT, CPoint );
afx_msg void OnLButtonUp( UINT, CPoint );

в этих функциях рисуешь бмп
Код:
			CDC* pDC;
pDC = GetWindowDC();//дескриптор окна
CBitmap bmp;
BITMAP bmpInfo;	
bmp.LoadBitmap(IDB_BITMAP1);	
bmp.GetBitmap(&bmpInfo);
CDC dcMemory;
dcMemory.CreateCompatibleDC(pDC);
CBitmap* pOldBitmap = dcMemory.SelectObject(&bmp);
//здесь "404, 63" - координата точки, куда вывести бмп
pDC->BitBlt(404, 63, bmpInfo.bmWidth, bmpInfo.bmHeight, &dcMemory, 
0, 0, SRCCOPY);
Попытайся как-нибудь узнать координаты, куда выводить.
А может использовать область, куда рисуешь как кнопку(в смысле убрать её вообще).
При этом надо обрабатывать точку нажатия (CPoint).
Вместо BitBlt() можно сделать PictureControl и назначать ему бмп-ресурс. Но я не знаю как, сам выложил эту тему на форум. Помог?
 
Для: EuGenius, не надо помогать абы как.
Для автора - на codeproject полно кнопок с картинками. Найди пример попроще и посмотри реализацию.
 
В библиотеках MFC и WTL есть специальный класс CBitmapButton.
 
Мы в соцсетях:

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab