Поиск:

Ответ в темуСоздание новой темы Создание опроса
> двигающийся статик 
V
    Опции темы
papam
Дата 19.6.2006, 20:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 104
Регистрация: 2.2.2006
Где: Украина::Запорожь е

Репутация: нет
Всего: 4



Скажите ,как сделать чтоб  двигался статик а не кнопка?И чтоб он убегал от курсора?
Код

#include "afxwin.h" // MFC Îñíîâíûå è ñòàíäàðòíûå êîìïîíåíòû
#define IDC_MYBUTTON 100    // Èäåíòèôèêàòîð êíîïêè
#define IDC_MYEDIT 102    // Èäåíòèôèêàòîð ïîëÿ ðåäàêòèðîâàíèÿ
class CMyButton: public CButton
{
public:
    afx_msg void OnLButtonDblClk(UINT, CPoint);
    afx_msg void OnRButtonDblClk(UINT, CPoint);
    
private:
    DECLARE_MESSAGE_MAP(); // òàáëèöà îòêëèêîâ êíîïêè
};

void CMyButton ::OnLButtonDblClk(UINT, CPoint)
{
    MoveWindow(620,100,120,50);
}

void CMyButton ::OnRButtonDblClk(UINT, CPoint)
{
    MoveWindow(120,10,120,50);
}

BEGIN_MESSAGE_MAP(CMyButton, CButton) // òàáëèöà îòêëèêîâ íà ñîîáùåíèÿ
    ON_WM_LBUTTONDBLCLK()
    ON_WM_RBUTTONDBLCLK()
    
END_MESSAGE_MAP()




class CMainWnd : public CFrameWnd
{
public:
    CMainWnd();// Êîíñòðóêòîð ïî óìîë÷àíèþ
    afx_msg void OnLButtonDblClk(UINT, CPoint);    // âèðòóàëüíàÿ ïðîöåäóðà îòâåòà íà ëåâóþ êíîïêó
    afx_msg void OnRButtonDblClk(UINT, CPoint);    // âèðòóàëüíàÿ ïðîöåäóðà îòâåòà íà ïðàâóþ êíîïêó
    afx_msg void OnKeyDown(UINT, UINT, UINT);    // âèðòóàëüíàÿ ïðîöåäóðà îòâåòà íà êëàâèøó
  
private:
    CStatic* MyStatic;    // Óêàçàòåëü íà îáúåêò íàäïèñü
    CMyButton* MyButton;    // Óêàçàòåëü íà îáúåêò êíîïêà
    CEdit* MyEdit;    // Óêàçàòåëü íà îáúåêò ïîëå ðåäàêòèðîâàíèÿ
    DECLARE_MESSAGE_MAP(); // òàáëèöà îòêëèêîâ

};
BEGIN_MESSAGE_MAP(CMainWnd, CFrameWnd)    // òàáëèöà îòêëèêîâ íà ñîîáùåíèÿ
    ON_WM_LBUTTONDBLCLK()        // ðåàêöèÿ íà íàæàòèå ëåâîé êíîïêè ìûøè
    ON_WM_RBUTTONDBLCLK()        // ðåàêöèÿ íà íàæàòèå ïðàâîé êíîïêè ìûøêè
    ON_WM_KEYDOWN()            // ðåàêöèÿ íà íàæàòèå êëàâèøè
    END_MESSAGE_MAP()
void CMainWnd::OnKeyDown(UINT, UINT, UINT)
{
    AfxMessageBox(" Key Button Down ");
}
void CMainWnd::OnRButtonDblClk(UINT, CPoint)
{
    AfxMessageBox(" Rigth Button Click ");
}

void CMainWnd::OnLButtonDblClk(UINT, CPoint)
{
    AfxMessageBox(" Left Button Click ");
}

CMainWnd::CMainWnd()
{
    Create(NULL,"ÇÀÄÀÍÈÅ 2 ÇÀÄÀ×À 2",WS_OVERLAPPEDWINDOW,rectDefault,NULL,NULL);// Ñîçäàòü îêíî ïðîãðàììû
    MyStatic = new CStatic();
    if (MyStatic!=NULL)  MyStatic->Create("MyStatic",WS_CHILD|WS_VISIBLE|SS_CENTER,
        CRect(10,10,100,50),this);      
    
//    MyButton = new CMyButton();
    //if (MyStatic!=NULL) MyButton->Create("((((-: STATIC :-))))",WS_CHILD|WS_VISIBLE|SS_CENTER,
        //CRect(120,10,220,50),this,IDC_MYBUTTON);
    MyEdit = new CEdit();
    if (MyEdit!=NULL) MyEdit->Create(WS_CHILD|WS_VISIBLE|WS_BORDER,
        CRect(340,10,740,40),this,IDC_MYEDIT);
}


class CMyApp : public CWinApp
{
public:
    CMyApp();            //êîíñòðóêòîð ïî óìîë÷àíèþ
    virtual BOOL InitInstance();//ñòàíäàðòíàÿ èíèöèàëèçàöèÿ
};

CMyApp::CMyApp() // êîíñòðóêòîð ãëàâíîãî êëàññà ïðèëîæåíèÿ
{}

BOOL CMyApp::InitInstance() // ñòàíäàðòíàÿ èíèöèàëèçàöèÿ
{
    m_pMainWnd=new CMainWnd();    // ñîçäàòü êëàññ îêíà
    ASSERT(m_pMainWnd);    // ïðîâåðèòü åãî ïðàâèëüíîñòü
    m_pMainWnd->ShowWindow(SW_SHOW);// Ïîêàçàòü îêíî
    m_pMainWnd->UpdateWindow();    // Îáíîâèòü îêíî
    return TRUE;        // Âåðíóòü ÷òî âñå íîðìàëüíî
};

CMyApp theApp;    // çàïóñê ïðèëîæåíèÿ

 
--------------------
No Fucking Future
PM MAIL ICQ   Вверх
Coocky
Дата 20.6.2006, 17:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GUI гуру
****


Профиль
Группа: Участник Клуба
Сообщений: 2879
Регистрация: 16.2.2004
Где: Украина. Запорожь е

Репутация: 25
Всего: 62



papam, 
ну и на..#@№ этот код ты дал? smile 
Движения статика делается очень просто
Создаешь свой класс статика к примеру -MyStatic, Производный от CStatic.
В этом классе отлавливаешь сообщение WM_MOUSEMOVE и в обработчике этого сообщения передвигаешь статик (функцией MoveWindow())
Что происходит, когда ты попадаешь мышкой на СВОЙ статик, приходит это сообщение, и уже ,реагируя на него, ты двигаешь статик в нужную тебе сторону smile 
Вот и все smile  


--------------------
Верю в смерть после жизни, в любовь после секса ,в крем после бритья smile        
PM ICQ   Вверх
papam
Дата 20.6.2006, 21:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 104
Регистрация: 2.2.2006
Где: Украина::Запорожь е

Репутация: нет
Всего: 4



Сделал.Но статик убегат при первом подводе мышки,а как сделать чтоб он убегал и при дальнейших подводах мышки?Подскажите пожалуста
Код

#include "afxwin.h" // MFC Îñíîâíûå è ñòàíäàðòíûå êîìïîíåíòû
#define IDC_MYBUTTON 100    // Èäåíòèôèêàòîð êíîïêè
#define IDC_MYEDIT 102    // Èäåíòèôèêàòîð ïîëÿ ðåäàêòèðîâàíèÿ
class CMyStatic: public CStatic
{
public:
    //afx_msg void OnLButtonDblClk(UINT, CPoint);
    //afx_msg void OnRButtonDblClk(UINT, CPoint);
    afx_msg void OnMouseMove(UINT,CPoint);
    

    
private:
    DECLARE_MESSAGE_MAP(); // òàáëèöà îòêëèêîâ êíîïêè
};

}
void CMyStatic::OnMouseMove(UINT, CPoint)

    {
    MoveWindow(620,200,120,50);

    }
    





BEGIN_MESSAGE_MAP(CMyStatic, CStatic) // òàáëèöà îòêëèêîâ íà ñîîáùåíèÿ
    ON_WM_LBUTTONDBLCLK()
    ON_WM_RBUTTONDBLCLK()
    ON_WM_MOUSEMOVE()
    
END_MESSAGE_MAP()




class CMainWnd : public CFrameWnd
{
public:
    CMainWnd();
    afx_msg void OnLButtonDblClk(UINT, CPoint);    // âèðòóàëüíàÿ ïðîöåäóðà îòâåòà íà ëåâóþ êíîïêó
    afx_msg void OnRButtonDblClk(UINT, CPoint);    // âèðòóàëüíàÿ ïðîöåäóðà îòâåòà íà ïðàâóþ êíîïêó
    afx_msg void OnKeyDown(UINT, UINT, UINT);    // âèðòóàëüíàÿ ïðîöåäóðà îòâåòà íà êëàâèøó
  
private:
    
    CMyStatic* MyStatic;
    CEdit* MyEdit;    
    DECLARE_MESSAGE_MAP(); // òàáëèöà îòêëèêîâ

};
BEGIN_MESSAGE_MAP(CMainWnd, CFrameWnd)    // òàáëèöà îòêëèêîâ íà ñîîáùåíèÿ
    ON_WM_LBUTTONDBLCLK()        // ðåàêöèÿ íà íàæàòèå ëåâîé êíîïêè ìûøè
    ON_WM_RBUTTONDBLCLK()        // ðåàêöèÿ íà íàæàòèå ïðàâîé êíîïêè ìûøêè
    ON_WM_KEYDOWN()            // ðåàêöèÿ íà íàæàòèå êëàâèøè
    END_MESSAGE_MAP()
void CMainWnd::OnKeyDown(UINT, UINT, UINT)
{
    AfxMessageBox(" Key Button Down ");
}
void CMainWnd::OnRButtonDblClk(UINT, CPoint)
{
    AfxMessageBox(" Rigth Button Click ");
}

void CMainWnd::OnLButtonDblClk(UINT, CPoint)
{
    AfxMessageBox(" Left Button Click ");
}

CMainWnd::CMainWnd()
{
    Create(NULL,"ÇÀÄÀÍÈÅ 2 ÇÀÄÀ×À 2",WS_OVERLAPPEDWINDOW,rectDefault,NULL,NULL);// Ñîçäàòü îêíî ïðîãðàììû
    MyStatic = new CMyStatic();
    if (MyStatic!=NULL)  MyStatic->Create("MyStatic",WS_CHILD|WS_VISIBLE|SS_CENTER|SS_NOTIFY,
        CRect(10,10,100,50),this);      
    
    MyEdit = new CEdit();
    if (MyEdit!=NULL) MyEdit->Create(WS_CHILD|WS_VISIBLE|WS_BORDER,
        CRect(340,10,740,40),this,IDC_MYEDIT);
}


class CMyApp : public CWinApp
{
public:
    CMyApp();            
    virtual BOOL InitInstance();
};

CMyApp::CMyApp() 
{}

BOOL CMyApp::InitInstance() 
{
    m_pMainWnd=new CMainWnd();
    ASSERT(m_pMainWnd);    
    m_pMainWnd->ShowWindow(SW_SHOW);
    m_pMainWnd->UpdateWindow();    
    return TRUE;        
};

CMyApp theApp;    

 
--------------------
No Fucking Future
PM MAIL ICQ   Вверх
Coocky
Дата 21.6.2006, 09:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GUI гуру
****


Профиль
Группа: Участник Клуба
Сообщений: 2879
Регистрация: 16.2.2004
Где: Украина. Запорожь е

Репутация: 25
Всего: 62



Цитата(papam @  20.6.2006,  21:41 Найти цитируемый пост)
Но статик убегат при первом подводе мышки,а как сделать чтоб он убегал и при дальнейших подводах мышки

А это уже не МФС, это уже, брат -логика smile 
Ну вот смотри.
 Функция MoveWindow() Передвигает окно. Причем в качестве координат ты передаешь ей координаты нового прямоугольника. Причем координаты клиентские. Т.е. относительно родителя статика(левый верхний угол родителя -это координаты 0,0);
Судя по коду - ты добавлял сообщения и обработку ручками, а не через Визард. smile  Причем добавлял не совсем правильно. На самом деле обработчик движения мышью имеет вот такой стандартный вид
Код

void CMyStatic::OnMouseMove(UINT nFlags, CPoint point)

{

   CStatic::OnMouseMove(nFlags, point);
}

у с видом функции разбирайся сам, а вот что тебя действительно интересует, так это параметр передаваемый функции- CPoint point. Этот обьект содержит координаты (клиентские) курсора мыши на данный момент.
Ну пошли уже в голову мысли? smile  Правильно, от этих координат нам надо отталкиваться smile 
Ну к примеру
Код

void CMyStatic::OnMouseMove(UINT nFlags, CPoint point)

{
CRect rect; /Очень удобный класс для работ с координатами см. МСДН
GetClientRect(&rect);// Получаем клиентские координаты статика на данный момент
int a=rect.Height(); //Запомним высоту
int b=rect.Width(); //Запомним ширину
if (rect.PtInRct(point))Если курсор находится внутри статика
{
....... .... 
//Вычисляем куда двигать. Алгоритм может быть разным.Например вычислить  в какую сторону лучше

/* примерный сдвиг

rect.left+=1;
rect.right=rect.left+b;

*/

}
MoveWindow(rect);// Сдвинем весь статик

   CStatic::OnMouseMove(nFlags, point);
}


Примерно так все это происходит smile   

Это сообщение отредактировал(а) Coocky - 21.6.2006, 10:14


--------------------
Верю в смерть после жизни, в любовь после секса ,в крем после бритья smile        
PM ICQ   Вверх
papam
Дата 21.6.2006, 21:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 104
Регистрация: 2.2.2006
Где: Украина::Запорожь е

Репутация: нет
Всего: 4



Спасибо 
--------------------
No Fucking Future
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.0551 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.