Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

События для StaticText

281
30 июля 2006 года
Fan][
279 / / 19.12.2003
Как создать событие OnLButtonDown для StaticNext в MFC?
240
30 июля 2006 года
aks
2.5K / / 14.07.2006
Странный вопрос OnLButtonDown - это я так понимаю обработчик для сообщения на нажатие левой кнопки мыши? (Не надо путать понятия =)))
Так вот собственно как вариант, отнаследуй например класс от CStratic и в нем отлавливай сообщение WM_LBUTTONDOWN. И обрабатывай его.
4.5K
31 июля 2006 года
e-XperT
127 / / 04.07.2006
А не проще ли отлавливать все сообщения WM_LBUTTONDOWN и проверять попал ли указатель мыши в область StaticText?

4 aks. Если можно, поподробнее с наследованием класса от CStatic.
240
01 августа 2006 года
aks
2.5K / / 14.07.2006
А что тут подробней можно. Раз уж используется MFC - там насколько я помню для этого есть класс CStatic. Просто наследуемся от него:

class CStaticEx : public CStatic{
...
};

А дальше переопределяем что нужно, ставим свои обработчики сообщений и в нужном месте создаем объект и вызываем у него Create(...)
16K
01 августа 2006 года
Deeoni$
21 / / 09.06.2006
надо просто выставить свойство Notify в TRUE
4.5K
02 августа 2006 года
e-XperT
127 / / 04.07.2006
Чтобы обрабатывать уведомления о кликах, в производном классе нужно переопределить функцию OnParentNotify (). Так что ли?
16K
06 августа 2006 года
koric
42 / / 06.08.2006
Deeoni$ имеется в виду при создании поставить флаг SS_NOTIFY и обрабатываит сообщение BN_CLICKED ?

 
Код:
#define IDC_MY_STATIC 101;

CStatic* myStatic;
myStatic = new CStatic;
myStatic->Create("myStatic",WS_CHILD|WS_VISIBLE|SS_NOTIFY,
    CRect(0,0,10,10),this,IDC_MY_STATIC);


Тогда в MESSAGE_MAP
 
Код:
ON_BN_CLICKED(IDC_MY_STATIC, OnMyStatic)


Если работаешь с конструктором диалога, то в свойствах твоего static на закладке Styles поставь флаг Notify и обзови сам элемент например IDC_MY_STATIC Потом через Class Wizard для этого элемента создай функцию для сообщения BN_CLICKED

Но с производным классом лучше идея.

Код:
class CStaticEx: public CStatic {
public:
    afx_msg void OnLButtonDown(UINT, CPoint);
private:
    DECLARE_MESSAGE_MAP()
};

void CStaticEx::OnLButtonDown(UINT, CPoint) {
    // тут делаешь что тебе надо

}

BEGIN_MESSAGE_MAP(CStaticEx, CStatic)
    ON_WM_LBUTTONDOWN()
END_MESSAGE_MAP


только создавать в таком случае лучше вручную, а не через конструктор, аналогично можно обрабатывать и другие сообщения

http://www.firststeps.ru/mfc/steps/r.php?4 здесь сделано аналогично, но не с CStatic а с кнопкой CButton
4.5K
06 августа 2006 года
e-XperT
127 / / 04.07.2006
4 koric. В производном классе переопределять придется не только OnLButtonDown но и как минимум Create, а также конструктор и деструктор. А вот какие еще надо переопределить функции? Или для корректной работы достаточно только этих?
16K
06 августа 2006 года
koric
42 / / 06.08.2006
Create и конструктор/декструктор можно не переопределять, в таком случае будет вызван метод класса-предка, т.е. CStatic (проверено и работает в MSVC 6.0). Если ты не создаёшь никаких ресурсов по указателям или не распределяешь память, то конструкторы/дестврукторы вообще не нужны. Приведённый ниже код полностью работоспособен, для проверки вызови из функции-обработчика MessageBox() или что-нибудь аналогичное.

Код:
#include "afxwin.h"
#define IDC_MY_STATIC 101

class CStaticEx: public CStatic {
public:
    afx_msg void OnLButtonDown(UINT, CPoint);
private:
    DECLARE_MESSAGE_MAP()
};

afx_msg void CStaticEx::OnLButtonDown(UINT, CPoint)
{
    //обработка события
    MessageBox("Ура, работает!","Заголовок",MB_OK|MB_ICONEXCLAMATION);
}

BEGIN_MESSAGE_MAP(CStaticEx, CStatic)
    ON_WM_LBUTTONDOWN()
END_MESSAGE_MAP()

//описание класса окна или чего-либо ещё
class CMainFrame: public CFrameWnd {
public:
    CMainFrame();       //конструктор окна
    ~CMainFrame();
//...
private
    CStaticEx* MyStatic;
//...
};

//...

CMainFrame::CMainFrame()
{
    MyStatic = new CStaticEx;
    MyStatic->Create("Текст",WS_CHILD|WS_VISIBLE|SS_CENTER,
        CRect(10,10,100,30),this,IDC_MY_STATIC);
    //...
}

CMainFrame::~CMainFrame()
{
    delete MyStatic;
}

//...


в принципе если добавить это в проект из MFC AppWizard, то работает нормально. переопределять никаких функций больше не надо. Если работаешь через конструктор диалогов, то можно вставить элемент управления Custom control подробнее о конструкторе (картинка)
398
06 августа 2006 года
Alexandoros
630 / / 21.10.2005
[QUOTE=e-XperT]4 koric. В производном классе переопределять придется не только OnLButtonDown но и как минимум Create, а также конструктор и деструктор. А вот какие еще надо переопределить функции? Или для корректной работы достаточно только этих?[/QUOTE]

Только Create хватит
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог