Windows Api

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

RDN_ResidentS

#1
Есть кнопка созданная с помощью 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

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

EuGenius

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

grigsoft

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

WinMain

#5
В библиотеках MFC и WTL есть специальный класс CBitmapButton.