Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
1
Добавлен:
27.01.2024
Размер:
54.85 Кб
Скачать

18

РОБОТА ЗІ СПИСКАМИ ПІД ЧАС ПРОГРАМУВАННЯ НА C++

СТАНДАРТУ ISO/ANSI

// combo1Dlg.cpp: файл реализации

//

#include "pch.h"

#include "framework.h"

#include "combo1.h"

#include "combo1Dlg.h"

#include "afxdialogex.h"

#ifdef _DEBUG

#define new DEBUG_NEW

#endif

// Диалоговое окно CAboutDlg используется для описания сведений о приложении

class CAboutDlg : public CDialogEx

{

public:

CAboutDlg();

// Данные диалогового окна

#ifdef AFX_DESIGN_TIME

enum { IDD = IDD_ABOUTBOX };

#endif

protected:

virtual void DoDataExchange(CDataExchange* pDX); // поддержка DDX/DDV

// Реализация

protected:

DECLARE_MESSAGE_MAP()

};

CAboutDlg::CAboutDlg() : CDialogEx(IDD_ABOUTBOX)

{

}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)

{

CDialogEx::DoDataExchange(pDX);

}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx)

END_MESSAGE_MAP()

// Диалоговое окно Ccombo1Dlg

Ccombo1Dlg::Ccombo1Dlg(CWnd* pParent /*=nullptr*/)

: CDialogEx(IDD_COMBO1_DIALOG, pParent)

{

m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);

}

void Ccombo1Dlg::DoDataExchange(CDataExchange* pDX)

{

CDialogEx::DoDataExchange(pDX);

DDX_Control(pDX, IDC_COMBO1, m_combo1);

DDX_Control(pDX, IDC_EDIT1, m_edit1);

}

BEGIN_MESSAGE_MAP(Ccombo1Dlg, CDialogEx)

ON_WM_SYSCOMMAND()

ON_WM_PAINT()

ON_WM_QUERYDRAGICON()

ON_CBN_SELCHANGE(IDC_COMBO1, &Ccombo1Dlg::OnCbnSelchangeCombo1)

END_MESSAGE_MAP()

// Обработчики сообщений Ccombo1Dlg

BOOL Ccombo1Dlg::OnInitDialog()

{

CDialogEx::OnInitDialog();

// Добавление пункта "О программе..." в системное меню.

// IDM_ABOUTBOX должен быть в пределах системной команды.

ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);

ASSERT(IDM_ABOUTBOX < 0xF000);

CMenu* pSysMenu = GetSystemMenu(FALSE);

if (pSysMenu != nullptr)

{

BOOL bNameValid;

CString strAboutMenu;

bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);

ASSERT(bNameValid);

if (!strAboutMenu.IsEmpty())

{

pSysMenu->AppendMenu(MF_SEPARATOR);

pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);

}

}

// Задает значок для этого диалогового окна. Среда делает это автоматически,

// если главное окно приложения не является диалоговым

SetIcon(m_hIcon, TRUE); // Крупный значок

SetIcon(m_hIcon, FALSE); // Мелкий значок

m_combo1.AddString("Студент 01");

m_combo1.AddString("Студент 02");

m_combo1.AddString("Студент 03");

m_combo1.AddString("Студент 04");

m_combo1.AddString("Студент 05");

m_combo1.AddString("Студент 06");

m_combo1.AddString("Студент 07");

m_combo1.AddString("Студент 08");

m_combo1.AddString("Студент 09");

m_combo1.AddString("Студент 10");

m_combo1.AddString("Студент 11");

m_combo1.AddString("Студент 12");

m_combo1.SetCurSel(0);

// TODO: добавьте дополнительную инициализацию

return TRUE; // возврат значения TRUE, если фокус не передан элементу управления

}

void Ccombo1Dlg::OnSysCommand(UINT nID, LPARAM lParam)

