powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Как организовать mouse hover и leave для отдельных кнопок?
6 сообщений из 6, страница 1 из 1
Как организовать mouse hover и leave для отдельных кнопок?
    #38936659
Фотография Картежник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
у меня сейчас WM_MOUSEHOVER и WM_MOUSELEAVE работают только для формы.т.е. когда я перехожу на кнопку вызывается WM_MOUSELEAVE , наверное потому что считается что покинул основное окно
...
Рейтинг: 0 / 0
Как организовать mouse hover и leave для отдельных кнопок?
    #38936715
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Картежник,

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

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

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

код покажи...
...
Рейтинг: 0 / 0
Как организовать mouse hover и leave для отдельных кнопок?
    #38938117
Фотография Картежник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Как организовать mouse hover и leave для отдельных кнопок?
    #38938233
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Картежник,

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


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