...
private:
int i;
CStatusBarCtrl bar;
CString s;
...
Создание таймера для простой игрушки на Visual Studio 2005...
Подскажите пожайлуста как реализовать таймер, который должен сбрасываться по нажатию на Button. Архитектура - Dialog Based.
Цитата: D-Luxe
Подскажите пожайлуста как реализовать таймер, который должен сбрасываться по нажатию на Button. Архитектура - Dialog Based.
- Добавляешь в класс диалога 3 переменные Код:
- Для класса диалога добавь ф-ию OnTimer в MessagesКод:...
void какое-то имя::OnTimer(UINT_PTR nIDEvent)
{
++i;
char buf[10];
s = itoa(i,buf,10);
bar.SetText(s, 0, 0);
CDialog::OnTimer(nIDEvent);
}
... - В фии OnInitDialog допиши следующееКод:...
SetTimer(1,1000,0);
bar.Create(WS_VISIBLE | WS_CHILD, CRect(0, 0, 0, 0),this,IDR_SB );
... - В файле Resourse.h допиши такую строку Код:...
#define IDR_SB 103
... - Вытащи из ToolBox кнопку,2 раза щелкни по ней,появится ф-ия OnBnClickedButton1,она выглядит такКод:...
void какое-то имя::OnBnClickedButton1()
{
i = 0;
}
...
А как сделать, чтобы таймер выводился в Static Text. И в формате ЧЧ:ММ:СС????
- Вытаскиваещь из ToolBox static , добавляешь для него контрол переменную m_static.
- Добавляешь в класс диалога еще 2 переменные int h и int m(часы и минуты,соответственно)
- В ф-ии OnTimer пишешь такой код
Код:
...
++i;
if(i == 60){
++m;
i = 0;
}
if(m == 60){
++h;
m = 0;
}
s.Format(L"Часы: %d минуты: %d секунды: %d",h,m,i);
m_static.SetWindowTextW(s);
...
++i;
if(i == 60){
++m;
i = 0;
}
if(m == 60){
++h;
m = 0;
}
s.Format(L"Часы: %d минуты: %d секунды: %d",h,m,i);
m_static.SetWindowTextW(s);
...
Хотелось бы сменить шрифт, цвет для выводимого времени и чтобы выглядело это так: 00:00:01. Т.е. время должно быть расположено по центру в Static. Как сделать???
Цитата: D-Luxe
Хотелось бы сменить шрифт, цвет для выводимого времени и чтобы выглядело это так: 00:00:01. Т.е. время должно быть расположено по центру в Static. Как сделать???
Для того чтобы время было расположено по центру Static нужно в Properties этого Static Align text -> Center,по умолчпнию стоит Left:)
Для того чтоб "выглядело это так: 00:00:01" нужно изучить функцию
класса CString Format,она работает по принципу printf,т.е
Код:
...
s.Format(L"%02d : %02d : %02d",h,m,i);
...
s.Format(L"%02d : %02d : %02d",h,m,i);
...
OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor).Добавь ее в Messages класса диалога.Она должна иметь следующий вид
Код:
HBRUSH имя_приложения::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
if(nCtlColor == CTLCOLOR_STATIC)
{
if(pWnd->GetDlgCtrlID() == IDC_STATIC1)
{
CFont font;
font.CreateFont(-18, 0, 0, 0, 700, 1, 0, 0, RUSSIAN_CHARSET,
0, 0, 0, 0, L"Times New Roman Cyr");
pDC->SelectObject(&font);
pDC->SetBkMode(TRANSPARENT);
pDC->SetTextColor(RGB(255, 0, 0 ));
}
}
return hbr;
}
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
if(nCtlColor == CTLCOLOR_STATIC)
{
if(pWnd->GetDlgCtrlID() == IDC_STATIC1)
{
CFont font;
font.CreateFont(-18, 0, 0, 0, 700, 1, 0, 0, RUSSIAN_CHARSET,
0, 0, 0, 0, L"Times New Roman Cyr");
pDC->SelectObject(&font);
pDC->SetBkMode(TRANSPARENT);
pDC->SetTextColor(RGB(255, 0, 0 ));
}
}
return hbr;
}