Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Как организовать mouse hover и leave для отдельных кнопок? / 6 сообщений из 6, страница 1 из 1
15.04.2015, 07:11
    #38936659
Картежник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как организовать mouse hover и leave для отдельных кнопок?
у меня сейчас WM_MOUSEHOVER и WM_MOUSELEAVE работают только для формы.т.е. когда я перехожу на кнопку вызывается WM_MOUSELEAVE , наверное потому что считается что покинул основное окно
...
Рейтинг: 0 / 0
15.04.2015, 08:52
    #38936715
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как организовать mouse hover и leave для отдельных кнопок?
Картежник,

главный секрет наверное в том, что сообщения кнопки посылаются, как ни странно, самой кнопке, а не диалогу, где она расположена. Поэтому чтобы это обработать, надо наследовать кнопку, и там это обрабатывать.
...
Рейтинг: 0 / 0
15.04.2015, 18:35
    #38937619
Картежник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как организовать mouse hover и leave для отдельных кнопок?
MasterZivКартежник,

главный секрет наверное в том, что сообщения кнопки посылаются, как ни странно, самой кнопке, а не диалогу, где она расположена. Поэтому чтобы это обработать, надо наследовать кнопку, и там это обрабатывать.

аха точно получилось через наследование.
теперь получилось так что у меня 4 кнопки, для 4-х кнопок создаю bool hover[1..4] , и для каждой из кнопок создаю callback функцию, потому что что у каждой кнопки свой размер и своя картинка(из ресурса). можно ли как то одну callback функции назначить всем 4-ем кнопкам?
...
Рейтинг: 0 / 0
16.04.2015, 10:37
    #38938017
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как организовать mouse hover и leave для отдельных кнопок?
Картежник,

код покажи...
...
Рейтинг: 0 / 0
16.04.2015, 11:54
    #38938117
Картежник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как организовать mouse hover и leave для отдельных кнопок?
MasterZivКартежник,

код покажи...

примерно так
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
...

LRESULT CALLBACK ButProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
LRESULT CALLBACK ButProc1(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
LRESULT CALLBACK ButProc2(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
LRESULT CALLBACK ButProc3(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
...
bool hov=false,hov1=false,hov2=false,hov3=false;

HWND hWndButton;
HWND hWndButton1;
HWND hWndButton2;
HWND hWndButton3;


WNDPROC lpfnOldWndProc,lpfnOldWndProc1,lpfnOldWndProc2,lpfnOldWndProc3;

BOOL InitInstance(HINSTANCE hInstance, int nCmdShow){

...

	hWndButton=CreateWindowEx(NULL, 
		"BUTTON",
		"X",
		
		WS_TABSTOP|WS_CHILD|BS_DEFPUSHBUTTON|WS_VISIBLE|BS_OWNERDRAW,
		wndwd-25,
		5,
		20,
		20,
		hWnd,
		(HMENU)IDC_CLOSE_BUTTON,
		GetModuleHandle(NULL),
		NULL);
	lpfnOldWndProc = (WNDPROC)SetWindowLong(hWndButton,
                 GWL_WNDPROC, (DWORD) ButProc);
	
	hWndButton1=CreateWindowEx(NULL, 
		"BUTTON",
		"Повторить",
		WS_TABSTOP|WS_CHILD|BS_DEFPUSHBUTTON|BS_OWNERDRAW,
		boxwd-120+(wndwd-boxwd)/2,
		80,
		120,
		30,
		hWnd,
		(HMENU)IDC_REPEAT_BUTTON,
		GetModuleHandle(NULL),
		NULL);
	lpfnOldWndProc1 = (WNDPROC)SetWindowLong(hWndButton1,
                 GWL_WNDPROC, (DWORD) ButProc1);
	
...
}


LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{

switch (message)
	{
	case WM_CTLCOLORBTN:
			if((HWND)lParam==hWndButton){
				
			
				if(!hov){ 
					hBitmap = (HBITMAP)LoadImage(hInst,MAKEINTRESOURCE(IDB_CLOSE),IMAGE_BITMAP,0,0,LR_COPYFROMRESOURCE);		
				}
				else{
					hBitmap = (HBITMAP)LoadImage(hInst,MAKEINTRESOURCE(IDB_CLOSE_HOVER),IMAGE_BITMAP,0,0,LR_COPYFROMRESOURCE);		
				}
				 hdcMem0=CreateCompatibleDC((HDC)wParam); 
				 SelectBitmap(hdcMem0,hBitmap) ;
				 BitBlt ((HDC)wParam,0,0,20,20,hdcMem0, 0,0, SRCCOPY) ;
		
			}
			if((HWND)lParam==hWndButton1){
				if(!hov1){
				 hBitmap = (HBITMAP)LoadImage(hInst,MAKEINTRESOURCE(IDB_DOWNLOAD),IMAGE_BITMAP,0,0,LR_COPYFROMRESOURCE);
				}
				else{
				 hBitmap = (HBITMAP)LoadImage(hInst,MAKEINTRESOURCE(IDB_DOWNLOAD_HOVER),IMAGE_BITMAP,0,0,LR_COPYFROMRESOURCE);
				}
		
				 hdcMem0=CreateCompatibleDC((HDC)wParam); 
				 SelectBitmap(hdcMem0,hBitmap) ;
				 BitBlt ((HDC)wParam,0,0,120,30,hdcMem0, 0,0, SRCCOPY) ;
	
			}
			...
	}
	
}





LRESULT CALLBACK ButProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
	
	switch (message)
	{
		case WM_MOUSEMOVE:
		{
		BOOL trackSuccess = TrackMouse( hWnd );
		}break;
		case WM_MOUSEHOVER:
			hov=true;
			InvalidateRect(hWnd,NULL,TRUE);
			break;
		case WM_MOUSELEAVE:
			hov=false;
			InvalidateRect(hWnd,NULL,TRUE);
			break;
	}
	return CallWindowProc(lpfnOldWndProc, hWnd, message, wParam, lParam);	
}


LRESULT CALLBACK ButProc1(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
	
	switch (message)
	{
		case WM_MOUSEMOVE:
		{
		BOOL trackSuccess = TrackMouse( hWnd );
		}break;
		case WM_MOUSEHOVER:
			hov1=true;
			InvalidateRect(hWnd,NULL,TRUE);
			break;
		case WM_MOUSELEAVE:
			hov1=false;
			InvalidateRect(hWnd,NULL,TRUE);
			break;
	}
	return CallWindowProc(lpfnOldWndProc, hWnd, message, wParam, lParam);	
}
...
...
Рейтинг: 0 / 0
16.04.2015, 13:08
    #38938233
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как организовать mouse hover и leave для отдельных кнопок?
Картежник,

посмотрю...
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Как организовать mouse hover и leave для отдельных кнопок? / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]