Главная Случайная страница


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 4. Как сделать так, чтобы вас уважали и ценили? Как сделать лучше себе и другим людям Как сделать свидание интересным?


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






Приложение 1. // kursovik.cpp: определяет точку входа для приложения





// kursovik.cpp: определяет точку входа для приложения.

//

 

#include <windows.h>

#include <stdlib.h>

#include <malloc.h>

#include <memory.h>

#include <tchar.h>

 

#define MAX_LOADSTRING 100

 

HWND fact, hButton1, hButton2, hButton3, hButton4, hButton5, hButton6, Edit1, Edit2, Edit3;

int aTemp, bTemp, sumTemp, multTemp;

 

// Глобальные переменные:

HINSTANCE hInst; // текущий экземпляр

TCHAR szTitle[MAX_LOADSTRING]; // Текст строки заголовка

TCHAR szWindowClass[MAX_LOADSTRING]; // имя класса главного окна

 

// Отправить объявления функций, включенных в этот модуль кода:

ATOM MyRegisterClass(HINSTANCE hInstance);

BOOL InitInstance(HINSTANCE, int);

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

INT_PTR CALLBACK About(HWND, UINT, WPARAM, LPARAM);

INT_PTR CALLBACK View(HWND, UINT, WPARAM, LPARAM);

 

 

LONG_PTR Factorial (LONG_PTR x){

if(x < 0) // если пользователь ввел отрицательное число

return 0; // возвращаем ноль

if (x == 0) // если пользователь ввел ноль,

return 1; // возвращаем факториал от нуля - не удивляетесь, но это 1 =)

else // Во всех остальных случаях

return x * Factorial (x - 1); // делаем рекурсию.

}

 

int APIENTRY WinMain(HINSTANCE hInstance,

HINSTANCE hPrevInstance,

LPTSTR lpCmdLine,

int nCmdShow)

{

UNREFERENCED_PARAMETER(hPrevInstance);

UNREFERENCED_PARAMETER(lpCmdLine);

 

// TODO: разместите код здесь.

MSG msg;

HACCEL hAccelTable;

 

// Инициализация глобальных строк

LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);

LoadString(hInstance, IDC_KURSOVIK, szWindowClass, MAX_LOADSTRING);

MyRegisterClass(hInstance);

 

// Выполнить инициализацию приложения:

if (!InitInstance (hInstance, nCmdShow))

{

return FALSE;

}

 

hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_KURSOVIK));

 

// Цикл основного сообщения:

while (GetMessage(&msg, NULL, 0, 0))

{

if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))

{

TranslateMessage(&msg);

DispatchMessage(&msg);

}

}

 

return (int) msg.wParam;

}

//

// ФУНКЦИЯ: MyRegisterClass()

//

// НАЗНАЧЕНИЕ: регистрирует класс окна.

//

ATOM MyRegisterClass(HINSTANCE hInstance)

{

WNDCLASSEX wcex;

 

wcex.cbSize = sizeof(WNDCLASSEX);

 

wcex.style = CS_HREDRAW | CS_VREDRAW;

wcex.lpfnWndProc = WndProc;

wcex.cbClsExtra = 0;

wcex.cbWndExtra = 0;

wcex.hInstance = hInstance;

wcex.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_KURSOVIK));

wcex.hCursor = LoadCursor(NULL, IDC_ARROW);

wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);

wcex.lpszMenuName = MAKEINTRESOURCE(IDC_KURSOVIK);

wcex.lpszClassName = szWindowClass;

wcex.hIconSm = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));

 

return RegisterClassEx(&wcex);

}

//

// ФУНКЦИЯ: InitInstance(HINSTANCE, int)

//

// НАЗНАЧЕНИЕ: сохраняет обработку экземпляра и создает главное окно.

//

BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)

{

HWND hWnd;

 

hInst = hInstance; // Сохранить дескриптор экземпляра в глобальной переменной

 

hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,

CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, 400, NULL, NULL, hInstance, NULL);

 

if (!hWnd)

{

return FALSE;

}

 

ShowWindow(hWnd, nCmdShow);

UpdateWindow(hWnd);

 

return TRUE;

}

//

// ФУНКЦИЯ: WndProc(HWND, UINT, WPARAM, LPARAM)

//

// НАЗНАЧЕНИЕ: обрабатывает сообщения в главном окне.

//

// WM_COMMAND - обработка меню приложения

// WM_PAINT - Закрасить главное окно

// WM_DESTROY - ввести сообщение о выходе и вернуться.

//

//

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)

{

int wmId, wmEvent;

PAINTSTRUCT ps;

HDC hdc;

 

static int sx, sy;

 

//LPCTSTR szMsg = "I'm aplication, compilled with Win64 API";

LPCTSTR szMsg = "Я - приложение, скомпилированное с помощью интерфейса и средств компиляции Win64";

RECT rc;

SIZE sz;

 

LONG_PTR factorialTemp = 0;

char temp[16] = {0};

 

switch (message)

{

case WM_CREATE:

 

//Вызов диалогового окна "О программе"

hButton1 = CreateWindow("BUTTON", "О программе", WS_CHILD | WS_VISIBLE | BS_DEFPUSHBUTTON | BS_TEXT,


10, 10, 120, 20, hWnd, (HMENU)BTN1, NULL, NULL);

 

//Факториал сообщения введенного в Edit box

 

fact = CreateWindow("BUTTON", "Факториал", WS_CHILD | WS_VISIBLE | BS_DEFPUSHBUTTON | BS_TEXT,

270, 40, 120, 20, hWnd, (HMENU)factorial, NULL, NULL);

 

//Эхо сообщения введенного в Edit box

hButton2 = CreateWindow("BUTTON", "Эхо", WS_CHILD | WS_VISIBLE | BS_DEFPUSHBUTTON | BS_TEXT,

140, 40, 120, 20, hWnd, (HMENU)BTN2, NULL, NULL);

 

Edit1 = CreateWindowEx(WS_EX_CLIENTEDGE, "Edit", "", WS_CHILD | WS_VISIBLE | BS_DEFPUSHBUTTON | BS_TEXT,

10, 40, 120, 20, hWnd, 0, hInst, NULL);

 

//Ввод числа А

 

hButton3 = CreateWindow("BUTTON", "InPut A", WS_CHILD | WS_VISIBLE | BS_DEFPUSHBUTTON | BS_TEXT, 10, 70, 120, 20, hWnd, (HMENU)BTN3, NULL, NULL);

 

Edit2 = CreateWindowEx(WS_EX_CLIENTEDGE, "Edit", "", WS_CHILD | WS_VISIBLE | BS_DEFPUSHBUTTON | BS_TEXT, 140, 70, 120, 20, hWnd, 0, hInst, NULL);

 

//Ввод числа В

 

hButton4 = CreateWindow("BUTTON", "InPut B", WS_CHILD | WS_VISIBLE | BS_DEFPUSHBUTTON | BS_TEXT, 10, 100, 120, 20, hWnd, (HMENU)BTN4, NULL, NULL);

 

Edit3 = CreateWindowEx(WS_EX_CLIENTEDGE, "Edit", "", WS_CHILD | WS_VISIBLE | BS_DEFPUSHBUTTON | BS_TEXT, 140, 100, 120, 20, hWnd, 0, hInst, NULL);

 

//Сумма введенных чисел

 

hButton5 = CreateWindow("BUTTON", "Show sum", WS_CHILD | WS_VISIBLE | BS_DEFPUSHBUTTON | BS_TEXT, 270, 70, 120, 20, hWnd, (HMENU)BTN5, NULL, NULL);

 

//Произведение введенных чисел

 

hButton6 = CreateWindow("BUTTON", "Show mult", WS_CHILD | WS_VISIBLE | BS_DEFPUSHBUTTON | BS_TEXT, 270, 100, 120, 20, hWnd, (HMENU)BTN6, NULL, NULL);

 

break;

case WM_SIZE:

sx = LOWORD(lParam);

sy = HIWORD(lParam);

case WM_COMMAND:

wmId = LOWORD(wParam);

wmEvent = HIWORD(wParam);

// Разобрать выбор в меню:

switch (wmId)

{

case factorial:

char f[256];

GetWindowTextA(Edit1, f, 256);

ltoa(Factorial(atol(f)), f, 10);

MessageBoxA(0, f, _T("Факториал"), MB_OK);

break;

case BTN1:

DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);

break;

 

case BTN2:

char ch[256];

GetWindowTextA(Edit1, ch, 256);

MessageBoxA(0, ch, _T("Эхо"), MB_OK);

break;

 

case BTN3:

char aChar[256];

GetWindowTextA(Edit2, aChar, 256);

aTemp = atoi(aChar);

MessageBoxA(0, _T("Число А введено"), _T("Window A"), MB_OK);

break;

 

case BTN4:

char bChar[256];

GetWindowTextA(Edit3, bChar, 256);

bTemp = atoi(bChar);

MessageBoxA(0, _T("Число B введено"), _T("Window B"), MB_OK);

break;

 

case BTN5:

char sumChar[256];

sumTemp = aTemp + bTemp;

 

itoa(sumTemp, sumChar, 10);

 

MessageBoxA(0, sumChar, _T("Сумма"), MB_OK);

break;

 

case BTN6:

char multChar[256];

multTemp = aTemp * bTemp;

 

itoa(multTemp, multChar, 10);

 

MessageBoxA(0, multChar, _T("Произведение"), MB_OK);


break;

 

case IDM_ABOUT:

DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);

break;

case ID_VIEW_MYNEWDIALOG:

DialogBox(hInst, MAKEINTRESOURCE(IDD_VIEW), hWnd, View);

break;

case IDM_EXIT:

DestroyWindow(hWnd);

break;

default:

return DefWindowProc(hWnd, message, wParam, lParam);

}

break;

case WM_PAINT:

hdc = BeginPaint(hWnd, &ps);

 

for (float i=1; i<4; i++) {

MoveToEx(hdc, 133+i, 0, NULL);

LineTo(hdc, 133+i, 33+i);

}

 

for (float i=1; i<4; i++) {

MoveToEx(hdc, 0, 33+i, NULL);

LineTo(hdc, sx, 33+i);

}

for (float i=1; i<4; i++) {

MoveToEx(hdc, 0, 63+i, NULL);

LineTo(hdc, sx, 63+i);

}

for (float i=1; i<4; i++) {

MoveToEx(hdc, 0, 123+i, NULL);

LineTo(hdc, sx, 123+i);

}

GetClientRect(hWnd, &rc);

GetTextExtentPoint32(hdc, szMsg, _tcslen(szMsg), &sz);

TextOut(hdc, (rc.right + rc.left - sz.cx)/2, ((rc.bottom + rc.top - sz.cy)/2) - 30, szMsg, _tcslen(szMsg));

 

//szMsg = "Below, we can see Factorial of 10 in HEX radix:";

szMsg = "Ниже, мы можем увидеть факториал числа 10 в DEC и HEX системе счисления:";

GetTextExtentPoint32(hdc, szMsg, _tcslen(szMsg), &sz);

TextOut(hdc, (rc.right + rc.left - sz.cx)/2, ((rc.bottom + rc.top - sz.cy)/2) - 10, szMsg, _tcslen(szMsg));

 

ltoa(Factorial(10), temp, 10);

 

GetTextExtentPoint32(hdc, LPCTSTR(temp), _tcslen(LPCTSTR(temp)), &sz);

TextOut(hdc, (rc.right + rc.left - sz.cx)/2 - sz.cx*2/3, ((rc.bottom + rc.top - sz.cy)/2) + 10, LPCTSTR(temp), _tcslen(LPCTSTR(temp)));

 

ltoa(Factorial(10), temp, 16);

 

GetTextExtentPoint32(hdc, LPCTSTR(temp), _tcslen(LPCTSTR(temp)), &sz);

TextOut(hdc, (rc.right + rc.left - sz.cx)/2 + sz.cx*2/3, ((rc.bottom + rc.top - sz.cy)/2) + 10, LPCTSTR(temp), _tcslen(LPCTSTR(temp)));

 

// TODO: добавьте любой код отрисовки...

EndPaint(hWnd, &ps);

break;

case WM_DESTROY:

PostQuitMessage(0);

break;

default:

return DefWindowProc(hWnd, message, wParam, lParam);

}

return 0;

}

 

// Обработчик сообщений для окна "О программе".

INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)

{

UNREFERENCED_PARAMETER(lParam);

switch (message)

{

case WM_INITDIALOG:

return (INT_PTR)TRUE;

 

case WM_COMMAND:

if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)

{

EndDialog(hDlg, LOWORD(wParam));

return (INT_PTR)TRUE;

}

break;

}

return (INT_PTR)FALSE;

}

 

INT_PTR CALLBACK View(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)

{

UNREFERENCED_PARAMETER(lParam);

switch (message)

{

case WM_INITDIALOG:

return (INT_PTR)TRUE;

 

case WM_COMMAND:


if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)

{

EndDialog(hDlg, LOWORD(wParam));

return (INT_PTR)TRUE;

}

break;

}

return (INT_PTR)FALSE;

}

 

// Resource.h

#define IDC_MYICON 2

#define IDD_KURSOVIK_DIALOG 102

#define IDS_APP_TITLE 103

#define IDD_ABOUTBOX 103

#define IDM_ABOUT 104

#define IDM_EXIT 105

#define IDI_KURSOVIK 107

#define IDI_SMALL 108

#define IDC_KURSOVIK 109

#define IDR_MAINFRAME 128

#define IDD_VIEW 129

#define ID_VIEW_MYNEWDIALOG 130

#define BTN1 131

#define BTN2 132

#define BTN3 133

#define BTN4 134

#define BTN5 135

#define BTN6 136

#define factorial 137

 

Руководство пользователя.

При запуске программы появится следующее окно:

в котором продемонстрированы основные и часто использованные функции интерфейса WIN API. В Данном окне продемонстрированы статические элементы приложения, такие, как текст, который всегда будет рисоваться в центре нашего окна, чтобы убедиться в этом можно попробовать изменить размеры нашего окна. Так же, к статическим элементам относятся поля ввода и кнопки, которые так же размещены в нашем окне, но они размещены относительно, т.е. при изменении размеров окна, она их габариты и размеры останутся неизменными. К динамическим элементам относятся диалоговые окна и выпадающие списки.

Каждой статической кнопке соответствует поле ввода, кнопки InPut - являются кнопками подтверждения ввода переменных, с которыми можно провести некоторые операции, которые представлены так же в виде кнопок.

 







Date: 2015-09-18; view: 378; Нарушение авторских прав



mydocx.ru - 2015-2024 year. (0.052 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию