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

Ваш аккаунт

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

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

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

Проблема с кнопками

1.2K
07 марта 2005 года
BigBug
93 / / 30.07.2004
Интересная проблема возникла.
Мне нужно сделать чтото вроде спинера только с одной кнопкой.
Создал CButton кнопку и тут заметил проблему :
у кнопки есть таймер который в течении секунды после нажатия блокирует её.
Что здорово мешает изменять значения.
Вобщем люди добрые подскажите пожалуста как
отделаться от этого наказания.
430
07 марта 2005 года
craftyfox
157 / / 20.02.2000
Цитата:
Originally posted by BigBug
у кнопки есть таймер который в течении секунды после нажатия блокирует её.


Чудеса какие-то...
При таком варианте:

 
Код:
void CSbmfcDlg::OnButton1()
{
    int nm=GetDlgItemInt(IDC_EDIT1);
    SetDlgItemInt(IDC_EDIT1,++nm); 
}


мне даже не смотря на музыкальное образование не удавалось дважды нажать на кнопку так, чтобы значение edit'а изменилось на единицу.
1.2K
08 марта 2005 года
BigBug
93 / / 30.07.2004
Цитата:
Originally posted by craftyfox

Чудеса какие-то...
При таком варианте:
 
Код:
void CSbmfcDlg::OnButton1()
{
    int nm=GetDlgItemInt(IDC_EDIT1);
    SetDlgItemInt(IDC_EDIT1,++nm); 
}


мне даже не смотря на музыкальное образование не удавалось дважды нажать на кнопку так, чтобы значение edit'а изменилось на единицу.



Мдааааааааааааааааааа

430
08 марта 2005 года
craftyfox
157 / / 20.02.2000
Цитата:
Originally posted by BigBug

Мдааааааааааааааааааа



Что мда?

Что за таймер-то ты там раскопал, и кто его к кнопке приделал - непонятно.

1.2K
08 марта 2005 года
BigBug
93 / / 30.07.2004
Цитата:
Originally posted by craftyfox


Что за таймер-то ты там раскопал, и кто его к кнопке приделал - непонятно.



Дело принимает интересный оборот.
Кнопка создаётся от класса наследуюшего CButton
и при создании устанавливается BS_OWNERDRAW
Тоесть вот так:
[COLOR=darkblue]
m_bt.Create("Button"
,WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON|BS_OWNERDRAW
,CRect(10,160,100,210),this,350);[/COLOR]

Именно при самостоятельной отрисовке проявляется этот таймер.

430
08 марта 2005 года
craftyfox
157 / / 20.02.2000
Цитата:
Originally posted by BigBug


Дело принимает интересный оборот.
Кнопка создаётся от класса наследуюшего CButton
и при создании устанавливается BS_OWNERDRAW
Тоесть вот так:
[COLOR=darkblue]
m_bt.Create("Button"
,WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON|BS_OWNERDRAW
,CRect(10,160,100,210),this,350);[/COLOR]

Именно при самостоятельной отрисовке проявляется этот таймер.


OK, теперь понятнее, таймер обнаружился :)

Мне кажется, что дело тут в том, что Button имеет
CS_DBLCLKS, и, похоже, нажатие при BS_OWNERDRAW
(WM_LBUTTONDOWN) обрабатывается несколько иначе,
чем без него, т.е. при BS_OWNERDRAW кнопка ждет,
вероятно, возможного второго нажатия...

Ну и рецепт борьбы со злом:

Код:
BOOL MyButton::PreCreateWindow(CREATESTRUCT& cs)
{
    WNDCLASSEX sex;
    sex.cbSize=sizeof(sex);
    if(GetClassInfoEx(0,"Button",&sex))  //else - errors
    {
        sex.lpszClassName="MyButton";
        sex.style&=~CS_DBLCLKS;
        if(RegisterClassEx(&sex))
            cs.lpszClass="MyButton";
    }
    return CButton::PreCreateWindow(cs);
}


Вроде, работает...
Или я опять чего-то не понял (По крайней мере,
на СЕКУНДНУЮ задержку полюбоваться не удалось)?
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог