• Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе

    «Анализ защищенности веб-приложений»

    🔥 Записаться бесплатно!

  • CTF с учебными материалами Codeby Games

    Обучение кибербезопасности в игровой форме. Более 200 заданий по Active Directory, OSINT, PWN, Веб, Стеганографии, Реверс-инжинирингу, Форензике и Криптографии. Школа CTF с бесплатными курсами по всем категориям.

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
 
O

orcommander

Не уверен, но попробуй...
1. Получить контекст кнопки HDC hDC=GetDC(......);
2. На события развесить BitBlt (не помню точно, но вроде так)
 
E

EuGenius

могу помочь только так
Код:
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 и назначать ему бмп-ресурс. Но я не знаю как, сам выложил эту тему на форум. Помог?
 
G

grigsoft

Для: EuGenius, не надо помогать абы как.
Для автора - на codeproject полно кнопок с картинками. Найди пример попроще и посмотри реализацию.
 
W

WinMain

В библиотеках MFC и WTL есть специальный класс CBitmapButton.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!