Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
 Аватар для komand0
8 / 8 / 4
Регистрация: 20.06.2012
Сообщений: 225
1

Реализация перемещения окна при нажатой кнопке мышки

05.10.2012, 00:04. Показов 1525. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Создаю свое окно..
C++
1
2
hWndMyWin = CreateWindow(WCMyWin,"MyWin",WS_VISIBLE|WS_POPUP,
                    GetSystemMetrics(SM_CXSCREEN)/2-width/2,GetSystemMetrics(SM_CYSCREEN)/2-height/2,width,height,hWnd,NULL,hInst,NULL);
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
LRESULT CALLBACK WndProcMyWin(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam )
{
    switch(msg)
    {
    case WM_LBUTTONDOWN:
        {
            GetCursorPos(&cp);
            xfirst = cp.x;
            yfirst = cp.y; 
        }
        break;
 
    case WM_MOUSEMOVE:
        {
            // состояние кнопок мыши
            UINT fwKeys = wParam; 
            if(fwKeys & MK_LBUTTON)
            {
                POINT cp1;
                GetCursorPos(&cp1);
                RECT win;
                GetWindowRect(hWndMyWin,&win);
                GetClientRect(hWndMyWin,&r);
                //MessageBeep(-1);
                MoveWindow(hWndMyWin,r.right+(cp1.x-xfirst),r.bottom+(cp1.y-yfirst),width,height,true);
                //          xfirst = cp1.x;
                //          yfirst = cp1.y; 
                //              SetWindowPos(hWndMyWin,HWND_TOPMOST,win.left+(cp.x-xfirst),win.top+(cp.y-yfirst),width,height,SWP_DRAWFRAME);
            }
        }; return 0;
 
    case WM_SIZE:
    case WM_MOVE:
        InvalidateRect(hWnd, NULL, TRUE);
        return 0;
    case WM_PAINT:
        {
            HDC hdc = BeginPaint(hWnd, &ps);
            HRGN R1;
            R1=CreateRoundRectRgn(0,0,width,height,20,20); 
            HBRUSH br=(HBRUSH) CreateSolidBrush(RGB(155,255,160));
            SelectObject(hdc,br);
            FillRgn(hdc,R1,br);
            PaintRgn(hdc,R1);
//          PaintDesktop(hdc);
            SetWindowRgn(hWnd,R1,true);
            DeleteObject(br);
            SetBkMode(hdc,TRANSPARENT);
            SetTextColor(hdc,RGB(0,0,0));
            TextOut(hdc,10,10,(LPCSTR)height,10);
            EndPaint(hWnd,&ps);
        }
        return 0;
    default:
        return DefWindowProc (hWnd, msg, wParam, lParam);
    }
}
при зажатой LBUTTON окно перемещается, но все-же не так как хотелось-бы.
Может у кого-то найдется подходящий код, или идеи по этому поводу? Спасибо.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
05.10.2012, 00:04
Ответы с готовыми решениями:

Собтия при нажатой кнопке
Я немножко знаю Qt,а ситуация в следующем.У меня имеется окно программы, в нём кнопки,которые управляют устройством, при нажатии на кнопку...

Действия при нажатой кнопке
Мне нужно усуществить следующее условие если (клавиша зажата) то выполнять что то К примеру вызывается функция. Если...

Рисование при нажатой кнопке мыши
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin Canvas.MoveTo(X,Y);...

2
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33090 / 21387 / 8216
Регистрация: 22.10.2011
Сообщений: 36,714
Записей в блоге: 9
05.10.2012, 00:17 2
Само перетаскивание формы без заголовка:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
LRESULT CALLBACK WindowProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch(message)
    {
        case WM_DESTROY:
            PostQuitMessage(0);
            break;
        case WM_NCHITTEST: // Вот она, магия
        {
            LPARAM res = DefWindowProc(hWnd, message, wParam, lParam);
            if(res == HTCLIENT) res = HTCAPTION;
            return res;
        }
        default:
            return DefWindowProc(hWnd, message, wParam, lParam);
    }
    return 0;
}
, ну а дальше добавляй WM_PAINT...
1
 Аватар для komand0
8 / 8 / 4
Регистрация: 20.06.2012
Сообщений: 225
05.10.2012, 00:35  [ТС] 3
Супер.
Большое спасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
05.10.2012, 00:35
Помогаю со студенческими работами здесь

Событие MouseMove при нажатой кнопке
Здравствуйте уважаемые программисты. Вот есть такой код: procedure TForm1.Panel1MouseLeave(Sender: TObject); begin ...

Написать программу для семисегментного индикатора, чтобы при отжатой кнопке горел символ L, а при нажатой П
Atmega 16, AtmelStudio. Индикатор с общим анодом, кнопка на PC5, на PC6 неизвестное устройство,которое нельзя трогать. Я использовал...

Cобытие MouseMove при нажатой левой кнопке мыши
Сделал у PictureBox событие MouseMove. Если просто провести мышкой над PictureBox все срабатывает, но если нажать левой(собственно правой...

Прокрутка страницы при нажатой левой кнопке мыши
Есть такой код document.onmousedown = function(e) { e = e || window.event; down = 1; x = e.clientX; // начальное положение...

Зафиксировать цвет блока при нажатой радио-кнопке
Всем привет. Есть блок <label>. В блоке находится радиокнопка. При нажатии на блок активируется радиокнопка. Как изменить цвет блока...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему

Редактор формул (кликните на картинку в правом углу, чтобы закрыть)
Новые блоги и статьи
Неблокируемый стек в C++26: реализуем простой сборщик мусора
stackOverflow 02.03.2025
Многопоточные приложения требуют надежных и производительных структур данных, способных эффективно работать в условиях конкурентного доступа. Неблокируемые структуры данных представляют собой особый. . .
Шаблон REQ/REP в ZeroMQ: сверхбыстрый обмен сообщениями в C++ и Python
stackOverflow 02.03.2025
Построение высоконагруженных распределенных систем требует надежного и производительного механизма обмена сообщениями. ZeroMQ выделяется среди прочих решений своей невероятной скоростью работы и. . .
Нестандартные приемы работы с итераторами в C++
stackOverflow 02.03.2025
Итераторы - один из краеугольных камней C++, предоставляющий универсальный механизм обхода и манипуляции данными в контейнерах. Появившись как замена небезопасным указателям, они эволюционировали от. . .
Лексический анализ и регулярные выражения в C++26
stackOverflow 02.03.2025
Лексический анализ - ядро любого компилятора и инструмента обработки текста. Каждый программист сталкивается с задачами парсинга строк, обработки файлов конфигурации или анализа пользовательского. . .
Подробно о std::mdspan в C++23
stackOverflow 02.03.2025
Работа с многомерными массивами данных традиционно была одной из сложных задач в C++. Программистам приходилось создавать собственные абстракции или использовать сторонние библиотеки для эффективной. . .
Колмогоровская сложность в C++: Путь к совершенному коду
stackOverflow 02.03.2025
Абстрактная математическая теория Колмогорова стала мощным средством оценки и улучшения программного кода. Сложность алгоритма - не только в его вычислительной эффективности, но и в том, насколько. . .
Изменения в C# 14
stackOverflow 02.03.2025
Одно из самых значимых изменений в C# 14 - поддержка коллекционных выражений, которые позволяют создавать и инициализировать коллекции с помощью нового лаконичного синтаксиса. Это нововведение. . .
Разработка кроссплатформен­­­­ного мобильного приложения для iOS/Android на C++
bytestream 02.03.2025
C++ как язык программирования высокого уровня с прямым доступом к аппаратным ресурсам позволяет создавать приложения, работающие одинаково быстро как на iOS, так и на Android устройствах. Ни для кого. . .
Аутентификация/авторизация на Golang
bytestream 02.03.2025
Go предлагает множество возможностей для создания надежных систем аутентификации. Встроенные криптографические пакеты, высокая производительность и простота параллельной обработки запросов делают его. . .
Нововведения TypeScript 5.8
bytestream 02.03.2025
TypeScript 5. 8 приносит много возможностей и оптимизаций, которые существенно расширяют границы типобезопасного программирования на JavaScript. Эта версия включает ряд значительных улучшений в работе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru