Поясните фрагмент кода
06.12.2017, 15:24. Показов 770. Ответов 0
Не могу понять часть работы кода, а именно когда идёт условие для отжатия кнопки.
Вызывая функцию SendMessage с кодом сообщения BM_GETCHECK мы проверяем состояние кнопки
Функция sendmessage тогда вернёт
0 - кнопка отжата
1 - кнопка зажата
2- только для переключателей и флажков
Но в условии ( если кнопка отжата) мы её отжимаем
C | 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
| LRESULT CALLBACK MainProcc( HWND hWnd, UINT messages, WPARAM wParam, LPARAM lParam )
{
static HWND hbutton_1, hbutton_2;
switch( messages )
{
case WM_CREATE:
{
CreateWindow( "button", "Работа с кнопками", WS_VISIBLE | WS_CHILD | BS_GROUPBOX, 10, 0, 500, 500, hWnd, (HMENU)0, hInst, NULL );
hbutton_1 = CreateWindow( "button", "Кнопка_1", WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON, 250, 250, 150, 30, hWnd, (HMENU)ID_BUTTON_1, hInst, NULL );
hbutton_2 = CreateWindow( "button", "Кнопка_2", WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON, 250, 300, 150, 30, hWnd, (HMENU)ID_BUTTON_2, hInst, NULL );
return 0;
}
case WM_COMMAND:
{
switch( LOWORD( wParam ) )
{
case ID_BUTTON_1:
{
MessageBox( hWnd, "Нажата 1 кнопка", "Сообщение от кнопки", MB_OK );
SendMessage( (HWND)lParam, BM_SETSTATE, TRUE, 0L ); // устанавливаем кнопку в зажатое состояние
if( !(WORD)SendMessage( hbutton_2, BM_GETCHECK, 0, 0L) ) // 0 - это же отжатое состояние, а не нажатое
SendMessage( hbutton_2, BM_SETSTATE, FALSE, 0L) ; // устанавливаем в отжатое
break;
}
case ID_BUTTON_2:
{
MessageBox( hWnd, "Нажата 2 кнопка", "Сообщение от кнопки", MB_OK );
SendMessage( (HWND)lParam, BM_SETSTATE, TRUE, 0L );
if( !(WORD)SendMessage( hbutton_1, BM_GETCHECK, 0, 0L) )
SendMessage( hbutton_1, BM_SETSTATE, FALSE, 0L) ; // переводим кнопку в отжатое состояние
break;
}
}
return 0;
}
case WM_DESTROY:
{
PostQuitMessage( 0 );
return 0;
}
default: return DefWindowProc( hWnd, messages, wParam, lParam );
}
} |
|
Добавлено через 1 минуту
Или речь идёт, когда левой клавишей мыши зажимаем?
Добавлено через 24 минуты
Поклоняюсь msdn
The return value from a button created with the BS_AUTOCHECKBOX, BS_AUTORADIOBUTTON, BS_AUTO3STATE, BS_CHECKBOX, BS_RADIOBUTTON, or BS_3STATE style can be one of the following.
If the button has a style other than those listed, the return value is zero.
Добавлено через 49 минут
Для флажка так работает
C | 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
| case WM_CREATE:
{
CreateWindow( "button", "Работа с кнопками", WS_VISIBLE | WS_CHILD | BS_GROUPBOX, 10, 0, 500, 500, hWnd, (HMENU)0, hInst, NULL );
hbutton_1 = CreateWindow( "button", "Кнопка_1", WS_VISIBLE | WS_CHILD | BS_AUTOCHECKBOX, 250, 250, 150, 30, hWnd, (HMENU)ID_BUTTON_1, hInst, NULL );
hbutton_2 = CreateWindow( "button", "Кнопка_2", WS_VISIBLE | WS_CHILD | BS_AUTOCHECKBOX, 250, 300, 150, 30, hWnd, (HMENU)ID_BUTTON_2, hInst, NULL );
return 0;
}
case WM_COMMAND:
{
switch( LOWORD( wParam ) )
{
case ID_BUTTON_1:
{
MessageBox( hWnd, "Нажата 1 кнопка", "Сообщение от кнопки", MB_OK );
SendMessage( (HWND)lParam, BM_SETSTATE, TRUE, 0L ); // устанавливаем кнопку в зажатое состояние
if( (WORD)SendMessage( hbutton_2, BM_GETCHECK, 0, 0L) ) // проверка состояния кнопки( если 2 кнопка отжата)
{
SendMessage( hbutton_2, BM_SETSTATE, FALSE, 0L) ;
SendMessage( hbutton_2, BM_SETCHECK, 0, 0L );
}
break;
}
case ID_BUTTON_2:
{
MessageBox( hWnd, "Нажата 2 кнопка", "Сообщение от кнопки", MB_OK );
SendMessage( (HWND)lParam, BM_SETSTATE, TRUE, 0L );
if( (WORD)SendMessage( hbutton_1, BM_GETCHECK, 0, 0L) )
{
SendMessage( hbutton_1, BM_SETSTATE, FALSE, 0L) ; // переводим кнопку в отжатое состояние
SendMessage( hbutton_1, BM_SETCHECK, 0, 0L );
}
break;
}
}
return 0;
} |
|
0
|