Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
156 changes: 156 additions & 0 deletions hw5_23.08.17/task1/main1.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,156 @@
/* Создайте приложение, которое будет проверять : (1) являются ли анаграммами
две строки, введенные пользователем; (2) является ли палиндромом единственная
строка, введенная пользователем.Два слова называются анаграммами, если они
состоят из одинаковых символов(например, апельсин и спаниель или тавро и отвар).
Слово называется палиндромом, если оно читается слева направо и справа налево
одинаково(например, поток или заказ).
Окно должно содержать следующие элементы управления, созданные
программно :
Статики(класс Static) для надписей и для вывода результата.
Два текстовых поля типа Edit для ввода строк.
Два переключателя для выбора условия, на соответствие которому
проверяются строки(или строка).Когда выбран переключатель
«Анаграмма», оба текстовых поля должны быть доступны для ввода, а
когда выбран переключатель «Палиндром» – только первое текстовое
поле.
Две кнопки.По нажатию на первую кнопку в статик посылается
результат проверки.По нажатию на вторую кнопку текстовые поля и
статик с результатом очищаются. */


#include <Windows.h>
#include <locale.h>

#include "resource.h"

BOOL CALLBACK DlgProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
static HWND hEditWord1, hEditWord2, hStaticResult;
static HWND hRadioAnagram, hRadioPalindrom;

switch (uMsg)
{
case WM_INITDIALOG:
hEditWord1 = GetDlgItem(hWnd, IDC_EDITFIRSTWORD);
hEditWord2 = GetDlgItem(hWnd, IDC_EDITSECONDWORD);
hRadioAnagram = GetDlgItem(hWnd, IDC_RADIOANAGRAM);
hRadioPalindrom = GetDlgItem(hWnd, IDC_RADIOPALINDROM);
hStaticResult = GetDlgItem(hWnd, IDC_STATICRESULT);

SendMessage(hRadioAnagram, BM_SETCHECK, BST_CHECKED, 0);
return true;
case WM_COMMAND:
switch (LOWORD(wParam))
{
case IDC_BUTTONCHECK:
{
wchar_t word1buff[100];
int len1 = SendMessage(hEditWord1, WM_GETTEXTLENGTH, 0, 0) + 1;
GetWindowText(hEditWord1, word1buff, len1);

for (int i = 0; i < len1; i++)
{
if (word1buff[i] >= 'A' && word1buff[i] <= 'Z')
word1buff[i] += 'z' - 'Z';
else if (word1buff[i] >= 1040 && word1buff[i] <= 1071) // русские а и я в юникоде
word1buff[i] += 32;
}

if (SendMessage(hRadioAnagram, BM_GETCHECK, 0, 0) == BST_CHECKED)
{
wchar_t word2buff[100];
int len2 = SendMessage(hEditWord2, WM_GETTEXTLENGTH, 0, 0) + 1;
GetWindowText(hEditWord2, word2buff, len2);

for (int i = 0; i < len1; i++)
{
if (word2buff[i] >= 'A' && word2buff[i] <= 'Z')
word2buff[i] += 'z' - 'Z';
else if (word2buff[i] >= 1040 && word2buff[i] <= 1071)
word2buff[i] += 32;
}

if (len1 == len2)
{
for (int i = 1; i < len1 - 1; i++)
{
for (int j = i; j > 0 && word1buff[j - 1] > word1buff[j]; j--)
{
wchar_t buff = word1buff[j - 1];
word1buff[j - 1] = word1buff[j];
word1buff[j] = buff;
}
for (int j = i; j > 0 && word2buff[j - 1] > word2buff[j]; j--)
{
wchar_t buff = word2buff[j - 1];
word2buff[j - 1] = word2buff[j];
word2buff[j] = buff;
}
}
if (wcscmp(word1buff, word2buff) == 0)
SetWindowText(hStaticResult, L"Анаграммы");
else
SetWindowText(hStaticResult, L"Не анаграммы");
}
else
{
SetWindowText(hStaticResult, L"Не анаграммы");
}
}
else
{
SetWindowText(hStaticResult, L"Палиндром");
for (int i = 0; i < len1 / 2; i++)
{
if (word1buff[i] != word1buff[len1 - 2 - i])
{
SetWindowText(hStaticResult, L"Не палиндром");
break;
}
}
}
break;
}
case IDC_BUTTONCLEAR:
SetWindowText(hEditWord1, L"");
SetWindowText(hEditWord2, L"");
SetWindowText(hStaticResult, L"");
break;
case IDC_RADIOANAGRAM:
SendMessage(hEditWord2, EM_SETREADONLY, false, 0);
break;
case IDC_RADIOPALINDROM:
SendMessage(hEditWord2, EM_SETREADONLY, true, 0);
break;
default:
break;
}
return true;
case WM_CLOSE:
if (MessageBox(hWnd, L"Вы действительно хотите выйти?", L"Info", MB_YESNO) == IDYES)
{
DestroyWindow(hWnd);
PostQuitMessage(0);
return true;
}
default:
return false;
}
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR, int)
{
setlocale(LC_ALL, "Russian");
HWND hWnd = CreateDialog(hInstance, MAKEINTRESOURCE(IDD_DIALOG), NULL, DlgProc);
ShowWindow(hWnd, SW_NORMAL);
UpdateWindow(hWnd);

MSG msg;
while (GetMessage(&msg, 0, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}

return msg.wParam;
}
26 changes: 26 additions & 0 deletions hw5_23.08.17/task1/resource.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
//{{NO_DEPENDENCIES}}
// Microsoft Visual C++ generated include file.
// Used by task1.rc
//
#define IDD_DIALOG 101
#define IDC_STATICWORD1 1001
#define IDC_STATICWORD2 1002
#define IDC_RADIOANAGRAM 1003
#define IDC_RADIOPALINDROM 1004
#define IDC_BUTTONCHECK 1005
#define IDC_BUTTONCLEAR 1006
#define IDC_EDITFIRSTWORD 1007
#define IDC_STATICRESULT 1008
#define IDC_EDIT2 1009
#define IDC_EDITSECONDWORD 1009

// Next default values for new objects
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 103
#define _APS_NEXT_COMMAND_VALUE 40001
#define _APS_NEXT_CONTROL_VALUE 1009
#define _APS_NEXT_SYMED_VALUE 101
#endif
#endif
Binary file added hw5_23.08.17/task1/task1.rc
Binary file not shown.
Binary file added hw5_23.08.17/task2/Img/cat1.bmp
Binary file not shown.
Binary file added hw5_23.08.17/task2/Img/cat2.bmp
Binary file not shown.
Binary file added hw5_23.08.17/task2/Img/cat3.bmp
Binary file not shown.
Binary file added hw5_23.08.17/task2/Img/cat4.bmp
Binary file not shown.
Binary file added hw5_23.08.17/task2/Img/cat5.bmp
Binary file not shown.
Binary file added hw5_23.08.17/task2/Img/dog1.bmp
Binary file not shown.
Binary file added hw5_23.08.17/task2/Img/dog2.bmp
Binary file not shown.
Binary file added hw5_23.08.17/task2/Img/dog3.bmp
Binary file not shown.
Binary file added hw5_23.08.17/task2/Img/dog4.bmp
Binary file not shown.
Binary file added hw5_23.08.17/task2/Img/dog5.bmp
Binary file not shown.
148 changes: 148 additions & 0 deletions hw5_23.08.17/task2/main2.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,148 @@
/* Создайте программу для просмотра картинок на основе модального или
немодального диалогового окна.
На форме должно быть два флажка, два переключателя и две обычные кнопки :
С помощью флажков пользователь выбирает, какие изображения
демонстрируются(можно использовать изображения из папки Img).
Обратите внимание, что одновременно могут быть установлены оба
флажка.
С помощью переключателей задается скорость, с которой сменяются
изображения.
По нажатию на кнопку «Старт» начинается показ картинок, по нажатию
на кнопку «Стоп» демонстрация останавливается.
Дополнительно можно запретить максимизацию окна. */



#include <Windows.h>
#include <vector>
#include <algorithm>

#include "resource.h"

#define ID_TIMER 100

BOOL CALLBACK DlgProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
static HWND hCheckCats, hCheckDogs;
static HWND hRadioFast, hRadioSlow;
static HWND hButtonStart;
static HWND hPicture;

BITMAP bm;
PAINTSTRUCT ps;
HDC hdc, hdcMem;
HGDIOBJ oldBitmap;

static std::vector<HBITMAP> cats;
static std::vector<HBITMAP> dogs;
static std::vector<HBITMAP> pets;

static int count = 0;

switch (uMsg)
{
case WM_INITDIALOG:

hCheckCats = GetDlgItem(hWnd, IDC_CHECKCATS);
hCheckDogs = GetDlgItem(hWnd, IDC_CHECKDOGS);
hRadioFast = GetDlgItem(hWnd, IDC_RADIOFAST);
hRadioSlow = GetDlgItem(hWnd, IDC_RADIOSLOW);
hButtonStart = GetDlgItem(hWnd, IDC_BUTTONSTART);
hPicture = GetDlgItem(hWnd, IDC_PICTURE);

SendMessage(hRadioSlow, BM_SETCHECK, BST_CHECKED, 0);
SendMessage(hCheckCats, BM_SETCHECK, BST_CHECKED, 0);

cats.push_back(LoadBitmap(GetModuleHandle(NULL), MAKEINTRESOURCE(IDB_BITMAP1)));
cats.push_back(LoadBitmap(GetModuleHandle(NULL), MAKEINTRESOURCE(IDB_BITMAP2)));
cats.push_back(LoadBitmap(GetModuleHandle(NULL), MAKEINTRESOURCE(IDB_BITMAP3)));
cats.push_back(LoadBitmap(GetModuleHandle(NULL), MAKEINTRESOURCE(IDB_BITMAP4)));
cats.push_back(LoadBitmap(GetModuleHandle(NULL), MAKEINTRESOURCE(IDB_BITMAP5)));
dogs.push_back(LoadBitmap(GetModuleHandle(NULL), MAKEINTRESOURCE(IDB_BITMAP6)));
dogs.push_back(LoadBitmap(GetModuleHandle(NULL), MAKEINTRESOURCE(IDB_BITMAP7)));
dogs.push_back(LoadBitmap(GetModuleHandle(NULL), MAKEINTRESOURCE(IDB_BITMAP8)));
dogs.push_back(LoadBitmap(GetModuleHandle(NULL), MAKEINTRESOURCE(IDB_BITMAP9)));
dogs.push_back(LoadBitmap(GetModuleHandle(NULL), MAKEINTRESOURCE(IDB_BITMAP10)));

pets = cats;

return true;
case WM_PAINT:
hdc = BeginPaint(hPicture, &ps);

hdcMem = CreateCompatibleDC(hdc);
oldBitmap = SelectObject(hdcMem, pets[count]);
GetObject(pets[count], sizeof(bm), (LPSTR)&bm);
BitBlt(hdc, 0, 0, bm.bmWidth, bm.bmHeight, hdcMem, 0, 0, SRCCOPY);
SelectObject(hdcMem, oldBitmap);
DeleteDC(hdcMem);

EndPaint(hPicture, &ps);
return false;
case WM_COMMAND:
switch (LOWORD(wParam))
{
case IDC_BUTTONSTART:
if (SendMessage(hCheckCats, BM_GETCHECK, 0, 0) && SendMessage(hCheckDogs, BM_GETCHECK, 0, 0))
{
pets = cats;
for (size_t i = 0; i < dogs.size(); i++)
{
pets.push_back(dogs[i]);
}
std::random_shuffle(pets.begin(), pets.end());
}
else if (SendMessage(hCheckCats, BM_GETCHECK, 0, 0))
pets = cats;
else if (SendMessage(hCheckDogs, BM_GETCHECK, 0, 0))
pets = dogs;

if (SendMessage(hRadioFast, BM_GETCHECK, 0, 0))
SetTimer(hWnd, ID_TIMER, 1000, 0);
else
SetTimer(hWnd, ID_TIMER, 3000, 0);
break;
case IDC_BUTTONSTOP:
KillTimer(hWnd, ID_TIMER);
break;
case IDC_CHECKCATS:
case IDC_CHECKDOGS:
if (SendMessage(hCheckCats, BM_GETCHECK, 0, 0) || SendMessage(hCheckDogs, BM_GETCHECK, 0, 0))
EnableWindow(hButtonStart, true);
else
EnableWindow(hButtonStart, false);

}
return true;
case WM_TIMER:
count++;
if (count >= pets.size())
count = 0;
InvalidateRect(NULL, NULL, true);
return true;
case WM_CLOSE:
if (MessageBox(hWnd, L"Вы действительно хотите выйти?", L"Info", MB_YESNO) == IDYES)
{
DestroyWindow(hWnd);
PostQuitMessage(0);
}
return true;
}
return 0;
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR, int)
{
HWND hWnd = CreateDialog(hInstance, MAKEINTRESOURCE(IDD_DIALOG), NULL, DlgProc);
ShowWindow(hWnd, SW_NORMAL);
UpdateWindow(hWnd);

MSG msg;
while (GetMessage(&msg, 0, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}

return msg.wParam;
}
33 changes: 33 additions & 0 deletions hw5_23.08.17/task2/resource.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
//{{NO_DEPENDENCIES}}
// Microsoft Visual C++ generated include file.
// Used by task2.rc
//
#define IDD_DIALOG 101
#define IDB_BITMAP1 103
#define IDB_BITMAP2 104
#define IDB_BITMAP3 105
#define IDB_BITMAP4 106
#define IDB_BITMAP5 107
#define IDB_BITMAP6 108
#define IDB_BITMAP7 109
#define IDB_BITMAP8 110
#define IDB_BITMAP9 111
#define IDB_BITMAP10 112
#define IDC_CHECKCATS 1001
#define IDC_CHECKDOGS 1002
#define IDC_BUTTONSTOP 1003
#define IDC_BUTTONSTART 1004
#define IDC_RADIOFAST 1005
#define IDC_RADIOSLOW 1006
#define IDC_PICTURE 1007

// Next default values for new objects
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 113
#define _APS_NEXT_COMMAND_VALUE 40001
#define _APS_NEXT_CONTROL_VALUE 1008
#define _APS_NEXT_SYMED_VALUE 101
#endif
#endif
Binary file added hw5_23.08.17/task2/task2.rc
Binary file not shown.