Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 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; Нарушение авторских прав |