{

if ((nID & 0xFFF0) == IDM_ABOUTBOX)

{

CAboutDlg dlgAbout;

dlgAbout.DoModal();

}

else

{

CDialogEx::OnSysCommand(nID, lParam);

}

}

// При добавлении кнопки свертывания в диалоговое окно нужно воспользоваться приведенным ниже кодом,

// чтобы нарисовать значок. Для приложений MFC, использующих модель документов или представлений,

// это автоматически выполняется рабочей областью.

void Ccombo1Dlg::OnPaint()

{

if (IsIconic())

{

CPaintDC dc(this); // контекст устройства для рисования

SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);

// Выравнивание значка по центру клиентского прямоугольника

int cxIcon = GetSystemMetrics(SM_CXICON);

int cyIcon = GetSystemMetrics(SM_CYICON);

CRect rect;

GetClientRect(&rect);

int x = (rect.Width() - cxIcon + 1) / 2;

int y = (rect.Height() - cyIcon + 1) / 2;

// Нарисуйте значок

dc.DrawIcon(x, y, m_hIcon);

}

else

{

CDialogEx::OnPaint();

}

}

// Система вызывает эту функцию для получения отображения курсора при перемещении

// свернутого окна.

HCURSOR Ccombo1Dlg::OnQueryDragIcon()

{

return static_cast<HCURSOR>(m_hIcon);

}

void Ccombo1Dlg::OnCbnSelchangeCombo1()

{

CString str;

m_combo1.GetLBText(m_combo1.GetCurSel(), str);

m_edit1.SetWindowTextA(str);

UpdateData(false);

// TODO: добавьте свой код

}

// slider3Dlg.cpp: файл реализации

//

#include "pch.h"

#include "framework.h"

#include "slider3.h"

#include "slider3Dlg.h"

#include "afxdialogex.h"

#ifdef _DEBUG

#define new DEBUG_NEW

#endif

// Диалоговое окно CAboutDlg используется для описания сведений о приложении

class CAboutDlg : public CDialogEx

{

public:

CAboutDlg();

// Данные диалогового окна

#ifdef AFX_DESIGN_TIME

enum { IDD = IDD_ABOUTBOX };

#endif

protected:

virtual void DoDataExchange(CDataExchange* pDX); // поддержка DDX/DDV

// Реализация

protected:

DECLARE_MESSAGE_MAP()

};

CAboutDlg::CAboutDlg() : CDialogEx(IDD_ABOUTBOX)

{

}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)

{

CDialogEx::DoDataExchange(pDX);

}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx)

END_MESSAGE_MAP()

// Диалоговое окно Cslider3Dlg

Cslider3Dlg::Cslider3Dlg(CWnd* pParent /*=nullptr*/)

: CDialogEx(IDD_SLIDER3_DIALOG, pParent)

, m_text1(_T(""))

{

m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);

}

void Cslider3Dlg::DoDataExchange(CDataExchange* pDX)

{

CDialogEx::DoDataExchange(pDX);

DDX_Text(pDX, IDC_EDIT1, m_text1);

DDX_Control(pDX, IDC_SLIDER1, m_slider1);

}

BEGIN_MESSAGE_MAP(Cslider3Dlg, CDialogEx)

ON_WM_SYSCOMMAND()

ON_WM_PAINT()

ON_WM_QUERYDRAGICON()

ON_WM_HSCROLL()

END_MESSAGE_MAP()

// Обработчики сообщений Cslider3Dlg

BOOL Cslider3Dlg::OnInitDialog()

{

CDialogEx::OnInitDialog();

// Добавление пункта "О программе..." в системное меню.

// IDM_ABOUTBOX должен быть в пределах системной команды.

ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);

ASSERT(IDM_ABOUTBOX < 0xF000);

CMenu* pSysMenu = GetSystemMenu(FALSE);

if (pSysMenu != nullptr)

{

BOOL bNameValid;

CString strAboutMenu;

bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);

ASSERT(bNameValid);

if (!strAboutMenu.IsEmpty())

{

pSysMenu->AppendMenu(MF_SEPARATOR);

pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);

}

}

// Задает значок для этого диалогового окна. Среда делает это автоматически,

// если главное окно приложения не является диалоговым

SetIcon(m_hIcon, TRUE); // Крупный значок

SetIcon(m_hIcon, FALSE); // Мелкий значок

// TODO: добавьте дополнительную инициализацию

return TRUE; // возврат значения TRUE, если фокус не передан элементу управления

}

void Cslider3Dlg::OnSysCommand(UINT nID, LPARAM lParam)

{

if ((nID & 0xFFF0) == IDM_ABOUTBOX)

{

CAboutDlg dlgAbout;

dlgAbout.DoModal();

}

else

{

CDialogEx::OnSysCommand(nID, lParam);

}

}

// При добавлении кнопки свертывания в диалоговое окно нужно воспользоваться приведенным ниже кодом,

// чтобы нарисовать значок. Для приложений MFC, использующих модель документов или представлений,

// это автоматически выполняется рабочей областью.

void Cslider3Dlg::OnPaint()

{

if (IsIconic())

{

CPaintDC dc(this); // контекст устройства для рисования

SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);

// Выравнивание значка по центру клиентского прямоугольника

int cxIcon = GetSystemMetrics(SM_CXICON);

int cyIcon = GetSystemMetrics(SM_CYICON);

CRect rect;

GetClientRect(&rect);

int x = (rect.Width() - cxIcon + 1) / 2;

int y = (rect.Height() - cyIcon + 1) / 2;

// Нарисуйте значок

dc.DrawIcon(x, y, m_hIcon);

}

else

{

CDialogEx::OnPaint();

}

}

// Система вызывает эту функцию для получения отображения курсора при перемещении

// свернутого окна.

HCURSOR Cslider3Dlg::OnQueryDragIcon()

{

return static_cast<HCURSOR>(m_hIcon);

}

void Cslider3Dlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)

{

if (nSBCode == SB_THUMBPOSITION)

{

m_text1.Format("%ld", nPos);

UpdateData(false);

// TODO: Добавьте свой код программы

// обработки сообщения здесь;

}

else

// TODO: добавьте свой код обработчика сообщений или вызов стандартного

CDialogEx::OnHScroll(nSBCode, nPos, pScrollBar);

}

Контрольні питаня:

  1. Повзунок – керуючий елемент, який, як правило, застосовується для введення числових величин, наприклад, інтенсивності кольору (від 0 до 255).

Це об'єкт класу CSlider.

  1. У Свойства –> ориентация ползунка

  2. Ініціалізувати бігунок. Ініціалізація виконується в методі OnInitDialog(), але

тепер уже класу Cslider1Dlg. Необхідно задати інтервал значень положення

бігунка (1 – 100). Для цього використовуються методи SetRangeMin() і

SetRangeMax() класу CSlider. У кожному з них по два параметри. Перший задає

числове значення межі знизу або зверху, а другий набуває значень true

(потрібно перерисовувати бігунок після зміни інтервалу) або false

(відмовляємося від перерисовування).

  1. Щоб вивести в текстовому полі вихідне

положення бігунка (позиція 1), використовується метод для виведення в

текстове вікно SetWindowTextA(). Нижче наведена частина методу

OnInitDialog(), де відображена ініціалізація бігунка.

BOOL Cslider1Dlg::OnInitDialog()

{

CDialog::OnInitDialog();

m_slider1.SetRangeMin(1,false);

m_slider1.SetRangeMax(100,false);

m_edit1.SetWindowTextA("1");

// Add "About..." menu item to system menu.

return TRUE;

//return TRUE unless you set the focus to a

//control

}

Висновок: на лабораторній роботі я навчився користуватися ListBox, Slider, Combo Box

Соседние файлы в папке еще какието лабки разных вариантов