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

Прилипание окна к курсору

27.04.2016, 16:25. Показов 2253. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, подскажите как можно реализовать функцию прилипания окна к курсору по двойному клику по заголовку?

Вот сама программа:
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
#include "stdafx.h"
#include <windows.h> // заголовочный файл, содержащий WINAPI
 
// Прототип функции обработки сообщений с пользовательским названием:
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
bool UserDoneDoubleClick = false; //флаг наличия двойного клика мышью
 
// Управляющая функция:
int WINAPI WinMain(HINSTANCE hInst, // дескриптор экземпляра приложения
    HINSTANCE hPrevInst, // не используем
    LPSTR lpCmdLine, // не используем
    int nCmdShow) // режим отображения окошка
{
    HWND FirstWindow; // создаём дескриптор будущего окна
    MSG msg; // создём экземпляр структуры MSG для обработки сообщений
    WNDCLASS wc; // Структура данных для пользовательского класса окна
    wc.style = CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS;// перерисовка всего окна при изменении высоты и ширины окна,4
    // а также перехват двойного клика
    wc.lpfnWndProc = WndProc; // указатель на главную оконную процедуру
    wc.lpszMenuName = NULL; // указатель на имя меню (у нас его нет)
    TCHAR szClassName[] = L"Мой класс"; // строка с именем класса
    wc.lpszClassName = szClassName; // указатель на строку с именем класса
    wc.hInstance = hInst; // указатель на строку, содержащую имя меню, применяемого для класса
    wc.cbWndExtra = NULL; // нет дополнительных байтов для экземпляра окна
    wc.cbClsExtra = NULL; // нет дополнительных байтов для класса окна
    wc.hIcon = LoadIcon(NULL, IDI_WINLOGO); // использование иконки по умолчанию
    wc.hCursor = LoadCursor(NULL, IDC_ARROW); // курсор мыши - стрелка
    wc.hbrBackground = (HBRUSH)COLOR_BACKGROUND; // для фона используется цвет по умолчанию
    if (!RegisterClass(&wc))
    {
        // в случае отсутствия регистрации класса:
        MessageBox(NULL, L"Не получилось зарегистрировать класс!", L"Ошибка", MB_OK);
        return NULL; // возвращаем, следовательно, выходим из WinMain
    }
 
    MessageBox(NULL, L"При двойном клике левой кнопкой миши по заголовку окно прилипнет к нему.", L"Правило", MB_OK); //выводим "Правила игры"
 
    // Функция, создающая окошко:
    FirstWindow = CreateWindow(
        szClassName, // имя класса
        L"Лабораторная работа 5", // имя окошка (то что сверху)
        WS_OVERLAPPEDWINDOW,  // перекрываемое окно
        CW_USEDEFAULT, // позиция окошка по оси х (система сама решает)
        NULL, // позиция окошка по оси у (т.к. CW_USEDEFAULT в х, то писать не нужно)
        400, // ширина окошка
        280, // высота окошка (раз дефолт в ширине, то писать не нужно)
        (HWND)NULL, // дескриптор родительского окна
        NULL, // дескриптор меню
        HINSTANCE(hInst), // дескриптор экземпляра приложения
        NULL); // ничего не передаём из WndProc
    if (!FirstWindow)
    {
        // в случае некорректного создания окошка (неверные параметры и тп):
        MessageBox(NULL, L"Не получилось создать окно!", L"Ошибка", MB_OK);
        return NULL;
    }
    ShowWindow(FirstWindow, nCmdShow); // отображаем окошко
    UpdateWindow(FirstWindow); // обновляем окошко
 
    while (GetMessage(&msg, NULL, NULL, NULL)) // извлекаем сообщения из очереди, посылаемые фу-циями, ОС
    {
        TranslateMessage(&msg); // интерпретируем сообщения
        DispatchMessage(&msg); // передаём сообщения обратно ОС
    }
    return msg.wParam; // возвращаем код выхода из приложения
}
 
LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
    int screen_width = 0;//переменная для записи величины ширины экрана
    int screen_height = 0;//переменная для записи величины высоты экрана
    screen_width = GetSystemMetrics(SM_CXSCREEN); //ф-ия возвращает ширину экрана
    screen_height = GetSystemMetrics(SM_CYSCREEN); //ф-ия возвращает высоту экрана
 
    switch (uMsg)
    {
    case WM_PAINT: // если нужно нарисовать, то:
        break;
 
    case WM_DESTROY: // если окошко закрылось, то:
        PostQuitMessage(NULL); // отправляем WinMain() сообщение WM_QUIT
        break;
    case WM_NCLBUTTONDBLCLK: //совершение двойного щелчка по неклиентской области
        UserDoneDoubleClick = true;
        break;
 
    default:
        return DefWindowProc(hWnd, uMsg, wParam, lParam);  // Для сообщений, с которыми мы не хотим связываться
    }
    return NULL; // возвращаем значение
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
27.04.2016, 16:25
Ответы с готовыми решениями:

Прилипание окна к курсору
Каким способом можно реализовать эффект «прилипания окна к курсору» при попадании и последующем щелчке кнопки мыши по какой-либо из полос...

Позиционирование окна по курсору
Есть задание. Создать окно размером в четверть площади экрана. После двойного щелчка мыши окно перемещается так, что его центр...

Прилипание окна к краям дисплея
Всем привет, скажите как сделать чтобы форма прилипала к к краям дисплея при перетаскивание?

2
 Аватар для rao
903 / 424 / 159
Регистрация: 02.04.2014
Сообщений: 1,206
27.04.2016, 18:54
Что значит "прилипание"? Курсор же постоянно двигается. Это же просто перетаскивание окна получится. Добавь свой обработчик WM_MOUSEMOVE и смотри в нем, если UserDoneDoubleClick == true, то делай MoveWindow() на координаты мыши. Или я не так понял?
0
0 / 0 / 0
Регистрация: 13.12.2014
Сообщений: 14
27.04.2016, 18:56  [ТС]
Нужно, чтобы был эффект «прилипания
окна к курсору» при его попадании и последующем двойном щелчке кнопки мыши
по заголовку окна. «Отлипание окна от курсора» производится повторным двойным
щелчком кнопки мыши по заголовку окна.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
27.04.2016, 18:56
Помогаю со студенческими работами здесь

Прилипание окна к мыши при наведении
Доброго дня суток! =) подскажите пожалуйста с задачкой! я даже не знаю с чего начать! Разработать программу, которая демонстрирует...

Центровка по курсору
Здравствуйте, у меня есть gui приложение на tkintere. Не подскажете как можно центровать приложение по курсору? Условно есть такой код ...

Привязка к курсору
Помогите плиз!!!! 1) Необходимо привязать к курсору (фото во вложении). 2) Рисовать можно только по вертикали горизонтали, и под углом...

Прикрепление кнопки к курсору
Здравствуйте! Есть модалка, есть ли возможность сделать так чтобы после закрытия модального окна к курсору прикреплялась кнопка?

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


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru