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

Эллипс, который увеличивается в размерах, а по прошествии 30 секунд - уменьшается

10.01.2012, 10:50. Показов 9929. Ответов 21
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Написать программу :эллипс, который увеличивается в размерах а по прошествии 30 секунд уменьшается

Добавлено через 10 часов 12 минут
помогите
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.01.2012, 10:50
Ответы с готовыми решениями:

Разместить на форме кнопку, при каждом нажатии на которую, форма уменьшается в размерах
Разместить на форме кнопку, при каждом нажатии на которую пусть форма уменьшается в размерах и по...

Определить, что окно уменьшается/увеличивается
У меня тут возник один возможно глупый вопрос. Как сказать компьютеру, что окошко программы именно...

Определить что число уменьшается или увеличивается
Вот в чем проблема, есть точное число равное 100 которое время от времени меняется в отрицательную...

Прозрачность изображения увеличивается с помощью TrackBar, но не уменьшается
Есть pictureBox, в котором нужно изменить прозрачность с помощью trackBar'а. Программа работает, но...

21
Заблокирован
Автор FAQ
10.01.2012, 18:25 2
Цитата Сообщение от Леночка11 Посмотреть сообщение
Написать программу :эллипс, который увеличивается в размерах а по прошествии 30 секунд уменьшается
Добавлено через 10 часов 12 минут
помогите
- если WinAPI смотрите сюда,
Как рисовать элементарные геометрические фигуры?
Фунция Ellipse вам в помощь
C
1
2
SelectObject(hDC,hPen);
return Ellipse(hDC,BGN.X, BGN.Y, END.X, END.Y);
Можно и с использованием OpenGL сделать, но по моему мнению вам такой вариант будет сложней.
Ко времени проще всего привязаться с помощью Функции diftime
0
0 / 0 / 0
Регистрация: 10.01.2012
Сообщений: 11
11.01.2012, 13:44  [ТС] 3
не не не мне надо сделать Используя библиотеку классов MFC. и что то с функцией Таймер

Добавлено через 16 часов 20 минут
помогите !
0
Модератор
Эксперт С++
13507 / 10757 / 6412
Регистрация: 18.12.2011
Сообщений: 28,714
11.01.2012, 15:09 4
Идея такая:
Заводите статические переменные для ширины we и высоты he эллипса,
скорости увеличения размеров dx,
а также для текущего времени T и приращения времени за 1 такт dt.
static int we=10,he=20,dx=2,T=0,dt=25;
Далее надо запустить таймер
(по нажатию кнопки, либо сразу по открытию окна) командой
SetTimer(hwnd,1,dt,NULL);
Теперь каждые 25 мсекунд в обработчик сообщений будет приходить сообщение WM_TIMER:
C++
1
2
3
4
5
6
7
8
CASE WM_TIMER:
T+=dt; // вычисляем время
we+=dx; // изменяем размеры
he+=dx;
if(T>=30000) // если >30 сек. то приращение размера делаем отрицательным
    dx=-abs(dx);
InvalidateRect(hwnd,NULL,TRUE); // даем команду на перерисовку всего окна
return 1;
В сообщении WM_PAINT рисуем эллипс с размерами we,he
1
0 / 0 / 0
Регистрация: 10.01.2012
Сообщений: 11
11.01.2012, 15:23  [ТС] 5
zss2, а можно полный код программы от начала и до конца просто у меня нету сейчас компилятора , мне надо просто показать преподавателю код, программы,) если можно то огромное вам спасибо.

Добавлено через 1 минуту
zss2, только сразу при открытии и нажатии кнопки эллипс начинал увеличиваться и уменьшаться .
0
Модератор
Эксперт С++
13507 / 10757 / 6412
Регистрация: 18.12.2011
Сообщений: 28,714
11.01.2012, 15:40 6
Я не пользуюсь MFC.
А на WINAPI будет так:
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
int WINAPI ParamProc(HWND hwnd,int cmd,WPARAM wp,LPARAM lp)
{
   static int we=10,he=20,dx=2,T=0,dt=25;
   switch(cmd)
   {
    case WM_INITDIALOG:
        SetTimer(hwnd,1,dt,NULL);
        return 1;
    CASE WM_TIMER:         T+=dt; // вычисляем время         we+=dx; // изменяем размеры         he+=dx;         if(T>=30000) // если >30 сек. то приращение размера делаем отрицательным            dx=-abs(dx);         InvalidateRect(hwnd,NULL,TRUE); // даем команду на перерисовку всего окна         return 1;
    case WM_PAINT:
    {
        PAINTSTRUCT ps;
        HDC hdc=BeginPaint(hwnd,&ps);
        RECT rc;GetClientRect(hwnd,&rc);
        Ellipse(hdc,rc.right/2-we/2,rc.bottom/2-he/2,rc.right/2+we/2,rc.bottom/2+he/2);         EndPaint(hwnd,&ps);
        return 1;
    }
    case WM_CLOSE:
      EndDialog(hwnd,1);
     return 1;
   }
  return 0;
 
}
iint WINAPI WinMain(HINSTANCE hi,HINSTANCE, LPSTR,int)
{
    return DialogBox(hi,"ИМЯ_ДИАЛОГА_СДЕЛАННОГО В РЕДАКТОРЕ РЕСУРСОВ",0,(DLGPROC)ParamProc);
}
1
Заблокирован
Автор FAQ
11.01.2012, 17:31 7
Цитата Сообщение от zss2 Посмотреть сообщение
Теперь каждые 25 мсекунд в обработчик сообщений будет приходить сообщение WM_TIMER:
zss2, а обратно элипс вернуть???

Цитата Сообщение от Леночка11 Посмотреть сообщение
не не не мне надо сделать Используя библиотеку классов MFC. и что то с функцией Таймер
Добавлено через 16 часов 20 минут
помогите !
- см скрин и аттач, это???
Миниатюры
Эллипс, который увеличивается в размерах, а по прошествии 30 секунд - уменьшается  
Вложения
Тип файла: rar MFCEllipseEx.exe.rar (4.5 Кб, 140 просмотров)
0
Заблокирован
Автор FAQ
11.01.2012, 17:36 8
Думаю очевидно, что поле для ввода создано для регулиирования периода пульсации элипса, при этом скорость перерисовки напрямую зависит ещё от аппаратной мощности ЭВМ. Проект делал на слабой машине, поэтому для 250 мсек, элипс пульсировал хорошо. Если комп мощней, период нужно увеличить. Поле для ввода активно только когда запускаем элепс, т.е во время пульсаций нужно сначала процесс остановить кнопочкой - элепс исчезнет, поле откроется, вбили цифры и снова кнопочку кликнули ииии вуаля...Конечно же размеры окна можно менять, а также сворачивать максимизировать - вобщем полный фарш

Не по теме:

PS:Пошёл дальше курить мантры по MFC, омм манэ падмэ хум оммм...:D

0
0 / 0 / 0
Регистрация: 10.01.2012
Сообщений: 11
12.01.2012, 15:58  [ТС] 9
а может кто-нибудь мне сделать эту программу но именно в Вижуал Бейсике, просто мне в ней надо делать(
0
-=ЮрА=-
12.01.2012, 16:10
  #10

Не по теме:

Цитата Сообщение от Леночка11 Посмотреть сообщение
а может кто-нибудь мне сделать эту программу но именно в Вижуал Бейсике, просто мне в ней надо делать(
- попросите модератора перенести ваш топик в раздел VisualBasic врядли кто-то пишуший в нём будет искать данную задачу в разделе С/С++...

0
0 / 0 / 0
Регистрация: 10.01.2012
Сообщений: 11
12.01.2012, 21:14  [ТС] 11
уважаемый модератор перенести мою тему в раздел VisualBasic

Добавлено через 4 часа 52 минуты
помогите ребятки .
0
Заблокирован
Автор FAQ
12.01.2012, 22:14 12
Цитата Сообщение от Леночка11 Посмотреть сообщение
помогите ребятки .
Леночка11, не могу уже смотреть на ваши мучения

Ниже проект MFC Dialog based приложения. Написано там в С, но при желании транслировать в VisualBasic думаю знающему человеку труда не составит. Как вариант попросите кого-нибудь перевести на бейсик...
Вложения
Тип файла: rar MFCEllipseEx_project.rar (12.2 Кб, 382 просмотров)
2
0 / 0 / 0
Регистрация: 10.01.2012
Сообщений: 11
12.01.2012, 22:18  [ТС] 13
мне нужен код той программы как его найти

Добавлено через 1 минуту
у меня под рукой нету Вижуал Бейсик и не будет ( если не трудно то достаньте код программы(
0
Заблокирован
Автор FAQ
12.01.2012, 22:20 14
Цитата Сообщение от Леночка11 Посмотреть сообщение
мне нужен код той программы как его найти
- Леночка11, я проект сейчас выложил - там исходный код а не скомпилированное приложение, архив с поста 12 смотрели?
1
0 / 0 / 0
Регистрация: 10.01.2012
Сообщений: 11
12.01.2012, 23:41  [ТС] 15
что то я заблудилась вся .( не дадите ссылочку ?
0
Заблокирован
Автор FAQ
13.01.2012, 01:12 16
Цитата Сообщение от Леночка11 Посмотреть сообщение
то то я заблудилась вся .( не дадите ссылочку ?
вот ссылка на архив проекта
https://www.cyberforum.ru/atta... 1326392023
Миниатюры
Эллипс, который увеличивается в размерах, а по прошествии 30 секунд - уменьшается  
1
0 / 0 / 0
Регистрация: 10.01.2012
Сообщений: 11
13.01.2012, 20:32  [ТС] 17
мне нужно что бы выглядело вот так :
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 <afxwin.h>
#include "resource.h"
class CMyWindow:public CFrameWnd
{
private: DECLARE_MESSAGE_MAP();
         afx_msg void OnLButtonDown(UINT,CPoint point);
         afx_msg void OnRButtonDown(UINT,CPoint point);
         afx_msg void OnMButtonDown(UINT,CPoint point);
 
public:
    CMyWindow()
    {
        Create(NULL,L"Акно Адин",WS_OVERLAPPEDWINDOW);
    };
};
BEGIN_MESSAGE_MAP(CMyWindow,CFrameWnd)
ON_WM_LBUTTONDOWN()
ON_WM_RBUTTONDOWN()
ON_WM_MBUTTONDOWN()
END_MESSAGE_MAP()
 
void CMyWindow::OnMButtonDown(UINT,CPoint point)
{
    CClientDC screen(this);
    CBitmap MyBitmap;
    MyBitmap.LoadBitmap(IDB_BITMAP1);
    CBrush MyBrush3(&MyBitmap);
    screen.SelectObject(&MyBrush3);
    screen.Ellipse(point.x-50,point.y-50,point.x+50,point.y+50);
};
 
void CMyWindow::OnRButtonDown(UINT,CPoint point)
{
    CClientDC screen(this);
    CBrush mybrush2(HS_HORIZONTAL,RGB(255,255,0));
    screen.SelectObject(&mybrush2);
    screen.Rectangle(point.x-100,point.y-50,point.x+100,point.y+50);
};
 
void CMyWindow::OnLButtonDown(UINT,CPoint point)
{
    CClientDC screen(this);
    CBrush mybrush1(RGB(255,0,0));
    screen.SelectObject(&mybrush1);
    screen.Ellipse(point.x-100,point.y-50,point.x+100,point.y+50);
};
 
class CMyApp:public CWinApp
{
public:
    virtual BOOL InitInstance()
    {
        m_pMainWnd=new CMyWindow();
            m_pMainWnd->ShowWindow(SW_SHOWMAXIMIZED);
            return TRUE;
    };
};
CMyApp theApp;
 Комментарий модератора 
Используйте теги форматирования кода!


но только моя программа (

Добавлено через 12 секунд
помогите ((((

Добавлено через 52 секунды
структурпрограммы должна быть такой же (а

Добавлено через 5 часов 42 минуты
( помогите
0
Модератор
Эксперт С++
13507 / 10757 / 6412
Регистрация: 18.12.2011
Сообщений: 28,714
13.01.2012, 21:10 18
Должно выглядеть примерно так:
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
BEGIN_MESSAGE_MAP(CChildView, CWnd)
    ON_WM_PAINT()
    ON_WM_TIMER()
    ON_WM_CREATE()
END_MESSAGE_MAP()
 
 
 
// обработчики сообщений CChildView
 
 
 
BOOL CChildView::PreCreateWindow(CREATESTRUCT& cs) 
{
    if (!CWnd::PreCreateWindow(cs))
        return FALSE;
 
    cs.dwExStyle |= WS_EX_CLIENTEDGE;
    cs.style &= ~WS_BORDER;
    cs.lpszClass = AfxRegisterWndClass(CS_HREDRAW|CS_VREDRAW|CS_DBLCLKS, 
        ::LoadCursor(NULL, IDC_ARROW), reinterpret_cast<HBRUSH>(COLOR_WINDOW+1), NULL);
 
    return TRUE;
}
//----------Глобальные переменные --------------------
static int we=10,he=20,dx=2,T=0,dt=25;
//--------- Сообщение WM_CREATE ----------
void CChildView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
    this->SetTimer(1,T,NULL);
}
//--------- Сообщение WM_TIMER ------------
void CChildView::OnTimer() 
{
    we+=dx;he+=dx;T+=dt;
    if(T>30)
        dx=-abs(dx);
    this->InvalidateRect(NULL,true);
}
void CChildView::OnPaint() 
{
    CPaintDC dc(this); // контекст устройства для рисования
    RECT rc;this->GetClientRect(&rc);
    dc.Ellipse(rc.right/2-we/2,rc.bottom/2-he/2,rc.right/2+we/2,rc.bottom/2+he/2);
}
0
0 / 0 / 0
Регистрация: 10.01.2012
Сообщений: 11
13.01.2012, 21:40  [ТС] 19
вот что то такое )

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
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
// MFCEllipseExDlg.cpp : implementation file
//
 
#include "stdafx.h"
#include "MFCEllipseEx.h"
#include "MFCEllipseExDlg.h"
 
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
 
bool isTimer = false;
 
/////////////////////////////////////////////////////////////////////////////
// CMFCEllipseExDlg dialog
 
CMFCEllipseExDlg::CMFCEllipseExDlg(CWnd* pParent /*=NULL*/)
    : CDialog(CMFCEllipseExDlg::IDD, pParent)
{
    //{{AFX_DATA_INIT(CMFCEllipseExDlg)
    m_timeSet = 0;
    //}}AFX_DATA_INIT
    // Note that LoadIcon does not require a subsequent DestroyIcon in Win32
    m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
 
void CMFCEllipseExDlg::DoDataExchange(CDataExchange* pDX)
{
    CDialog::DoDataExchange(pDX);
    //{{AFX_DATA_MAP(CMFCEllipseExDlg)
    DDX_Control(pDX, IDC_EDIT1, m_editctrl);
    DDX_Text(pDX, IDC_EDIT1, m_timeSet);
    //}}AFX_DATA_MAP
}
 
BEGIN_MESSAGE_MAP(CMFCEllipseExDlg, CDialog)
    //{{AFX_MSG_MAP(CMFCEllipseExDlg)
    ON_WM_PAINT()
    ON_WM_QUERYDRAGICON()
    ON_WM_TIMER()
    //}}AFX_MSG_MAP
END_MESSAGE_MAP()
 
/////////////////////////////////////////////////////////////////////////////
// CMFCEllipseExDlg message handlers
 
BOOL CMFCEllipseExDlg::OnInitDialog()
{
    CDialog::OnInitDialog();
 
    // Set the icon for this dialog.  The framework does this automatically
    //  when the application's main window is not a dialog
    SetIcon(m_hIcon, TRUE);         // Set big icon
    SetIcon(m_hIcon, FALSE);        // Set small icon
    
    // TODO: Add extra initialization here
    m_timeSet = 250;
    UpdateData(false);
    return TRUE;  // return TRUE  unless you set the focus to a control
}
 
// If you add a minimize button to your dialog, you will need the code below
//  to draw the icon.  For MFC applications using the document/view model,
//  this is automatically done for you by the framework.
 
void CMFCEllipseExDlg::OnPaint() 
{
    if (IsIconic())
    {
        CPaintDC dc(this); // device context for painting
 
        SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
 
        // Center icon in client rectangle
        int cxIcon = GetSystemMetrics(SM_CXICON);
        int cyIcon = GetSystemMetrics(SM_CYICON);
        CRect rect;
        GetClientRect(&rect);
        int x = (rect.Width() - cxIcon + 1) / 2;
        int y = (rect.Height() - cyIcon + 1) / 2;
 
        // Draw the icon
        dc.DrawIcon(x, y, m_hIcon);
    }
    else
    {
        CDialog::OnPaint();
    }
}
 
// The system calls this to obtain the cursor to display while the user drags
//  the minimized window.
HCURSOR CMFCEllipseExDlg::OnQueryDragIcon()
{
    return (HCURSOR) m_hIcon;
}
 
long tick = 0;
void CMFCEllipseExDlg::OnTimer(UINT nIDEvent) 
{
    // TODO: Add your message handler code here and/or call default
    Draw((tick = tick + 1));
    if(tick == 2*m_timeSet)
        tick = 0;
    CDialog::OnTimer(nIDEvent);
}
 
void CMFCEllipseExDlg::OnOK() 
{
    // TODO: Add extra validation here
    UpdateData(true);
    if(!isTimer)
    {
        if(SetTimer(1,10,NULL))
        {
            m_editctrl.EnableWindow(false);
            isTimer = true;
            ShowWindow(SW_MAXIMIZE);
        }
        else
            AfxMessageBox("Ошибка установки таймера");
    }
    else
    {
        KillTimer(1);
        isTimer = false;
        m_editctrl.EnableWindow(true);
    }
    Draw(tick = 0);
    //CDialog::OnOK();
}
 
void CMFCEllipseExDlg::Draw(long msec)
{
    CClientDC dc( this );
    CPen pen;
 
    CBitmap bit;
    CDC dc2;
 
    RECT pRECT = {0};
    GetClientRect(&pRECT);
    int XMIN = 5;
    int YMIN = 35;
    int XMAX = pRECT.right - pRECT.left - 5;
    int YMAX = pRECT.bottom - pRECT.top - 5;
    double mult  = 0.5;
    if(msec < m_timeSet)
        mult *= (m_timeSet - msec)/(1.0*m_timeSet);
    else
        mult *= (msec - m_timeSet)/(1.0*m_timeSet);
    int hX = (XMAX - XMIN);
    int hY = (YMAX - YMIN);
    bit.CreateCompatibleBitmap( &dc, XMAX, YMAX );
 
    dc2.CreateCompatibleDC(&dc);
    dc2.SelectObject( &bit );
    dc2.FillSolidRect( XMIN, YMIN, XMAX, YMAX, RGB( 255,255,255) );
    pen.CreatePen(PS_SOLID, 1, RGB( 125, 0, 0) );
    dc2.SelectObject( &pen );
    dc2.Ellipse
    ( 
        XMIN + hX*mult, 
        YMIN + hY*mult, 
        XMAX - hX*mult, 
        YMAX - hY*mult
    );
    dc.BitBlt( XMIN, YMIN , XMAX, YMAX , &dc2, XMIN,YMIN, SRCCOPY );
    UpdateData(false);
}
 Комментарий модератора 
Используйте теги форматирования кода!


только можно в нормальный вид, все не нужное для программы выкинуть
0
0 / 0 / 0
Регистрация: 10.01.2012
Сообщений: 11
23.01.2012, 21:08  [ТС] 20
Помогите написать программу в Visual Studio программу про эллипс, который увеличивается в размерах а по прошествии 30 секунд уменьшается, нужно капец как срочно...
0
23.01.2012, 21:08
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.01.2012, 21:08
Помогаю со студенческими работами здесь

Увеличивается или уменьшается вес каждого из проводников из-за их магнитного взаимодействия
Два бесконечных прямолинейных параллельных проводника расположены друг над другом.По ним в одном...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru