Форум программистов, компьютерный форум CyberForum.ru

Построить ломаную по заданным вершинам - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Копирующий конструктор класса, содержащего переменную-член указатель http://www.cyberforum.ru/cpp-beginners/thread344491.html
Практикуюсь по книге Стенли Липпмана "Язык программирования C++ вводный курс" 4 изд. Упражнение 13.4. Используя приведенный ниже набросок класса, напишите конструктор копий, который копирует все его элементы. Скопируйте объект, на который указывает указатель pstring, а не сам указатель. Вот как я реализовал данное упражнение: no_name.h #ifndef NONAME_H_ #define NONAME_H_ #include...
C++ Не работает отправка письма Добрый вечер. Помогите советом. Код: IdSMTP1->UserId = "stas67@yandex.ru"; IdSMTP1->Password = "*******"; IdSMTP1->Host = "smtp.yandex.ru"; http://www.cyberforum.ru/cpp-beginners/thread344464.html
Прошу небольшой помощи C++
Добрый вечер господа. В Этой теме(Кликабельно), я определился с тем, что начну изучение C++ И у меня к Вас возникает вопрос. Посоветуйте какие-либо книги, пособия, возможны как электронные, так и печатные издания, и сайты для новичком, если можно. Заранее спасибо. С Уважением, жду ответов.
C++ long long int и его поведение в структуре
#include <iostream> struct IndexBase { public: int x; int y; int z; unsigned int lastChange; unsigned long long int pos; unsigned short int size;
C++ Программа постоянно печатает степени целого числа 2 http://www.cyberforum.ru/cpp-beginners/thread344418.html
Напишите программу, которая постоянно печатает степени целого числа 2, соответственно 2, 4, 8, 16, 32, 64 и т.д. Число повторений вашего цикла не должно, быть определено (т.е. вы должны создать бесконечный цикл). Что случилось, когда вы выполнили эту программу? Ничего не выводит, где я не прав ? #include "stdafx.h" #include <iostream> using namespace std;
C++ Программа, которая читает сторону квадрата и рисует его звездочками и пробелами Напишите программу с ООП подходом, которая читает размер стороны квадрата и затем печатает звездочками и пробелами пустой квадрат заданного размера. Ваша программа должна работать для любых размеров, заданных в интервале 1-20. Например, если программа прочла размер 5, она должна напечатать: ***** *----* *----* *----* ***** подробнее

Показать сообщение отдельно
-=ЮрА=-
Заблокирован
Автор FAQ
24.08.2011, 13:32     Построить ломаную по заданным вершинам
Итак, выкладываю код (т.к отлов мыши в консоли - довольно непростое дело, то функцию getMouseClick запихнул в DLL выкладываю также скомпилированные и работоспособные MClick.exp
MClick.lib и MClick.DLL - они должны быть в папке проекта!!!). С графикой намного легче, поэтому запихивать в DLL не стал, думаю суть задания была научиться по координатам щелчка стоить линию, а не вникать в суть доступа к потоку консоли STD_INPUT и STD_OUTPUT!Если же есть особое желание создать MClick.DLL, то советую раскопать использование следующих функций
C++
1
2
SetConsoleMode
ReadConsoleInput
и данных в структуре
C++
1
MOUSE_EVENT_RECORD

Пара слов о функции масштабирования координат щелчка - имей в виду что координаты щелчка идут как текстовые коодинаты консоли, т.е напрямую зависят от разрешения экрана и некоторых настроек в системе, поэтому для перевода в привычные координаты нужно вводить масштабные коэффициенты - это
i
C++
1
2
3
4
5
nt nROWS = 25;
    int nCOLS = 80;
 
    double CX = (pRECT.right - pRECT.left)/nCOLS;
    double CY = (pRECT.bottom - pRECT.top)/nROWS;
И не забыть сдвинуть мышь на величину заголовка окна и ширину его раниц, на сим желаю приятного использования данного приложения!
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
#include <windows.h>
#include <stdio.h>
 
#define IMPORT __declspec (dllimport)
#pragma comment(lib,"MClick.lib") //Подключаем MClick.lib
//Функция импортируемая из DLL
IMPORT DWORD getMouseClick(HANDLE hSTD_IN, COORD &POS); 
//Возвращаемые значения POS - координаты щелчка мыши
//(в символьных координатах консоли - это ВАЖНО!)
//DWORD reurn :
//FROM_LEFT_1ST_BUTTON_PRESSED - 1-слева кнопка (ЛЕВАЯ)
//FROM_LEFT_2ND_BUTTON_PRESSED - 2-слева кнопка (СРЕДНЯЯ, если есть)
//FROM_LEFT_3RD_BUTTON_PRESSED - 3-слева кнопка (доп кнопка 1, если есть)
//FROM_LEFT_4TH_BUTTON_PRESSED - 4-слева кнопка (доп кнопка 2, если есть)
//RIGHTMOST_BUTTON_PRESSED     - правая кнопка  (ПРАВАЯ)   
 
#define RED RGB(255,0,0)
#define GRN RGB(0,255,0)
#define BLU RGB(0,0,255)
 
#define BLK RGB(0,0,0)
#define WHT RGB(255,255,255)
 
HPEN getPen(int iPEN_STYLE, int iPEN_SIZE, int iCOLORREF);
BOOL SetPoint(HDC hDC, HPEN hPen, COORD PNT);
BOOL PlotLine(HDC hDC, HPEN hPen, COORD BGN, COORD END);
 
COORD setCordScale(COORD POS, RECT pRECT);
 
int main()
{
    SetConsoleOutputCP(1251);
    HWND   hWnd     = GetForegroundWindow();
    HANDLE hSTD_IN  = GetStdHandle(STD_INPUT_HANDLE);
    HANDLE hSTD_OUT = GetStdHandle(STD_OUTPUT_HANDLE);
 
    HPEN    LPEN = getPen(PS_SOLID, 2, RED);
    HPEN    PPEN = getPen(PS_SOLID, 3, WHT);
    RECT    pRECT= {0};
    COORD   POS  = {0};
    DWORD   dwCLICK = NULL;
    GetWindowRect(hWnd,&pRECT);
    COORD   BGN  = setCordScale(POS,pRECT);
    HDC hDC = GetWindowDC(hWnd);
    if(hDC)
    {
        SetBkMode(hDC,TRANSPARENT);//Можно и не устанавливать єтот режим, но с ним ярче
        SetPoint (hDC, PPEN, BGN);
        do
        {
            GetWindowRect(hWnd,&pRECT);
            if((dwCLICK = getMouseClick(hSTD_IN,POS)) == RIGHTMOST_BUTTON_PRESSED)
            {
                //Очистка экрана
                ShowWindow(hWnd,SW_HIDE);
                PlotLine(hDC, LPEN, BGN,  BGN);
                ShowWindow(hWnd,SW_SHOW);
            }
            POS = setCordScale(POS,pRECT);
            PlotLine(hDC, LPEN, BGN,  POS);
            SetPoint(hDC, PPEN, BGN = POS);
        }
        while(dwCLICK != FROM_LEFT_2ND_BUTTON_PRESSED);
    }
    system("pause");
    return 0;
}
 
HPEN getPen(int iPEN_STYLE, int iPEN_SIZE, int iCOLORREF)
{
    return CreatePen(iPEN_STYLE, iPEN_SIZE, iCOLORREF);
}
 
BOOL SetPoint(HDC hDC, HPEN hPen, COORD PNT)
{
    EXTLOGPEN pINFO;
    GetObject(hPen,sizeof(EXTLOGPEN),&pINFO);
    SelectObject(hDC,hPen);
    return Ellipse
    (
        hDC,
        PNT.X - pINFO.elpWidth,
        PNT.Y + pINFO.elpWidth, 
        PNT.X + pINFO.elpWidth,
        PNT.Y - pINFO.elpWidth
    );
}
 
BOOL PlotLine(HDC hDC, HPEN hPen, COORD BGN, COORD END)
{
    SelectObject(hDC,hPen);
    MoveToEx(hDC,BGN.X,BGN.Y,NULL);
    return LineTo(  hDC,END.X,END.Y);
}
 
COORD setCordScale(COORD POS, RECT pRECT)
{
    if(POS.X == 0)
        POS.X = 1;
    if(POS.Y == 0)
        POS.Y = 1;
 
    int nROWS = 25;
    int nCOLS = 80;
 
    double CX = (pRECT.right - pRECT.left)/nCOLS;
    double CY = (pRECT.bottom - pRECT.top)/nROWS;
 
    //При текстовом режиме(text mode) экран  делится  на  ячейки
    //(80  или 40 колонок в ширину и 25 строк в высоту)
    POS.X *= CX;
    POS.Y *= CY;
 
    int xBORDER = GetSystemMetrics(SM_CXBORDER);//Ширина границы окна
    int yBORDER = GetSystemMetrics(SM_CYMENU);  //Высота заголовка окна ~= высоте строк меню
    int xDRAG   = GetSystemMetrics(SM_CXDRAG);  //Число пикселей на гориз дрожение мыши
    int yDRAG   = GetSystemMetrics(SM_CYDRAG);  //Число пикселей на вертик дрожение мыши
 
    POS.X += xBORDER + xDRAG;//Ширина границы окна + число пикселей на дрожение мыши
    POS.Y += yBORDER + yDRAG;
    return POS;
}
PS:Если есть необходимость очистить экран от линии щелков, то жмём правую клавишу мыши...
Миниатюры
Построить ломаную по заданным вершинам  
Вложения
Тип файла: rar console_mouse_project.rar (28.6 Кб, 270 просмотров)
 
Текущее время: 20:13. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru