Здорова господа!
Сегодня поговорим о таких графических элементах управления как чекбокс и радиокнопки, мы щас просто их попытаемся разобрать на практике что это за элементы, зачем они применяются. Ну это как бы похожие элементы, чек боксы там можно галучки ставить и удалять, они как бы сами по себе. Радиокнопки они групируются, ну например если 3 элемента допустим сгрупированы, то там можно выбрать из трех элементов только один.
А да ребятки еще поговорим про рисование горизонтальных линий, ну давайте начнем с горизонтальных линий, как же они рисуются? А все очень просто, мы просто добавляем элемент static text и уменьшаем его размер в файле с расширением .rc например в нотпаде открываем и редактируем элементы. Добавляем для начала два элемента static text и в них рисуем букву i просто заполняем буквой i как на рисунке ниже.
А теперь открываем файл ресурсов с расширение .rc у меня он называется «test2.rc» у вас он может как то по другому называться и нужно найти следующие строки:
Ну у меня тут не поместилось, но в конце строк iiiiiiiiiiiiiiiiiii…. должно быть размер как ниже на рисунку
Изменяем 8 на 3 и все и у вас должна быть видна только верхняя точка
В общем так от рисуются линии.
Теперь ребятки переходим к чекбоксам кидаем на форму 3 графических элемента check box и групируем их с помощью элемента group box, то есть сначала кидаем групирующий элемент group box, а затем уже 3 check box. Всегда в общем привыкайте рисовать первым элемент group box.
Так ребятки сразу же кинем и элементы радиокнопок так же само, сперва кидаете group box, а затем елемент radio button
От такую форму вы должны нарисовать
В свойствах элемента group box вы должны поставить Группа в true ( по умолчанию стоить в false)
Ну и еще в самом файле ресурса test2.rc у меня у вас может быть другой должен быть следующий порядок:
GROUPBOX должен стоять в самом начале группируемых элементов, иначе они могут не сгруппироваться.
Создаем файл main.cpp
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 |
#include <Windows.h> #include <string> using std::string; #include "resource.h" //собственная процедура для обработки BOOL CALLBACK DlgProc(HWND, UINT, WPARAM, LPARAM); int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { int ret=DialogBox(hInstance,MAKEINTRESOURCE(IDD_DIALOG1), NULL,(DLGPROC)DlgProc); if (ret == 0) { //Если была нажата кнопка Отмена или крестик MessageBox(NULL,(LPCTSTR)"Отмена","Inform", MB_OK|MB_ICONINFORMATION); } else if (ret == 1) { //Если была нажата кнопка Ок MessageBox(NULL,(LPCTSTR)"Ок","Inform", MB_OK|MB_ICONINFORMATION); } return ret; } BOOL CALLBACK DlgProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { switch (msg) { case WM_INITDIALOG: { //устанавливает радиокнопку по умолчанию CheckDlgButton(hwnd,IDC_RADIO3,BST_CHECKED); //устанавливает флажок по умолчанию CheckDlgButton(hwnd,IDC_CHECK2,BST_CHECKED); return TRUE; } case WM_COMMAND: { switch (LOWORD(wParam)) { case IDOK: { string s=""; //радиокнопки если выставлены //группа 2 if(IsDlgButtonChecked(hwnd,IDC_RADIO1)) s+="IDC_RADIO1 - radio1\n"; if(IsDlgButtonChecked(hwnd,IDC_RADIO2)) s+="IDC_RADIO2 - radio2\n"; if(IsDlgButtonChecked(hwnd,IDC_RADIO3)) s+="IDC_RADIO3 - radio3\n"; //группа 3 if(IsDlgButtonChecked(hwnd,IDC_RADIO4)) s+="IDC_RADIO4 - Да\n"; if(IsDlgButtonChecked(hwnd,IDC_RADIO5)) s+="IDC_RADIO5 - Нет\n"; //флажки //группа 1 if(IsDlgButtonChecked(hwnd,IDC_CHECK1)) s+="IDC_CHECK1 - one\n"; if(IsDlgButtonChecked(hwnd,IDC_CHECK2)) s+="IDC_CHECK2 - two\n"; if(IsDlgButtonChecked(hwnd,IDC_CHECK3)) s+="IDC_CHECK3 - three\n"; //выводим саму s MessageBox(NULL,(LPCSTR)s.c_str(),"question - info", MB_OK|MB_ICONINFORMATION); EndDialog(hwnd,1); return TRUE; } case IDCANCEL: EndDialog(hwnd,0); return TRUE; } //тут обязательно иначе будет выход из программы. break; } case WM_CLOSE: { EndDialog(hwnd,0); return FALSE; } } return FALSE;//нужно что бы вызвать функцию для прорисовки окда //return TRUE;//не будет вызыватся функция протисовки окна } |
Компилируем программу получаем окошко:
Выбираем нужные флажки и радиокнопки и нажимаем кнопку Ок и мы получаем следующий ответ
Ну и все ребятки все у нас нормально работает, щас немножко поговорим о некоторых функциях, от например установить флажок по умолчанию нужно использовать функцию
1 2 3 4 5 6 7 8 |
case WM_INITDIALOG: { //устанавливает радиокнопку по умолчанию CheckDlgButton(hwnd,IDC_RADIO3,BST_CHECKED); //устанавливает флажок по умолчанию CheckDlgButton(hwnd,IDC_CHECK2,BST_CHECKED); return TRUE; } |
Что б проверить какой флажок у нас выбран используют следующие функции
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 |
case WM_COMMAND: { switch (LOWORD(wParam)) { case IDOK: { string s=""; //радиокнопки если выставлены //группа 2 if(IsDlgButtonChecked(hwnd,IDC_RADIO1)) s+="IDC_RADIO1 - radio1\n"; if(IsDlgButtonChecked(hwnd,IDC_RADIO2)) s+="IDC_RADIO2 - radio2\n"; if(IsDlgButtonChecked(hwnd,IDC_RADIO3)) s+="IDC_RADIO3 - radio3\n"; //группа 3 if(IsDlgButtonChecked(hwnd,IDC_RADIO4)) s+="IDC_RADIO4 - Да\n"; if(IsDlgButtonChecked(hwnd,IDC_RADIO5)) s+="IDC_RADIO5 - Нет\n"; //флажки //группа 1 if(IsDlgButtonChecked(hwnd,IDC_CHECK1)) s+="IDC_CHECK1 - one\n"; if(IsDlgButtonChecked(hwnd,IDC_CHECK2)) s+="IDC_CHECK2 - two\n"; if(IsDlgButtonChecked(hwnd,IDC_CHECK3)) s+="IDC_CHECK3 - three\n"; //выводим саму s MessageBox(NULL,(LPCSTR)s.c_str(),"question - info", MB_OK|MB_ICONINFORMATION); EndDialog(hwnd,1); return TRUE; } case IDCANCEL: EndDialog(hwnd,0); return TRUE; } //тут обязательно иначе будет выход из программы. break; } |
Ну и все пожалуй, это основные моменты, та даже наверно не основные, ну хоть что то уже более ясно становиться, как этими кнопками пользоваться.
[youtube]https://www.youtube.com/watch?v=LioubIiwW1s[/youtube]