Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 22.12.2019
Сообщений: 47

Не записывает координаты

19.03.2020, 12:29. Показов 632. Ответов 5

Студворк — интернет-сервис помощи студентам
Сидел около 3ех часов, перерыл всего Щупака, но у меня так и не получилось, нужно, чтобы записывало координаты по нажатию ЛКМ и присваивало их значения и рисовалась фигура. DEV C++ консоль.


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
123
#include <windows.h>
 
/* This is where all the input to the window goes to */
LRESULT CALLBACK WndProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam) 
{
    
    HDC hDC;
    PAINTSTRUCT ps ; 
    RECT rect; 
    int i=10;
    int n=-1;
    int x[i], y[i] ;
    
    switch(Message) {
        case WM_PAINT: 
        hDC = BeginPaint(hwnd, &ps);
            
            
            for (i=1;i>n;++i){
            
            MoveToEx(hDC, x[i],y[i],NULL);
            LineTo (hDC, 50,y[i]);  
            MoveToEx(hDC, x[i],y[i],NULL);
            LineTo (hDC, x[i],50);
            MoveToEx(hDC, x[i],y[i],NULL);
            LineTo (hDC, 25,y[i]);
            MoveToEx(hDC, x[i],y[i],NULL);
            LineTo (hDC, x[i],25);
                    EndPaint(hwnd, &ps);
 
            break;
        }
            case WM_LBUTTONDOWN: 
                
                x[i] = LOWORD (lParam);
                y[i] = HIWORD (lParam);
                
                GetClientRect (hwnd, &rect);
                InvalidateRect (hwnd, &rect, -1);
                UpdateWindow(hwnd);
                break;  
 
 
            
            
                     
            /*  case WM_MOUSEMOVE:
            {
                POINT pt;
                TCHAR textBuffer[32];
         
                GetCursorPos (&pt);
                ScreenToClient (hwnd, &pt);
                wsprintf (textBuffer, "pt.x: %d pt.y: %d", pt.x, pt.y);
                SetWindowText (hwnd, textBuffer);
                break;
            } */
            
        
        
        case WM_DESTROY: {
            PostQuitMessage(0);
            break;
            
        }
        
        /* All other messages (a lot of them) are processed using default procedures */
        default:
            return DefWindowProc(hwnd, Message, wParam, lParam);
    }
    return 0;
}
 
/* The 'main' function of Win32 GUI programs: this is where execution starts */
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
 {
    WNDCLASSEX wc; /* A properties struct of our window */
    HWND hwnd; /* A 'HANDLE', hence the H, or a pointer to our window */
    MSG Msg; /* A temporary location for all messages */
    
    /* zero out the struct and set the stuff we want to modify */
    memset(&wc,0,sizeof(wc));
    wc.cbSize        = sizeof(WNDCLASSEX);
    wc.lpfnWndProc   = WndProc; /* This is where we will send messages to */
    wc.hInstance     = hInstance;
    wc.hCursor       = LoadCursor(NULL, IDC_ARROW);
    
    
    /* White, COLOR_WINDOW is just a #define for a system color, try Ctrl+Clicking it */
    wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
    wc.lpszClassName = "WindowClass";
    wc.hIcon         = LoadIcon(NULL, IDI_APPLICATION); /* Load a standard icon */
    wc.hIconSm       = LoadIcon(NULL, IDI_APPLICATION); /* use the name "A" to use the project icon */
 
    if(!RegisterClassEx(&wc)) {
        MessageBox(NULL, "Window Registration Failed!","Error!",MB_ICONEXCLAMATION|MB_OK);
        return 0;
    }
 
    hwnd = CreateWindowEx(WS_EX_CLIENTEDGE,"WindowClass","Caption",WS_VISIBLE|WS_OVERLAPPEDWINDOW,
        CW_USEDEFAULT, /* x */
        CW_USEDEFAULT, /* y */
        640, /* width */
        480, /* height */
        NULL,NULL,hInstance,NULL);
 
    if(hwnd == NULL) {
        MessageBox(NULL, "Window Creation Failed!","Error!",MB_ICONEXCLAMATION|MB_OK);
        return 0;
    }
 
    /*
        This is the heart of our program where all input is processed and 
        sent to WndProc. Note that GetMessage blocks code flow until it receives something, so
        this loop will not produce unreasonably high CPU usage
    */
    while(GetMessage(&Msg, NULL, 0, 0) > 0) { /* If no error is received... */
        TranslateMessage(&Msg); /* Translate key codes to chars if present */
        DispatchMessage(&Msg); /* Send it to WndProc */
    }
    return Msg.wParam;
 
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
19.03.2020, 12:29
Ответы с готовыми решениями:

Составить программу, которая вводит с клавиатуры координаты точек и записывает их последовательно в файл
Приняв, что координаты точек на плоскости задаются двумя числами x и y, составить программу, которая вводит с клавиатуры координаты точек и...

Запись в файл не происходит, или не всё записывает, или криво записывает. Что не так?
Здравствуйте! Подскажите пожалуйста - в чем тут может быть проблема?.. Записываю данные в файл, потом вывожу - и вместо того, что бы...

Скрипт, который в разные строки записывает буквы и цифры, цифры записывает как сумму
помогите сделать скрипт, который в разные строки записывает буквы и цифры, цифры записывает как сумму всё вводится с клавиатуры тоисть...

5
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
19.03.2020, 20:01
Цитата Сообщение от UP_G Посмотреть сообщение
Сидел около 3ех часов, перерыл всего Щупака, но у меня так и не получилось, нужно, чтобы записывало координаты по нажатию ЛКМ и присваивало их значения и рисовалась фигура. DEV C++ консоль.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
static   const  int i=10;
static    int n=-1;
static    int x[i], y[i] ;
 
LRESULT CALLBACK WndProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam) 
{
    
    HDC hDC;
    PAINTSTRUCT ps ; 
    RECT rect; 
    //int i=10;
    //int n=-1;
    //int x[i], y[i] ;
Добавлено через 51 секунду
Цитата Сообщение от UP_G Посмотреть сообщение
for (i=1;i>n;++i){
Может for (i= 0 ; i < n;++i) ?
0
0 / 0 / 0
Регистрация: 22.12.2019
Сообщений: 47
19.03.2020, 21:00  [ТС]
не прокатывает [Error] assignment of read-only variable 'i'

Я так тоже пробовал.
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
19.03.2020, 21:11
Цитата Сообщение от UP_G Посмотреть сообщение
не прокатывает [Error] assignment of read-only variable 'i'
for (int i= 0 ; i < n;++i) ?

Добавлено через 33 секунды
C++
1
2
3
static   const  int sz=10;
static    int n=-1;
static    int x[sz], y[sz] ;
Добавлено через 37 секунд
А int n=-1; - это что такое?

Добавлено через 1 минуту
C++
1
2
3
4
5
6
7
8
9
10
11
12
            case WM_LBUTTONDOWN: 
                if (n < sz)
{
                x[n] = LOWORD (lParam);
                y[n] = HIWORD (lParam);
                ++n;
 
                GetClientRect (hwnd, &rect);
                InvalidateRect (hwnd, &rect, -1);
                UpdateWindow(hwnd);
  }
              break;
Добавлено через 44 секунды
static int n = 0;
0
Заблокирован
19.03.2020, 22:28
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
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
////////////////////////////////////////////////////////////////////////////////
// WinMain.cpp
//
// Туториал "Рисовалка" от qll
//
// Made by qll :-_)
 
#include "iHead.h"
#include <windows.h>
 
TCHAR GWndname[]=TEXT("WCDraw");
TCHAR GAppname[]=TEXT("Draw From Mouse");
 
BOOL Draw(HDC hdc, POINT pt, POINT pt2)
{
    MoveToEx(hdc,pt.x,pt.y,NULL);
    return LineTo(hdc,pt2.x,pt2.y);
}
 
LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    POINT pt;
    static HPEN Pen;
    static HBRUSH Brush;
    static BOOL Busy;
    static HDC hDC;
    static int cx, cy;
    static POINT Point[4];
    LRESULT retval=0;
 
    switch(uMsg)
    {
        case WM_CREATE:
        {
            Pen=CreatePen(PS_SOLID,3,RGB(255,0,0));
            Brush=CreateSolidBrush(RGB(255,0,0));
        }
        break;
 
        case WM_LBUTTONDOWN:
        {
        if(!Busy) SetFocus(hWnd);
        pt.x=(int)(short)LOWORD(lParam)+cx;
        pt.y=(int)(short)HIWORD(lParam)+cy;
        Point[0]=Point[1]=pt;
        Busy=TRUE;
        if(!hDC) hDC=GetDC(hWnd);
        SetROP2(hDC,R2_NOT);
        SelectObject(hDC,Pen);
        SelectObject(hDC,Brush);
        SetCapture(hWnd);
        Draw(hDC,Point[0],Point[1]);
        }
        break;
 
        case WM_LBUTTONUP:
        {
        pt.x=(int)(short)LOWORD(lParam)+cx;
        pt.y=(int)(short)HIWORD(lParam)+cy;
        if(Busy)
        {
        Draw(hDC,Point[0],Point[1]);
        Point[1]=pt;
        SetROP2(hDC,R2_COPYPEN);
        SetBkMode(hDC,TRANSPARENT);
        SelectObject(hDC,Pen);
        SelectObject(hDC,Brush);
        Draw(hDC,Point[0],Point[1]);
        SelectObject(hDC,Pen);
        SelectObject(hDC,Brush);
        ReleaseCapture();
        Busy=FALSE;
        }
        }
        break;
 
        case WM_MOUSEMOVE:
        {
        pt.x=(int)(short)LOWORD(lParam)+cx;
        pt.y=(int)(short)HIWORD(lParam)+cy;
        if(Busy)
        {
            Draw(hDC,Point[0],Point[1]);
            Point[1]=pt;
            Draw(hDC,Point[0],Point[1]);
 
            TCHAR Buf[32];
            wsprintf(Buf,TEXT("%d,%d"),pt.x,pt.y);
            SetWindowText(hWnd,Buf);
        }
        }
        break;
 
        case WM_CLOSE:
            DestroyWindow(hWnd);
            break;
 
        case WM_DESTROY:
            ReleaseDC(hWnd,hDC);
            DeleteObject(Pen);
            DeleteObject(Pen);
            PostQuitMessage(0);
            break;
 
        default:
            retval=DefWindowProc(hWnd,uMsg,wParam,lParam);
    }
    return retval;
}
 
//
// Entry point
//
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
    HWND hWnd=HWND_DESKTOP;
 
    LOGBRUSH lplb;
    lplb.lbStyle=BS_SOLID;
    lplb.lbColor=RGB(0,0,0);
    lplb.lbHatch=HS_BDIAGONAL;
    HBRUSH Brush=CreateBrushIndirect(&lplb);
 
    WNDCLASSEX wcex={sizeof(WNDCLASSEX),CS_VREDRAW|CS_HREDRAW,
        WndProc,0,0,hInstance,LoadIcon(NULL,IDI_APPLICATION),
        LoadCursor(NULL,IDC_ARROW),
        Brush,
        //(HBRUSH)(COLOR_WINDOW+1),
        NULL,GWndname,NULL,};
 
    ATOM Atom=RegisterClassEx(&wcex);
    if(!Atom) {
        Atom=RegisterClass((LPWNDCLASS)&wcex.style);
        if(!Atom) {
            MessageBox(hWnd,TEXT("Cannot register class"),GAppname,MB_OK|MB_ICONSTOP|MB_SETFOREGROUND|MB_SYSTEMMODAL);
            return 0;
        }
    }
 
    int nWidth=640;
    int nHeight=480;    // Window position center desktop
    hWnd=CreateWindowEx(WS_EX_CLIENTEDGE,MAKEINTATOM(Atom),GAppname,WS_OVERLAPPEDWINDOW,((GetSystemMetrics(SM_CXSCREEN)-nWidth)/2),((GetSystemMetrics(SM_CYSCREEN)-nHeight)/2),nWidth,nHeight,HWND_DESKTOP,NULL,hInstance,NULL);
    if(!hWnd)
    {
        MessageBox(hWnd,TEXT("Cannot create window"),GAppname,MB_OK|MB_ICONSTOP|MB_SETFOREGROUND|MB_SYSTEMMODAL);
        return 0;
    }
 
    ShowWindow(hWnd,nCmdShow);
    UpdateWindow(hWnd);
 
    MSG msg;
    while(GetMessage(&msg,NULL,0,0)>0) {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    DeleteObject(Brush);
    return (int)msg.wParam;
}
 
////////////////////////////////////////////////////////////////////////////////
// <<eof>> WinMain.cpp
////////////////////////////////////////////////////////////////////////////////


https://www.cyberforum.ru/atta... 1584646108
Вложения
Тип файла: zip Draw_From_Mouse.zip (32.4 Кб, 2 просмотров)
1
0 / 0 / 0
Регистрация: 22.12.2019
Сообщений: 47
20.03.2020, 01:28  [ТС]
Нет, нужно именно, чтобы при нажатии ЛКМ задавались координаты в выбранный массив.
n - это кол-во фигур (есть определённое задание), так-то и я мог найти подобный код, но мне нужно, чтобы рисовалась фигура. Но тут больше вопрос "почему ничего не происходит&".

За попытки - спасибо.

Добавлено через 4 минуты
Через if заработает конечно, но нужно через for, т.к нужно создавать будет несколько одинаковых фигур, а if не позволит это сделать.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
20.03.2020, 01:28
Помогаю со студенческими работами здесь

Даны целочисленные координаты трех вершин прямоугольника, найти координаты четвертой
Даны целочисленные координаты трех вершин прямоугольника, стороны которого параллельны координатным осям. Найти координаты его четвертой...

Даны координаты вершин треугольника и координаты некоторой точки внутри него
Даны координаты вершин треугольника и координаты некоторой точки внутри него. Найти расстояние от данной точки до ближайшей стороны...

Даны координаты вершин треугольника и координаты некоторой точки внутри него
Даны координаты вершин треугольника и координаты некоторой точки внутри него. Найти расстояние от данной точки до ближайшей стороны...

Вычислить декартовы координаты точки, имеющую следующие полярные координаты
Помгите пожалуйста с этими вопросами!

Vb.net directx, slimdx преобразовать экранные координаты мыши в 3d координаты
vb.net directx, slimdx преобразовать экранные координаты мыши в 3d координаты необходимо передвигать объекты мышью по плоскости XY,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru