17.06.2016, 01:46 | #1 (permalink) |
Новичок
Регистрация: 17.06.2016
Сообщений: 1
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
WinAPI
Код:
#include <windows.h> #include <stdio.h> #include <math.h> static UINT ID_button = 1; // кнопка выхода из приложения static HWND hWndButton; // static UINT ID_edit = 3; // редактор для ввода числа static HWND hWndEdit; // static UINT ID_button2 = 5; // кнопка команды для вычисления квадрата числа static HWND hWndButton2; // static HWND hWndEdit_2; // редактор для вывода квадрата числа static HWND hWndEdit_3; static UINT ID_edit_2 = 4; // static UINT ID_edit_3 = 10; // static UINT ID_STATIC = 6; static UINT ID_STATIC2 = 7; static UINT ID_STATIC3 = 8; int num=0; LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); LRESULT CALLBACK EditProc(HWND, UINT, WPARAM, LPARAM); HINSTANCE hInstance; HWND hEdit; WNDPROC wndEditProc; int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR IpCmdLine, int nCmdShow) { HWND hMainWnd; HFONT hFont=CreateFont (15, 0, 0, 0, FW_BOLD, FALSE, FALSE, FALSE, ANSI_CHARSET, \ OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, \ DEFAULT_PITCH | FF_SWISS, NULL); char szClassName[] = "MyClass"; MSG msg; WNDCLASSEX wc; // Заполняем структуру класса окна wc.cbSize = sizeof(wc); wc.style = CS_HREDRAW|CS_VREDRAW; wc.lpfnWndProc = WndProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hInstance; wc.hIcon = LoadIcon(NULL, IDI_APPLICATION); wc.hCursor = LoadCursor(NULL, IDC_ARROW); //wc.hCursor = GetCursor(); wc.hbrBackground = (HBRUSH)COLOR_WINDOW; wc.lpszMenuName = NULL; wc.lpszClassName = szClassName; wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION); // Регистрируем класс окна if (!RegisterClassEx(&wc)) { MessageBox(NULL, "Не удалось зарегистрировать класс окна", "Ошибка", 0); return 0; } // Создаем основное окно приложения hMainWnd = CreateWindow(szClassName, "Использование элементов управления", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, 500, 400, (HWND)NULL, (HMENU)NULL, (HINSTANCE)hInstance, NULL ); if (!hMainWnd) { MessageBox(NULL, "Не удалось создать окно приложения", "Ошибка", 0); return 0; } // Показываем наше окно ShowWindow(hMainWnd, nCmdShow); // Выполняем цикл обработки сообщений до закрытия приложения while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam; } LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { /*HDC hDC; RECT rect; PAINTSTRUCT ps; */ switch (uMsg) { case WM_CTLCOLORSTATIC: SetTextColor((HDC)wParam, (RGB(rand()%256, rand()%256, rand()%256))); SetBkMode((HDC)wParam, TRANSPARENT); return (LONG)CreateSolidBrush(GetSysColor(COLOR_3DFACE)); case WM_CREATE: CreateWindow(TEXT("static"), "Введите число: ", WS_CHILD|WS_VISIBLE|WS_CLIPSIBLINGS|ES_LEFT, 30, 22, 110, 25, hWnd, (HMENU)ID_STATIC, hInstance, NULL); CreateWindow(TEXT("static"), "Квадрат числа= ", WS_CHILD|WS_VISIBLE|WS_CLIPSIBLINGS|ES_LEFT, 30, 182, 110, 25, hWnd, (HMENU)ID_STATIC2, hInstance, NULL); hWndEdit = CreateWindow("edit", NULL, WS_CHILD|WS_VISIBLE|WS_CLIPSIBLINGS|WS_BORDER|ES_LEFT, 150, 20, 50, 25, hWnd, (HMENU)ID_edit, hInstance, NULL); hWndEdit_2 = CreateWindow("edit", NULL, WS_CHILD|WS_VISIBLE|WS_CLIPSIBLINGS|WS_BORDER|ES_LEFT, 150, 182, 150, 25, hWnd, (HMENU)ID_edit_2, hInstance, NULL); hWndButton2 = CreateWindow("button", "Найти квадрат числа", WS_CHILD|WS_VISIBLE|WS_CLIPSIBLINGS|BS_PUSHBUTTON, 100, 100, 300, 25, hWnd, (HMENU)ID_button2, hInstance, NULL); hWndButton = CreateWindow("button", "Exit", WS_CHILD|WS_VISIBLE|WS_CLIPSIBLINGS|BS_PUSHBUTTON, 100, 280, 50, 25, hWnd, (HMENU)ID_button, hInstance, NULL); wndEditProc = (WNDPROC)GetWindowLongPtr(hWndEdit, GWLP_WNDPROC); SetWindowLongPtr(hWndEdit, GWLP_WNDPROC, (LPARAM)EditProc); break; case WM_CLOSE: DestroyWindow(hWnd); break; case WM_DESTROY: PostQuitMessage(0); break; case WM_MOVE: SetWindowText(hWndEdit, ""); SetWindowText(hWndEdit_2, ""); break; case WM_COMMAND: { UINT idCtl=LOWORD(wParam); // идентификатор дочернего окна UINT code=HIWORD(wParam); // код уведомления HWND hChild=(HWND)lParam; // дескриптор дочернего окна if(idCtl==ID_button&&code==BN_CLICKED) { // кнопка была нажата CloseWindow(hWnd); // закрыть окно-родителя PostQuitMessage(0); // закрыть приложение } // кнопка была нажата if(ID_button&&code==BN_CLICKED) { //count=1; InvalidateRect(NULL,NULL,TRUE); // кнопка была нажата char* str_a = new char[10]; SetWindowText(hWndEdit_2, ""); if (GetWindowText(hWndEdit, str_a, 5)) // получить в переменную str_a текст из редактора с дескриптором hWndEdit { double a = atof(str_a); // функция преобразования текстовой строки в целое число double a2 = a * a; // функция преобразования текстовой строки в целое число double a3=sqrt(a2); char* str_a2 = new char[30]; // char *str_a3= new char[30]; sprintf(str_a2, "%.10g", a2); // перевести число a2 в строку str_a2 sprintf(str_a3, "%.3f", a3); // перевести число a2 в строку str_a2 SetWindowText(hWndEdit_2, str_a2); //вывести строку str5 в редакторе hWndEdit_x1 SetWindowText(hWndEdit_3, str_a3); //вывести строку str5 в редакторе hWndEdit_x1 } else MessageBox(hWnd, "Вы не ввели число", "Ошибка", MB_ICONERROR); } }; return 0; default: return DefWindowProc(hWnd, uMsg, wParam, lParam); } return 0; } LRESULT CALLBACK EditProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) { UINT idCtl=LOWORD(wParam); switch(msg) { case WM_KEYDOWN: { if (wParam==VK_LEFT){ num--; if (num<=0) num = 0; return CallWindowProc(wndEditProc, hWnd, msg, wParam, lParam); } if (wParam==VK_RIGHT){ num++; return CallWindowProc(wndEditProc, hWnd, msg, wParam, lParam); } else return 0; } case WM_CHAR: if (wParam > 47 && wParam < 58) { num++; return CallWindowProc(wndEditProc, hWnd, msg, wParam, lParam); } else if (wParam==45 && num==0){ num++; return CallWindowProc(wndEditProc, hWnd, msg, wParam, lParam); } else if (wParam==VK_BACK){ num--; if (num<=0) num = 0; return CallWindowProc(wndEditProc, hWnd, msg, wParam, lParam); } else return 0; } return CallWindowProc(wndEditProc, hWnd, msg, wParam, lParam); } |
17.06.2016, 01:46 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Возможно, ваша ваша проблема уже имеет решение на нашем форуме программирование графического интерфейса с помощью WINApi на C++ Помогите с решением задачи на WinApi Ищу программиста winApi, С++ и/или С# и/или Java, опыт работы с БД winapi |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
Опции темы | |
Опции просмотра | |
|
|