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

Перемещение указателя мыши

06.05.2016, 18:30. Показов 1117. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите пожалуйста...

Задание:
Написать программу, которая следит за перемещением указателя мыши и выводит его координаты в окне приложения. Если при выходе за окно права кнопка мыши нажата, программа продолжает следить за перемещением мыши и выводит ее координаты.
___________________________________

Первое задание сделал сам, помогите со вторым...

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
#include "stdafx.h"
#include <windows.h>
#include <stdio.h>
 
HINSTANCE hInst; 
ATOM MyRegisterClass(HINSTANCE hInstance);
BOOL InitInstance(HINSTANCE, int);
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
 
int APIENTRY WinMain(HINSTANCE hInstance,
    HINSTANCE hPrevInstance,
    LPSTR lpCmdLine,
    int nCmdShow)
{
    MSG msg;
    
    MyRegisterClass(hInstance);
    
    if (!InitInstance(hInstance, nCmdShow))
    {
        return FALSE;
    }
    
    while (GetMessage(&msg, NULL, 0, 0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    return msg.wParam;
}
// FUNCTION: MyRegisterClass()
 
ATOM MyRegisterClass(HINSTANCE hInstance)
{
    HBRUSH hbrush = CreateSolidBrush(RGB(160, 160, 160));
    WNDCLASSEX wcex;
    wcex.cbSize = sizeof(WNDCLASSEX);
    wcex.style = CS_HREDRAW | CS_VREDRAW;
    wcex.lpfnWndProc = (WNDPROC)WndProc; 
    wcex.cbClsExtra = 0;
    wcex.cbWndExtra = 0;
    wcex.hInstance = hInstance;  
    wcex.hIcon = LoadIcon(NULL, IDI_APPLICATION);  
    wcex.hCursor = LoadCursor(NULL, IDC_HELP); 
    wcex.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
    //wcex.hbrBackground = GetSysColorBrush(COLOR_BTNFACE);
    wcex.lpszMenuName = NULL; 
    wcex.lpszClassName = L"Laba4";      
    wcex.hIconSm = NULL;
    return RegisterClassEx(&wcex);
}
// FUNCTION: InitInstance(HANDLE, int)
 
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
    HWND hWnd;
    hInst = hInstance; 
    hWnd = CreateWindowEx(WS_EX_OVERLAPPEDWINDOW,
        L"Laba4", 
        L"Program",
        WS_OVERLAPPEDWINDOW,
        0,  
        0, 
        1000, 
        500, 
        NULL, 
        NULL, 
        hInstance, 
        NULL);  
    if (!hWnd)  
    {
        return FALSE;
    }
    ShowWindow(hWnd, nCmdShow); 
    UpdateWindow(hWnd); 
    return TRUE;
}
// FUNCTION: WndProc(HWND, unsigned, WORD, LONG)
 
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    HDC hdc;
    
    switch (message)
    {
   
   case WM_MOUSEMOVE:
        
       {
        POINT pt;
        TCHAR str[100];
 
        GetCursorPos (&pt);
    ScreenToClient(hWnd, &pt);
        wsprintf (str, L"координаты курсора x: %d y: %d", pt.x, pt.y);
        SetWindowText (hWnd, str);
    }
    break;
 
 
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
    default:
        
        return DefWindowProc(hWnd, message, wParam, lParam);
    }
    return 0;
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
06.05.2016, 18:30
Ответы с готовыми решениями:

Перемещение камеры при нажатой левой клавише мыши; проблемы с обзором мыши и видимостью указателя
Добрый день! У меня есть проект с кубом, кольцом и двумя кнопками из прошлой темы...

Событие мыши: перемещение мыши при нажатой левой клавиши
Подскажите, пожалуйста как реализовать следующее: При перемещении мыши при нажатой левой клавише (выделение текста) выводится сообщение...

Перемещение на клик мыши и поворот за курсором мыши
Как сделать чтобы смешарик шёл на клик мыши и поворачивался в сторону курсора? Можете дать скрипт?

9
-12 / 6 / 4
Регистрация: 19.01.2017
Сообщений: 584
16.11.2020, 12:43
Поднять тему, нужна помощь в этой программе. Буду очень благодарен!

Добавлено через 1 минуту
Программа написана на CodeBlocks


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
#if defined(UNICODE) && !defined(_UNICODE)
    #define _UNICODE
#elif defined(_UNICODE) && !defined(UNICODE)
    #define UNICODE
#endif
 
#include <tchar.h>
#include <windows.h>
#include <stdio.h>
 
#define MAX_STR_SIZE 100
 
/*  Declare Windows procedure  */
LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);
 
/*  Make the class name into a global variable  */
TCHAR szClassName[] = _T("lab4");
 
 
int WINAPI _tWinMain (HINSTANCE hThisInstance,
                    HINSTANCE hPrevInstance,
                    TCHAR* lpszArgument,
                    int nFunsterStil)
 
{
    HWND hwnd;               /* This is the handle for our window */
    MSG msg;            /* Here messages to the application are saved */
    WNDCLASSEX wincl;        /* Data structure for the windowclass */
 
    /* The Window structure */
    wincl.hInstance = hThisInstance;
    wincl.lpszClassName = szClassName;
    wincl.lpfnWndProc = WindowProcedure;      /* This function is called by windows */
    wincl.style = CS_DBLCLKS;                 /* Catch double-clicks */
    wincl.cbSize = sizeof (WNDCLASSEX);
 
    /* Use default icon and mouse-pointer */
    wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
    wincl.lpszMenuName = NULL;                 /* No menu */
    wincl.cbClsExtra = 0;                      /* No extra bytes after the window class */
    wincl.cbWndExtra = 0;                      /* structure or the window instance */
    /* Use Windows's default color as the background of the window */
    wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND;
 
    /* Register the window class, and if it fails quit the program */
    if (!RegisterClassEx (&wincl))
        return 0;
 
    /* The class is registered, let's create the program*/
    hwnd = CreateWindowEx (
        0,                   /* Extended possibilites for variation */
        szClassName,         /* Classname */
        _T("Lab4 by flame4ost"),   /* Title Text */
        WS_OVERLAPPEDWINDOW, /* default window */
        CW_USEDEFAULT,       /* Windows decides the position */
        CW_USEDEFAULT,       /* where the window ends up on the screen */
        544,                 /* The programs width */
        375,                 /* and height in pixels */
        NULL,        /* The window is a child-window to desktop */
        NULL,                /* No menu */
        hThisInstance,       /* Program Instance handler */
        NULL                 /* No Window Creation data */
        );
 
    /* Make the window visible on the screen */
    ShowWindow (hwnd, nFunsterStil);
    UpdateWindow(hwnd);
 
    /* Run the message loop. It will run until GetMessage() returns 0 */
    while (GetMessage (&msg, NULL, 0, 0))
    {
        /* Translate virtual-key messages into character messages */
        TranslateMessage(&msg);
        /* Send message to WindowProcedure */
        DispatchMessage(&msg);
    }
 
    /* The program return-value is 0 - The value that PostQuitMessage() gave */
    return msg.wParam;
}
 
 
/*  This function is called by the Windows function DispatchMessage()  */
 
LRESULT CALLBACK WindowProcedure(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
    static TCHAR szText[MAX_STR_SIZE] = {_T('\0')};
 
    static RECT rect;
    static POINT point;
 
    HDC hdc;
    PAINTSTRUCT ps;
 
    switch (msg)
    {
    case WM_SIZE:
        GetClientRect(hwnd, &rect);
        point.x = (rect.right - rect.left) / 2;
        point.y = (rect.bottom - rect.top) / 2;
        break;
 
    case WM_PAINT:
        hdc = BeginPaint(hwnd, &ps);
        SetTextAlign(hdc, TA_CENTER | VTA_CENTER);
        TextOut(hdc, point.x, point.y, szText, _tcsnlen(szText, MAX_STR_SIZE));
        EndPaint(hwnd, &ps);
        break;
 
    case WM_RBUTTONDOWN:
        _stprintf(szText, _T("Coordinates are: X = %d and Y = %d"), LOWORD(lParam), HIWORD(lParam));
        InvalidateRect(hwnd, &rect, TRUE);
        break;
 
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
 
    default:
        return DefWindowProc(hwnd, msg, wParam, lParam);
    }
 
    return 0;
}
Добавлено через 1 минуту
Правильно?
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
16.11.2020, 20:47
Цитата Сообщение от Like_society Посмотреть сообщение
Поднять тему, нужна помощь в этой программе. Буду очень благодарен!
Я так понимаю, вот в этом
Цитата Сообщение от Yaport Посмотреть сообщение
Написать программу, которая следит за перемещением указателя мыши и выводит его координаты в окне приложения. Если при выходе за окно права кнопка мыши нажата, программа продолжает следить за перемещением мыши и выводит ее координаты.
По WM_RBUTTONDOWN делай SetCapture, по WM_RBUTTONUP - ReleaseCapture. По WM_MOUSEMOVE выводи координаты
0
-12 / 6 / 4
Регистрация: 19.01.2017
Сообщений: 584
16.11.2020, 21:04
oleg-m1973, можете выбрать тот кусок кода и скинуть, где именно исправить. Или это case?
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
16.11.2020, 21:08
Цитата Сообщение от Like_society Посмотреть сообщение
oleg-m1973, можете выбрать тот кусок кода и скинуть, где именно исправить. Или это case?
Сейчас у тебя выводит координаты при нажатии правой кнопки. Тебе нужно что-то другое?
0
-12 / 6 / 4
Регистрация: 19.01.2017
Сообщений: 584
16.11.2020, 21:14
oleg-m1973, Та нет, всё как здесь написано.
Написать программу, которая следит за перемещением указателя мыши и выводит его координаты в окне приложения. Если при выходе за окно права кнопка мыши нажата, программа продолжает следить за перемещением мыши и выводит ее координаты.

Добавлено через 1 минуту
oleg-m1973, мне просто нужен участок кода, где нужно сделать изменения? Либо можете исправить и скинуть, пожалуйста.
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
16.11.2020, 21:15
Цитата Сообщение от Like_society Посмотреть сообщение
Написать программу, которая следит за перемещением указателя мыши и выводит его координаты в окне приложения. Если при выходе за окно права кнопка мыши нажата, программа продолжает следить за перемещением мыши и выводит ее координаты.
Ну, я вроде подробно расписал, что нужно сделать

Добавлено через 36 секунд
Цитата Сообщение от Like_society Посмотреть сообщение
oleg-m1973, мне просто нужен участок кода, где нужно сделать изменения? Либо можете исправить и скинуть, пожалуйста.
Вот здесь
Цитата Сообщение от Like_society Посмотреть сообщение
switch (msg)
    {
    case WM_SIZE:
        GetClientRect(hwnd, &rect);
        point.x = (rect.right - rect.left) / 2;
        point.y = (rect.bottom - rect.top) / 2;
        break;
case WM_PAINT:
        hdc = BeginPaint(hwnd, &ps);
        SetTextAlign(hdc, TA_CENTER | VTA_CENTER);
        TextOut(hdc, point.x, point.y, szText, _tcsnlen(szText, MAX_STR_SIZE));
        EndPaint(hwnd, &ps);
        break;
case WM_RBUTTONDOWN:
        _stprintf(szText, _T("Coordinates are: X = %d and Y = %d"), LOWORD(lParam), HIWORD(lParam));
        InvalidateRect(hwnd, &rect, TRUE);
        break;
case WM_DESTROY:
        PostQuitMessage(0);
        break;
default:
        return DefWindowProc(hwnd, msg, wParam, lParam);
    }
1
-12 / 6 / 4
Регистрация: 19.01.2017
Сообщений: 584
16.11.2020, 21:33
oleg-m1973, понял, спасибо большое.

Добавлено через 18 минут
oleg-m1973, правильно?:
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
#if defined(UNICODE) && !defined(_UNICODE)
    #define _UNICODE
#elif defined(_UNICODE) && !defined(UNICODE)
    #define UNICODE
#endif
 
#include <tchar.h>
#include <winuser.h>
#include <windows.h>
#include <stdio.h>
 
#define MAX_STR_SIZE 100
 
/*  Declare Windows procedure  */
LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);
 
/*  Make the class name into a global variable  */
TCHAR szClassName[] = _T("lab4");
 
 
int WINAPI _tWinMain (HINSTANCE hThisInstance,
                    HINSTANCE hPrevInstance,
                    TCHAR* lpszArgument,
                    int nFunsterStil)
 
{
    HWND hwnd;               /* This is the handle for our window */
    MSG msg;            /* Here messages to the application are saved */
    WNDCLASSEX wincl;        /* Data structure for the windowclass */
 
    /* The Window structure */
    wincl.hInstance = hThisInstance;
    wincl.lpszClassName = szClassName;
    wincl.lpfnWndProc = WindowProcedure;      /* This function is called by windows */
    wincl.style = CS_DBLCLKS;                 /* Catch double-clicks */
    wincl.cbSize = sizeof (WNDCLASSEX);
 
    /* Use default icon and mouse-pointer */
    wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
    wincl.lpszMenuName = NULL;                 /* No menu */
    wincl.cbClsExtra = 0;                      /* No extra bytes after the window class */
    wincl.cbWndExtra = 0;                      /* structure or the window instance */
    /* Use Windows's default color as the background of the window */
    wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND;
 
    /* Register the window class, and if it fails quit the program */
    if (!RegisterClassEx (&wincl))
        return 0;
 
    /* The class is registered, let's create the program*/
    hwnd = CreateWindowEx (
        0,                   /* Extended possibilites for variation */
        szClassName,         /* Classname */
        _T("Lab4 by flame4ost"),   /* Title Text */
        WS_OVERLAPPEDWINDOW, /* default window */
        CW_USEDEFAULT,       /* Windows decides the position */
        CW_USEDEFAULT,       /* where the window ends up on the screen */
        544,                 /* The programs width */
        375,                 /* and height in pixels */
        NULL,        /* The window is a child-window to desktop */
        NULL,                /* No menu */
        hThisInstance,       /* Program Instance handler */
        NULL                 /* No Window Creation data */
        );
 
    /* Make the window visible on the screen */
    ShowWindow (hwnd, nFunsterStil);
    UpdateWindow(hwnd);
 
    /* Run the message loop. It will run until GetMessage() returns 0 */
    while (GetMessage (&msg, NULL, 0, 0))
    {
        /* Translate virtual-key messages into character messages */
        TranslateMessage(&msg);
        /* Send message to WindowProcedure */
        DispatchMessage(&msg);
    }
 
    /* The program return-value is 0 - The value that PostQuitMessage() gave */
    return msg.wParam;
}
 
 
/*  This function is called by the Windows function DispatchMessage()  */
 
LRESULT CALLBACK WindowProcedure(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
    static TCHAR szText[MAX_STR_SIZE] = {_T('\0')};
 
    static RECT rect;
    static POINT point;
 
    HDC hdc;
    PAINTSTRUCT ps;
 
    switch (msg)
    {
    case WM_SIZE:
        GetClientRect(hwnd, &rect);
        point.x = (rect.right - rect.left) / 2;
        point.y = (rect.bottom - rect.top) / 2;
        break;
 
    case WM_PAINT:
        hdc = BeginPaint(hwnd, &ps);
        SetTextAlign(hdc, TA_CENTER | VTA_CENTER);
        TextOut(hdc, point.x, point.y, szText, _tcsnlen(szText, MAX_STR_SIZE));
        EndPaint(hwnd, &ps);
        break;
 
    case WM_MOUSEMOVE:
        _stprintf(szText, _T("Coordinates are: X = %d and Y = %d"), LOWORD(lParam), HIWORD(lParam));
        InvalidateRect(hwnd, &rect, TRUE);
        break;
 
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
 
        case WM_RBUTTONDOWN:
        SetCapture(hwnd);
        break;
 
    case WM_RBUTTONUP:
        ReleaseCapture();
        break;
 
    default:
        return DefWindowProc(hwnd, msg, wParam, lParam);
    }
 
    return 0;
}
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
16.11.2020, 21:35
Цитата Сообщение от Like_society Посмотреть сообщение
oleg-m1973, правильно?:
Похоже на то. Работает?
0
-12 / 6 / 4
Регистрация: 19.01.2017
Сообщений: 584
16.11.2020, 21:36
oleg-m1973, да, всё прекрасно)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
16.11.2020, 21:36
Помогаю со студенческими работами здесь

Перемещение указателя в потоке
почему при выводе финальном на экран выводится только последняя цифра...подскажите тему тольео начали учить сегодня?! #include...

Перемещение указателя по файлу
Один из блоков программы на основании файла формирует и записывает чек. { //Подсчет кол-ва клиентов в файле ...

Перемещение указателя на потоке
Здравствуйте! Имеется файл следующего содержания: Мне необходимо относительно текущей позиции указателя переместиться на n-ое кол-во...

Почему при нажатии кнопки мыши происходит событие "перемещение мыши"?
Просто нажал на левую кнопку мыши и сразу же отпустил. А сам указатель мыши находится на месте Почему в этом случает возникает событие...

Перемещение указателя FILE* по файлу
Здравствуйте. какой есть способ перемещать указатель по файлу по байтово вместо fgetc()? те у меня есть указатель на начало...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru