Чекбоксы и радиокнопки в visual studio 2013

Рубрика: Visual Studio, Дата: 19 March, 2014, Автор:

Здорова господа!

Сегодня поговорим о таких графических элементах управления как чекбокс и радиокнопки, мы щас просто их попытаемся разобрать на практике что это за элементы, зачем они применяются. Ну это как бы похожие элементы, чек боксы там можно галучки ставить и удалять, они как бы сами по себе. Радиокнопки они групируются, ну например если 3 элемента допустим сгрупированы, то там можно выбрать из трех элементов только один.

А да ребятки еще поговорим про рисование горизонтальных линий, ну давайте начнем с горизонтальных линий, как же они рисуются? А все очень просто, мы просто добавляем элемент static text и уменьшаем его размер в файле с расширением .rc  например в нотпаде открываем и редактируем элементы. Добавляем для начала два элемента static text и в них рисуем букву i просто заполняем буквой i  как на рисунке ниже.ScreenShot 9

А теперь открываем файл ресурсов с расширение .rc у меня он называется “test2.rc” у вас он может как то по другому называться и нужно найти следующие строки:

ScreenShot 43

Ну у меня тут не поместилось, но в конце строк iiiiiiiiiiiiiiiiiii…. должно быть размер как ниже на рисунку

ScreenShot 44

Изменяем 8 на 3 и все и у вас должна быть видна только верхняя точка

ScreenShot 45

В общем так от рисуются линии.

 

Теперь ребятки переходим к чекбоксам кидаем на форму 3 графических элемента check box и групируем их с помощью элемента group box, то есть сначала кидаем групирующий элемент group box, а затем уже 3 check box. Всегда в общем привыкайте рисовать первым элемент group box.

Так ребятки сразу же кинем и элементы радиокнопок так же само, сперва кидаете group box, а затем елемент radio button

От такую форму вы должны нарисовать

ScreenShot 46

В свойствах элемента group box вы должны поставить Группа в true ( по умолчанию стоить в false)

Ну и еще в самом файле ресурса test2.rc у меня у вас может быть другой должен быть следующий порядок:ScreenShot 47

GROUPBOX должен стоять в самом начале группируемых элементов, иначе они могут не сгруппироваться.

Создаем файл main.cpp

main.cpp »

#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 - radio1n";
					if(IsDlgButtonChecked(hwnd,IDC_RADIO2))
						s+="IDC_RADIO2 - radio2n";
					if(IsDlgButtonChecked(hwnd,IDC_RADIO3))
						s+="IDC_RADIO3 - radio3n";
					//группа 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 - onen";
					if(IsDlgButtonChecked(hwnd,IDC_CHECK2))
						s+="IDC_CHECK2 - twon";
					if(IsDlgButtonChecked(hwnd,IDC_CHECK3))
						s+="IDC_CHECK3 - threen";

					//выводим саму 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;//не будет вызыватся функция протисовки окна
}

Компилируем программу получаем окошко:ScreenShot 48

Выбираем нужные флажки и радиокнопки и нажимаем кнопку Ок и мы получаем следующий ответ

ScreenShot 49

 

Ну и все ребятки все у нас нормально работает, щас немножко поговорим о некоторых функциях, от например установить флажок по умолчанию нужно использовать функцию

код »

 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 - radio1n";
					if(IsDlgButtonChecked(hwnd,IDC_RADIO2))
						s+="IDC_RADIO2 - radio2n";
					if(IsDlgButtonChecked(hwnd,IDC_RADIO3))
						s+="IDC_RADIO3 - radio3n";
					//группа 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 - onen";
					if(IsDlgButtonChecked(hwnd,IDC_CHECK2))
						s+="IDC_CHECK2 - twon";
					if(IsDlgButtonChecked(hwnd,IDC_CHECK3))
						s+="IDC_CHECK3 - threen";

					//выводим саму 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]

rss