Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.07.2016, 09:34   #1
truekot
Новичок
Джуниор
 
Регистрация: 05.07.2016
Сообщений: 1
По умолчанию Написать программу, проверяющую умение оператора пользоваться манипулятором "мышь" - C++ WinAPI

Помогите пожалуйста советом. У меня задание написать программу, проверяющую умение оператора пользоваться манипулятором "мышь". Содержание программы: на экране расположена дорожка, по которой необходимо провести шар - курсор "мыши". Выход за пределы дорожки от старта до финиша считается проигрышем. Предусмотреть несколько уровней сложности программы, отличающиеся друг от друга шириной и извилистостью дорожки.
Вот то что есть, посмотрите пожалуйста. Есть вопрос, как сделать чтобы программа работала только после нажатия на кнопку старт?


Код:
#include <Windows.h>
#include <gdiplus.h>
#include <iostream>
#pragma comment(lib, "gdiplus.lib")


using namespace Gdiplus;
using namespace std;

#define widht 800 //по иксу
#define height 600 //по игреку
#define ID_BUTTON_1 3000
HWND hBtn;
HWND hWnd;


VOID OnPaint(HDC hdc) //функциия для вывода текста
{
	Graphics    graphics(hdc);
	SolidBrush  brush(Color::White);
	FontFamily  fontFamily(L"Times New Roman");
	Font        font(&fontFamily, 24, FontStyleRegular, UnitPixel);
	Font        font1(&fontFamily, 20, FontStyleRegular, UnitPixel);
	PointF      pointF(300.0f, 0.0f);
	PointF		pointF1(5.0f,535.0f);

	graphics.DrawString(L"Maze Mouse", -1, &font, pointF, &brush);
	graphics.DrawString(L"Esc - exit", -1, &font1, pointF1, &brush);
}

VOID DrawRectangle(HDC hdc) // функция прорисовки лабиринта
{
	Graphics	 graphics(hdc);
	GraphicsPath path;
	Pen          pen(Color::Black, 2);
	SolidBrush   brush(Color::White);
	
	path.AddRectangle(Rect(0, 50, 150, 200));
	path.AddRectangle(Rect(150, 70, 500, 60));
	path.AddRectangle(Rect(650, 70, 30, 400));
	path.AddRectangle(Rect(350, 400, 300, 70));
	path.AddRectangle(Rect(310, 180, 40, 290));	
	path.AddEllipse(321,198,20,20);

	graphics.DrawPath(&pen, &path);
	graphics.FillPath(&brush, &path);
	
}

LRESULT CALLBACK WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
WORD move(WORD a, WORD b);

int CALLBACK WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) // главная функция, аналог main
{
	WNDCLASSEX windowClass; 
	
	MSG uMsg;
	

	GdiplusStartupInput gdiplusStartupInput;
	ULONG_PTR gdiplusToken;

	memset(&windowClass, 0, sizeof(WNDCLASSEX));
	windowClass.cbSize = sizeof(WNDCLASSEX);	//размер окна
	windowClass.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH); //цвет фона
	windowClass.hCursor = LoadCursor(NULL, IDC_ARROW); // вид курсора
	windowClass.hIcon = LoadIcon(NULL, IDI_APPLICATION); //иконка окна
	windowClass.hInstance = hInstance;
	windowClass.lpfnWndProc = WindowProc;
	windowClass.lpszClassName = "Maze Mouse";

	RegisterClassEx(&windowClass);
														//Основное мен


	GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);

	
	hWnd = CreateWindow(windowClass.lpszClassName, "Maze Mouse", WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX,
		(GetSystemMetrics(SM_CXSCREEN) - widht) / 2, (GetSystemMetrics(SM_CYSCREEN) - height) / 2, widht, height, NULL, NULL, NULL, NULL);

	ShowWindow(hWnd, nCmdShow);
	
	while (GetMessage(&uMsg, hWnd,NULL,NULL))
	{
		TranslateMessage(&uMsg);
		DispatchMessage(&uMsg);
		
	}
	

	GdiplusShutdown(gdiplusToken);

	DestroyWindow(hWnd); // Уничтожаем основное окно
	//UnregisterClass(windowClass, NULL); // Освобождаем память, отменяя регистрацию класса основного окна.
	return uMsg.wParam;
}

LRESULT CALLBACK WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
	HDC hDC;
	PAINTSTRUCT ps;

	
	switch (uMsg)
	{
	
	case WM_CLOSE:
		ExitProcess(0);
		break;

	case WM_PAINT://Рисование и надписи
		hDC = BeginPaint(hWnd, &ps);
		OnPaint(hDC);
		DrawRectangle(hDC);
		EndPaint(hWnd, &ps);
		break;

	case WM_KEYDOWN://закрытие программы Esc
		switch (wParam)
		{
		case VK_ESCAPE:
			exit(0);
			break;
		}
	return 0;
	
	
	case WM_SIZE:
	case WM_EXITSIZEMOVE:
	{
		break;
	}

	case WM_LBUTTONDOWN://координаты курсора мыши
	{
		WORD xPos, yPos, nSize;
		TCHAR szBuf[80];
		// Сохраняем координаты курсора мыши
		xPos = LOWORD(lParam);
		yPos = HIWORD(lParam);
		hDC = GetDC(hWnd);		
		// Подготавливаем текстовую строку, содержащую
		// координаты курсора мыши
		nSize = wsprintf(szBuf, TEXT("(%d, %d)"), xPos, yPos);
		// Выводим координаты курсора мыши
		// в точке, соответствующей положению
		// курсора мыши 
		TextOut(hDC, xPos, yPos, szBuf, nSize);
		ReleaseDC(hWnd, hDC);
		return 0;
	}

	case WM_CREATE:
		hBtn = CreateWindowEx(NULL, "button", "Start", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, 33, 205, 70, 30, hWnd, (HMENU)1, NULL, NULL);
		break;
		
		case WM_MOUSEMOVE:
		{
			WORD xMousePos, yMousePos;
			xMousePos = LOWORD(lParam);
			yMousePos = HIWORD(lParam);
			//move(xMousePos, yMousePos);
			hDC = GetDC(hWnd);
		if (((((((((((((xMousePos > 0.0 && xMousePos < 150.0) && yMousePos == 50.0)) || ((xMousePos == 150.0 && (yMousePos > 50.0 && yMousePos < 70.0))) || ((xMousePos > 150.0 && xMousePos < 680.0) && yMousePos == 70.0)) ||
			((xMousePos == 680.0 && (yMousePos > 70.0 && yMousePos < 470.0))) || ((xMousePos > 310.0 && xMousePos < 680.0) && yMousePos == 470.0)) || ((xMousePos == 310.0 && (yMousePos > 180.0 && yMousePos < 470.0)))) ||
			(((xMousePos > 310.0 && xMousePos < 350.0) && yMousePos == 180.0))) || ((xMousePos == 350.0 && (yMousePos > 180.0 && yMousePos < 400.0)))) ||
			(((xMousePos > 350.0 && xMousePos < 650.0) && yMousePos == 400.0))) || ((xMousePos == 650.0 && (yMousePos > 130.0 && yMousePos < 400.0)))) ||
			(((xMousePos > 150.0 && xMousePos < 650.0) && yMousePos == 130.0))) || ((xMousePos == 150.0 && (yMousePos > 130.0 && yMousePos < 250.0)))) ||
			(((xMousePos > 0.0 && xMousePos < 150.0) && yMousePos == 250.0)))
		{
			MessageBox(hWnd, "\t    Lose! Restart?", "Game over", MB_OKCANCEL);
		}
		if ((xMousePos >310.0 && xMousePos <350.0) && yMousePos == 220.0)
		{
			MessageBox(hWnd, "YOU WIN", "Win", MB_OK);
		}
		ReleaseDC(hWnd, hDC);
		break;
			InvalidateRect(hWnd, NULL, true); // перерисовываем окно
			return 0;
		}

	break;
	default:
		return DefWindowProc(hWnd, uMsg, wParam, lParam);
		
	}
	
}
truekot вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите написать программу паскаль с помощью оператора for Вадим6297 Помощь студентам 6 23.01.2016 00:54
Написать программу для работы с просматриваемой таблицей по запросу оператора Never_Die Общие вопросы C/C++ 0 06.05.2013 13:29
Программы с использованием условного оператора и оператора выбора. Задачи по Delphi. Не могу сделать 4 программу Bovi4 Помощь студентам 0 25.10.2011 20:15
Си - Написать функцию, проверяющую наличие в строке заданного слова Cvetok Помощь студентам 1 14.05.2008 05:44