Новичок
Регистрация: 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);
}
|