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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
OffyGhost
7 / 7 / 1
Регистрация: 04.03.2010
Сообщений: 107
#1

Убегание окна от курсора - C++

20.03.2010, 16:31. Просмотров 627. Ответов 1
Метки нет (Все метки)

Помогите написать)
такая классическая задачка в общем

пока реализовано само окно и кривое определние координат курсора

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
#include <windows.h>
 
LONG WINAPI WndProc(HWND, UINT, WPARAM,LPARAM);
 
int WINAPI WinMain(HINSTANCE hInstance,
 HINSTANCE hPrevInstance,
 LPSTR lpCmdLine,
 
 int nCmdShow)
{
 HWND hwnd;
 MSG msg;
 WNDCLASS w;
 memset(&w,0,sizeof(WNDCLASS));
 w.style = CS_HREDRAW | CS_VREDRAW;
 w.lpfnWndProc = WndProc;
 w.hInstance = hInstance;
 w.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
 w.lpszClassName = "My Class";
 RegisterClass(&w);
 hwnd = CreateWindow("My Class", "Lab6", WS_OVERLAPPEDWINDOW,
 300, 200, 200, 180, NULL, NULL, hInstance, NULL);
 ShowWindow(hwnd,nCmdShow);
 UpdateWindow(hwnd);
 while(GetMessage(&msg,NULL,0,0))
 {
 TranslateMessage(&msg);
 DispatchMessage(&msg);
 }
 return msg.wParam;
}
 
LONG WINAPI WndProc(HWND hwnd, UINT Message, WPARAM wparam, LPARAM lparam)
{
 switch (Message)
 {
 case WM_DESTROY: 
 PostQuitMessage(0);
 break;
 case WM_MOUSEMOVE:
        int x,y;
        x=LOWORD(lparam);
        y=HIWORD(lparam);
        char u[10];
        _itoa_s(x,u,10,10);
        if(u[1]==0)
            u[1]=' ';
        if(u[2]==0)
            u[2]=' ';
        _itoa_s(y,u+4,6,6);
        u[3]='x';
        SetWindowText(hwnd,u);
        break;
 default:
 return DefWindowProc(hwnd, Message, wparam, lparam);
 }
 return 0;
}
Добавлено через 2 часа 19 минут
Окно от курсора убегает так:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 case WM_MOUSEMOVE:
        int x,y;
        x=LOWORD(lparam);
        y=HIWORD(lparam);
        char u[10];
        _itoa_s(x,u,10,10);
        if(u[1]==0)
            u[1]=' ';
        if(u[2]==0)
            u[2]=' ';
        _itoa_s(y,u+4,6,6);
        u[3]='x';
        SetWindowText(hwnd,u);
MoveWindow(hwnd,120,100,200,180,TRUE);
        break;
Пэчаль в том, что он двигает окно лишь в заданные координаты x и y
как сделать, чтобы эти x y были случайными?)

Добавлено через 5 минут
C++
1
MoveWindow(hwnd, rand() % GetSystemMetrics(SM_CXSCREEN) - 200, rand() % GetSystemMetrics(SM_CYSCREEN) - 180, 200, 180, TRUE);
Надо было просто это добавить в case WM_MOUSEMOVE:

Теперь осталось только реализовать то, что при двойном щелчке убегание прекращалось))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.03.2010, 16:31
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Убегание окна от курсора (C++):

Движение курсора мыши должно плавно менять цвет фона окна. - C++
точнее 2 1) Движение курсора мыши должно плавно менять цвет фона окна. Левый верхний угол - красный цвет фона. Правый верхний -...

Не вижу окна с кодом (нет окна редактирования): найти причины странного поведения программы - C++
Создаю проект, а кроме синего экрана ничего больше нет, не знаю, что делать. Прочла здесь же про образователь решений(типа должен быть...

Почему авторы диалоговых окон стараются сделать свои окна максимально похожими на стандартные окна? - C++
Начал рассматривать множество программ на С++ и заметил, что программисты стараются сделать почти все диалоговые окна максимально похожими...

поиск Handle окна, зная ControlId окна - C++
вопрос по сабжу

Убегание окна от курсора - C++ WinAPI
В виду того, что тему создал не в том разделе, перенес сюда собственно прошу помочь с моментами _1_ и _2_ _1_ если курсор мышки...

"Убегание" всплывающего окна при масштабировании - JavaScript
Добрый вечер! Прошу Вашей помощи, т.к. весь день просидела за решением данной проблемы, но так и не смогла разобраться, а решить нужно...

1
OffyGhost
7 / 7 / 1
Регистрация: 04.03.2010
Сообщений: 107
24.03.2010, 17:57  [ТС] #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
#include <windows.h>
#include <cstdlib>
#include <ctime>
 
 
LONG WINAPI WndProc(HWND, UINT, WPARAM,LPARAM);
 
int WINAPI WinMain(HINSTANCE hInstance,
 HINSTANCE hPrevInstance,
 LPSTR lpCmdLine,
 
 int nCmdShow)
{
srand(time(0));
 HWND hwnd;
 MSG msg;
 WNDCLASS w;
 memset(&w,0,sizeof(WNDCLASS));
 w.style = CS_HREDRAW | CS_VREDRAW;
 w.lpfnWndProc = WndProc;
 w.hInstance = hInstance;
 w.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
 w.lpszClassName = "My Class";
 RegisterClass(&w);
 hwnd = CreateWindow("My Class", "Lab6", WS_OVERLAPPEDWINDOW,
 300, 200, 200, 180, NULL, NULL, hInstance, NULL);
 ShowWindow(hwnd,nCmdShow);
 UpdateWindow(hwnd);
 while(GetMessage(&msg,NULL,0,0))
 {
 TranslateMessage(&msg);
 DispatchMessage(&msg);
 }
 return msg.wParam;
}
 
LONG WINAPI WndProc(HWND hwnd, UINT Message, WPARAM wparam, LPARAM lparam)
{
 switch (Message)
 {
 case WM_DESTROY: 
 PostQuitMessage(0);
 break;
case WM_MOUSEMOVE:
int x,y,z;
        x=LOWORD(lparam);
        y=HIWORD(lparam);
        z=0;
        char u[10];
        _itoa_s(x,u,10,10);
        if(u[1]==0)
            u[1]=' ';
        if(u[2]==0)
            u[2]=' ';
        _itoa_s(y,u+4,6,6);
        u[3]='x';
         SetWindowText(hwnd,u);
        MoveWindow(hwnd, rand() % GetSystemMetrics(SM_CXSCREEN) - 200, rand() % GetSystemMetrics(SM_CYSCREEN) - 180, 200, 180, TRUE);
        break;
 
case WM_LBUTTONDBLCLK:
 
    break;
 default:
 return DefWindowProc(hwnd, Message, wparam, lparam);
 }
 return 0;
}
Добавлено через 38 минут
то есть у меня

C++
1
2
if (z==0)
MoveWindow(hwnd, rand() % GetSystemMetrics(SM_CXSCREEN) - 200, rand() % GetSystemMetrics(SM_CYSCREEN) - 180, 200, 180, TRUE);
но

C++
1
2
3
case WM_LBUTTONDBLCLK:
    z=1;
break;
не передает значения, чтобы цикл завершился

Добавлено через 11 минут
программа теперь рабоатает, сам разобрался)
вся проблема в том, что я неправильно писал WM_LBUTTONDBLCLK (это двойной клик по клиенской области), а надо WM_NCLBUTTONDBLCLK (это по неклиентской, по заголовку)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
case WM_MOUSEMOVE:
int x,y;
        x=LOWORD(lparam);
        y=HIWORD(lparam);
        char u[10];
        _itoa_s(x,u,10,10);
        if(u[1]==0)
            u[1]=' ';
        if(u[2]==0)
            u[2]=' ';
        _itoa_s(y,u+4,6,6);
        u[3]='x';
         SetWindowText(hwnd,u);
         if (UserDoneDoubleClick == false)
        MoveWindow(hwnd, rand() % GetSystemMetrics(SM_CXSCREEN) - 200, rand() % GetSystemMetrics(SM_CYSCREEN) - 180, 200, 180, TRUE);
        break;
 
case WM_NCLBUTTONDBLCLK:
UserDoneDoubleClick = true;
break;
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.03.2010, 17:57
Привет! Вот еще темы с ответами:

Как сделать анимацию прозрачности окна при наведении курсора мыши и его ухода с окна - C# WPF
Я сделал так (из класса убрал всё лишнее, только по теме оставил): using System; using System.Diagnostics; using System.Windows; ...

Координаты курсора относительно окна - jQuery
Просто покажите мне, как сделать так, чтобы на экране были показаны координаты курсора. Я себе это представляю примерно так &lt;html&gt; ...

Координаты курсора мыши относительно окна - C++/CLI WinForms
использую вот такую штучку в backgroundworker-е: for (;;) { Point point1 = Point(Cursor-&gt;Position.X, Cursor-&gt;Position.Y); ...

Координаты курсора вместо имени окна - C++ WinAPI
Как сделать, чтобы если водить курсором внутри окна приложения, то название окна менялось показывая координаты курсора?


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru