Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Visual C++/MFC/WTL > Кнопки


Автор: Sasha1 5.5.2006, 17:51
Есть Баттон1 
и есть Едит1.
на кнопки надпись 1 , как сделать так чтобы при нажатие на кнопку , он вносил в Поле Едит1   единицу.
а если нажать ещё раз то 11 .. 111  и т .д ( Как в Виндовском калькуляторе. )

и запоминал ето значение в какуето Даббле переменную ? smile  

Автор: Sasha1 5.5.2006, 18:18
 smile  

Автор: Nikol 6.5.2006, 02:14
Можно попробовать за эдитом закрепить стринговую переменную, и при каждом нажатии добавлять к строке единицу. А потом при необходимости преобразовать cтроку в число. Но это, по-моему, как-то по китайски. Зато просто. smile

Добавлено @ 02:26 
Вот еще вариант, вроде получше.
За эдитом закрепи числовую переменную, например, Double, как ты хотел и инициализируй нулем. Тогда при нажатии кнопки новое число будет получаться путем умножения старого  на 10 и прибавлением единицы. Примерно так:
0
1     = 0*10+1
11   = 1*10+1
111 = 11*10+1 

Автор: Sasha1 6.5.2006, 11:38
а как ето бедт выгледить , в Коде ? ..  smile  

Автор: LPNcom 6.5.2006, 14:18
Если камасутру не использовать, то можно так
Кликаешь на своей кнопке два разА, и тебя пошлют в созданную функцию OnBnClickedButton1
Функция будет вызываться при нажфтиии на кнопку

Там пишешь
    CString Str;
    p_Edit.GetWindowText(Str);
    Str+="1";
    p_Edit.SetWindowText(Str);



p_Edit это твой Едит 

Автор: Sasha1 6.5.2006, 15:01
а как сделать с позицианированием.  т.е 
есть два Едита ...  я хочу сначало так ввести число впервы и потом также во второй ? 

как на калькуляторе ? 

Автор: LPNcom 6.5.2006, 15:35
Нипонял маненько что требуется
Запустил виндоусовский калькулятор - дак там одно поле. smile 

Заведи переменную для второго едита и фсе дела 

Автор: Sasha1 6.5.2006, 16:05
у меня 2 едита , я тыкаю на кнопочки и набирается число токо в первом естественно , а как сделать что бы я  при тыкание на 1 поле он позицианировал и набирал по нажатию кнопочек только в нем , а когда я тыкаю во второе поле то он набирал только в нём ? ))) 

Автор: cozzzy 6.5.2006, 18:25
Цитата(Sasha1 @  6.5.2006,  15:05 Найти цитируемый пост)
позицианировал и набирал по нажатию кнопочек только в нем , а когда я тыкаю во второе поле то он набирал только в нём ? ))) 

Переведи на русский язык, плз. 

 

Автор: Nikol 7.5.2006, 02:07
Цитата(LPNcom @  6.5.2006,  14:18 Найти цитируемый пост)
Если камасутру не использовать,

Я и имела ввиду то, что ты написал, но с учетом того, что калькулятор должен еще и считать, а для этого нужны числа. Поэтому лучше второй вариант. По-моему такой код выглядит вполне компактно, а число получается сразу: 
Код

m_value = m_value*10+1;
UpdateData(FALSE);

А для кнопки с цифрой 2 будет тоже самое, только + 2 вместо + 1.

Цитата(Sasha1 @  6.5.2006,  16:05 Найти цитируемый пост)
у меня 2 едита , я тыкаю на кнопочки и набирается число токо в первом естественно , а как сделать что бы я  при тыкание на 1 поле он позицианировал и набирал по нажатию кнопочек только в нем , а когда я тыкаю во второе поле то он набирал только в нём ? )))  

Ты имеешь ввиду тот калькулятор, который ты выкладывал в предыдущем топике? Тогда понятно, в чем проблема. В обработчике кнопки нужно динамически определять эдит, в котором стоит курсор и добавлять циферки в него, верно? Тогда зачем тебе эти кнопочки? Тыкай в эдит и вводи числа  клавиатуры. Оставь только кнопки с операциями.

 

Автор: Sasha1 7.5.2006, 13:05
ну так как то интереснее..  Я там делаю по сторкам потом перевожу в ИНТ .. всё считаеться..

а как сделать.Так что бы при позицианировании на первом едите была такая строчка . 



p_Edit1.GetWindowText(str1);

а если на втором то p_Edit2.GetWindowText(str1);



типа ..

If(p_Edit1. Chenge )
{
p_Edit1.GetWindowText(str1);
}
if (p_Edit2.Chenge)
{p_Edit2.GetWindowText(str1);
}


это конечно не пашет ) но как идея?
как ето в нормальный код реализовать ? 

Автор: Dray 7.5.2006, 15:20
Я бы сделал так: Завел бы переменную bool типа если true - 1й эдит, false - 2й, и в обработчике щелчка по эдиту менял эту переменную. Типа щелкнули по первому эдиту m_EditNum = true; - например. 

Автор: Sasha1 7.5.2006, 17:28
а можешь код привести . идеи как таковы , есть а как их в МВС реализовать аот в чём вопрос ? ) 

Автор: Dray 7.5.2006, 20:20
Завиди переменную булевскую:
Код

class CDvaEditaDlg : public CDialog
{
// Construction
public:
    CDvaEditaDlg(CWnd* pParent = NULL);    // standard constructor

// Dialog Data
    //{{AFX_DATA(CDvaEditaDlg)
    enum { IDD = IDD_DVAEDITA_DIALOG };
    CString    m_edit1;
    CString    m_edit2;
    //}}AFX_DATA

    // ClassWizard generated virtual function overrides
    //{{AFX_VIRTUAL(CDvaEditaDlg)
    protected:
    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
    //}}AFX_VIRTUAL

// Implementation
protected:
    bool m_EditNo;  //Вот она!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    HICON m_hIcon;

    // Generated message map functions
    //{{AFX_MSG(CDvaEditaDlg)
    virtual BOOL OnInitDialog();
    afx_msg void OnPaint();
    afx_msg HCURSOR OnQueryDragIcon();
    afx_msg void OnSetfocusEdit1();
    afx_msg void OnSetfocusEdit2();
    afx_msg void OnButton1();
    //}}AFX_MSG
    DECLARE_MESSAGE_MAP()
};

И лучше обрабатывать события не щелчка, а получения фокуса:
Код

void CDvaEditaDlg::OnSetfocusEdit1() 
{    
    m_EditNo=true;
}

void CDvaEditaDlg::OnSetfocusEdit2() 
{
    m_EditNo=false;
}

void CDvaEditaDlg::OnButton1() 
{
    if(m_EditNo)m_edit1+="1";
    else m_edit2+="1";
    UpdateData (FALSE);
}

Прикрепил проджект 

Автор: Любитель 7.5.2006, 23:22
Лучше не булевскую, а указатель на CEdit. И обрабатываем потерю фокуса. 

Автор: Sasha1 8.5.2006, 13:04
Гипер Спасибо ,, Осталасть одна деталь для концовки проги .. Кака из CString в  Double  
перевести ? 


Такая фенька не проходит (Наверное только для ИНт)
double im=0.0;
sscanf((LPCTSTR) str1,"%f",&im);
 

Автор: Dray 8.5.2006, 16:26
Код

CString str ("1.2");
double dbl = atof (str);
 

Автор: Sasha1 9.5.2006, 10:58
smile  

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)