Форум программистов, компьютерный форум, киберфорум
C++: WinAPI
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.54/13: Рейтинг темы: голосов - 13, средняя оценка - 4.54
0 / 0 / 0
Регистрация: 23.08.2015
Сообщений: 91
1

Убегающая кнопка

05.03.2016, 16:29. Просмотров 2358. Ответов 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
#include <windows.h>
#include "resource.h"
#include <tchar.h>
 
TCHAR loWndClass[] = _TEXT("First Project");
LRESULT CALLBACK WndProc(HWND hWnd, UINT uMessage, WPARAM wParam, LPARAM lParam);
INT_PTR CALLBACK DialogProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
 
INT WINAPI WinMain(HINSTANCE hInstance,
                   HINSTANCE hPrevInstance,
                   LPSTR lpCmdLine,
                   int nCmdShow)
{
    HWND hWndDlg = CreateDialog(hInstance, MAKEINTRESOURCE(IDD_DIALOG1), NULL, DialogProc);
    ShowWindow(hWndDlg, SW_NORMAL);
    MSG msg;
    while (GetMessage(&msg, NULL, 0, 0)) {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
}
 
 
INT_PTR CALLBACK DialogProc(HWND hWndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    switch (uMsg)
    {
    case WM_CLOSE:
        DestroyWindow(hWndDlg);
        PostQuitMessage(0);
        return TRUE;
    case WM_MOUSEMOVE:
        {
            int x=rand()%500;
            int y=rand()%500;
 
            HWND hStatic = GetDlgItem(hWndDlg, IDC_STATIC1);
 
            RECT rect;
            GetWindowRect(hStatic, &rect);
 
            POINT hPoint;
            GetCursorPos(&hPoint);
 
            if (hPoint.x > rect.left && hPoint.x < rect.right && hPoint.y > rect.top && hPoint.y < rect.bottom)
            {
                GetWindowRect(hWndDlg, &rect);
                while (x<=rect.left&&x>=rect.right)
                    x=rand()%500;
                while (y<=rect.top&&y>=rect.bottom)
                    y=rand()%500;
                MoveWindow (hStatic,x,y,30,30,true);
            }
            else
                SetWindowText(hWndDlg, _TEXT("Out of text"));
        }
        return TRUE;
    }
    return FALSE;
}
У меня есть статик текст, когда я навожу мышь на него, он должен убегать в разные стороны, но не за пределы окна, у меня он убегает, но за пределы, не могу решить эту проблему.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.03.2016, 16:29
Ответы с готовыми решениями:

Кнопка BS_OWNERDRAW или кнопка со своей картинкой
Есть код, с помощью которого можно менять картинку при нажатии, при фокусе { // ownerdraw...

Убегающая от курсора кнопка
Помогите реализовать программу типа &quot;Вам нравиться ваша зарплата?&quot; нужно сделать чтобы при...

Убегающая кнопка
Всем доброго времени суток нужна ваша помощь. Вот задание: Реализовать кнопку, чувственную к...

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

2
100 / 38 / 20
Регистрация: 27.02.2016
Сообщений: 135
05.03.2016, 16:58 2
C++
1
2
3
4
while (x<=rect.left || x>=rect.right) // или левее нужной области, или правее.
                    x=rand()%500;
                while (y<=rect.top || y>=rect.bottom) // или выше, или ниже.
                    y=rand()%500;
А если надо, чтоб контрол помещался в окне целиком, нужно учитывать его размер:

C++
1
2
3
4
while (x<=rect.left || x+30>=rect.right)
                    x=rand()%500;
                while (y<=rect.top || y+30>=rect.bottom)
                    y=rand()%500;
0
0 / 0 / 1
Регистрация: 28.06.2016
Сообщений: 1
04.02.2018, 20:26 3
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
// полностью рабочий код с ограничением окна
 
#include"iostream"
#include <windows.h> 
#include "resource.h" 
#include <vector>
#include <time.h>
using namespace std;
namespace glb {
    HWND  hStatic1, hWinPoint;
    HINSTANCE hInst;
    INT LEFT = 0, TOP = 0, WIDTH = 10, HEIGHT = 10, X, Y, minSize = 10, i = 0, xRight, yRight;
    TCHAR info[128], infoRight[128], agrigate[128];
    std::vector<HWND> myVector;
}
 
BOOL CALLBACK DlgProc(HWND, UINT, WPARAM, LPARAM);
 
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInst, LPSTR lpszCmdLine, int nCmdShow)
{
    srand(time(NULL));
    return DialogBox(hInstance, MAKEINTRESOURCE(IDD_DIALOG1), NULL, DlgProc);
 
 
    /*HWND  hStatic1;
    glb::hStatic1 = CreateWindowEx(0, TEXT("STATIC"), 0, WS_CHILD | WS_VISIBLE | WS_BORDER | SS_CENTER |
        WS_EX_CLIENTEDGE, glb::LEFT, glb::TOP, glb::WIDTH, glb::HEIGHT, hWnd, 0, glb::hInst, 0);*/
 
 
}
 
BOOL CALLBACK DlgProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
 
    wchar_t tmp[150];
    static UINT x = 0;
    static UINT y = 0;
    switch (message)
    {
    case WM_CLOSE:
        EndDialog(hWnd, 0);
        return TRUE;
 
    case WM_LBUTTONDOWN:
        glb::LEFT = LOWORD(lParam);
        glb::TOP = HIWORD(lParam);
        return TRUE;
 
    case WM_LBUTTONUP:
        glb::X = LOWORD(lParam);
        glb::Y = HIWORD(lParam);
 
        if (glb::X < glb::LEFT) {
            glb::WIDTH = glb::LEFT - glb::X;
            glb::LEFT = glb::X;
        }
        else {
            glb::WIDTH = glb::X - glb::LEFT;
        }
        if (glb::Y < glb::TOP) {
            glb::HEIGHT = glb::TOP - glb::Y;
            glb::TOP = glb::Y;
        }
        else {
            glb::HEIGHT = glb::Y - glb::TOP;
        }
        if (glb::WIDTH < glb::minSize || glb::HEIGHT < glb::minSize) {
            SetWindowText(hWnd, TEXT("Size of a static window cannot be less than 10x10 pixels!"));
            return TRUE;
        }
        else {
            glb::hStatic1 = CreateWindowEx(0, TEXT("STATIC"), 0, WS_CHILD | WS_VISIBLE | WS_BORDER | SS_CENTER |
                WS_EX_CLIENTEDGE, glb::LEFT, glb::TOP, glb::WIDTH, glb::HEIGHT, hWnd, 0, glb::hInst, 0);
            glb::i++;
            wsprintf(glb::info, TEXT("%d"), glb::i);
            SetWindowText(glb::hStatic1, glb::info);
 
            glb::myVector.push_back(glb::hStatic1);
            return TRUE;
        }
 
    
    case WM_MOUSEMOVE:
        
        POINT leftDblClick;
        leftDblClick.x = LOWORD(lParam);
        leftDblClick.y = HIWORD(lParam);
        glb::hWinPoint = ChildWindowFromPoint(hWnd, leftDblClick);
        if (glb::hWinPoint != NULL  &&  glb::hWinPoint != hWnd) {
            DestroyWindow(glb::hWinPoint);
            while (1)
            {
 
            
            x = rand() % 500;
            y = rand() % 500;
            if ((x + glb::WIDTH) < 600/*ширина окна*/) {
                if ((y + glb::HEIGHT) < 350/*высота окна*/)
                {
                    break;
                }
            }
            }
            glb::hStatic1 = CreateWindowEx(0, TEXT("STATIC"), 0, WS_CHILD | WS_VISIBLE | WS_BORDER | SS_CENTER |
                WS_EX_CLIENTEDGE, x, y, glb::WIDTH, glb::HEIGHT, hWnd, 0, glb::hInst, 0);
        /*  for (size_t j = 0; j < glb::myVector.size(); j++) {
                if (glb::hWinPoint == glb::myVector[j])
                    glb::myVector.erase(glb::myVector.begin() + j);
            }*/
        }
        return TRUE;
        
 
    //case WM_LBUTTONDBLCLK:
    //  POINT leftDblClick;
    //  leftDblClick.x = LOWORD(lParam);
    //  leftDblClick.y = HIWORD(lParam);
    //  glb::hWinPoint = ChildWindowFromPoint(hWnd, leftDblClick);
    //  if (glb::hWinPoint != NULL  &&  glb::hWinPoint != hWnd) {
    //      DestroyWindow(glb::hWinPoint);
    //      
    //      for (size_t j = 0; j < glb::myVector.size(); j++) {
    //          if (glb::hWinPoint == glb::myVector[j])
    //              glb::myVector.erase(glb::myVector.begin() + j);
    //      }
    //  }
    //  return TRUE;
    }
    return FALSE;
}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.02.2018, 20:26

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Убегающая кнопка
Доброго дня суток, форумчане! у меня такой вопрос, недавно начал работать с android eclipse,...

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

Убегающая кнопка
Помогите сделать оконное приложение. При наведении мышкой на кнопку она появляется в другом месте.

Убегающая кнопка
Суть задачи при наведении курсора на кнопку она должна убегать. Нужно сделать чтобы кнопка не...


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

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

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