12. november 2001 - 20:05
#5
Det er et skakspil, hvor der er lavet 4 editboxe under hinanden, meningen er at man ved hjælp af nogel radiobuttens kan vælge hvor langtid spillet skal vare.
det vil sige at hvis jeg kunne få denne funktion til at virke .. altså med at vise tiden .. ville det ikke være det store at hente informationen fra den radiobutten der er aktiv.
std::string Secleft(int timevalue)
{
static int i=0;
std::string sec_=\"test\";
sec_+=(i+\'d\');
i--;
return sec_;
}
case WM_TIMER:
if(!RunTidstager) //Uret skal ikke køre.
KillTimer(hwnd,TidsTagerId);
else
{
if(tur)
{
if(tur==Hvid)
{
--TidHvid;
SetDlgItemText(hwnd,Spiller1TidBox,(Secleft(TidHvid)).c_str());
if(TidHvid<=0) //Tidsudløb for hvid
{
tur=0;
RunTidstager=false;
KillTimer(hwnd,TidsTagerId);
MessageBox(NULL,\"Hvids tid er udløbet\",\"Tillykke Sort du har vundet\",0);
}
}
else //sort
{
--TidSort;
SetDlgItemText(hwnd,Spiller2TidBox,(Secleft(TidSort)).c_str());
if(TidSort<=0) //Tidsudløb for Sort
{
//MessageBox(NULL,\"Sorts tid er udløbet\",\"Tillykke Hvid du har vundet\",0);
tur=0;
RunTidstager=false;
KillTimer(hwnd,TidsTagerId);
}
}
}
}
return 0;
CreateWindow(TEXT(\"EDIT\"),NULL,WS_CHILD | WS_VISIBLE | WS_BORDER,
80,
80,
70,
30,
hwnd,
(HMENU)16,
((LPCREATESTRUCT)lParam)->hInstance,
NULL);
SetDlgItemText(hwnd,16,\"Spiller 1\");
CreateWindow(TEXT(\"EDIT\"),NULL,WS_CHILD | WS_VISIBLE | WS_BORDER,
80,
120,
70,
30,
hwnd,
(HMENU)17,
((LPCREATESTRUCT)lParam)->hInstance,
NULL);
SetDlgItemText(hwnd,17,\"Tid 1\");
CreateWindow(TEXT(\"EDIT\"),NULL,WS_CHILD | WS_VISIBLE | WS_BORDER,
80,
160,
70,
30,
hwnd,
(HMENU)18,
((LPCREATESTRUCT)lParam)->hInstance,
NULL);
SetDlgItemText(hwnd,18,\"Spiller 2\");
CreateWindow(TEXT(\"EDIT\"),NULL,WS_CHILD | WS_VISIBLE | WS_BORDER,
80,
200,
70,
30,
hwnd,
(HMENU)19,
((LPCREATESTRUCT)lParam)->hInstance,
NULL);
SetDlgItemText(hwnd,19,\"Tid 2\");
TidHvid=3; //tre sek.
TidSort=5*60; //fem min.
CreateWindow(TEXT(\"LISTBOX\"),NULL,WS_CHILD | WS_VISIBLE | WS_BORDER | WS_VSCROLL |LBS_NOSEL,
80,
240,
70,
200,
hwnd,
(HMENU)NotationsListe,
((LPCREATESTRUCT)lParam)->hInstance,
NULL);
Som det er nu, vil der gå tre sekunder, så vil sort vinde. i den tid vil den i tidsfeltet skrive testd, testc, testb ... meningen er at den skal tælle ned på skærmen altså hvis man nu har valgt radiobutten 1, 5 min 5:00, 4:59, 5:58 ->
case IDOK:
//Opdatere navne:
if(IsDlgButtonChecked(hwndDlg,IDC_CHECK1)==BST_UNCHECKED)
{
GetDlgItemText(hwndDlg,IDC_EDIT1,Spiller1,MaxSpillerNavn);
GetDlgItemText(hwndDlg,IDC_EDIT2,Spiller2,MaxSpillerNavn);
}
//Opdater tiden:
if(IsDlgButtonChecked(hwndDlg,IDC_RADIO1)==BST_CHECKED)
TidHvid=TidSort=300;
else
if(IsDlgButtonChecked(hwndDlg,IDC_RADIO2)==BST_CHECKED)
TidHvid=TidSort=600;
else
if(IsDlgButtonChecked(hwndDlg,IDC_RADIO3)==BST_CHECKED)
TidHvid=TidSort=900;
else
if(IsDlgButtonChecked(hwndDlg,IDC_RADIO4)==BST_CHECKED)
TidHvid=TidSort=1200;
else
if(IsDlgButtonChecked(hwndDlg,IDC_RADIO5)==BST_CHECKED)
TidHvid=TidSort=0;
EndDialog(hwndDlg,0);
return TRUE;
}
break;
}
return 0;
Håber det hjælper, eller vil jeg med glæde sende dig koden ..
13. november 2001 - 08:34
#8
Jeg antager, at du ønsker en funktion som dels returnerer en tekststreng, med den aktuelle, resterende tid, dels tæller tiden ned. Funktionen skal så kaldes hver gang en timer har brugt yderligere et sekund. (Var det derfor ikke oplagt at bruge timeren til at måle tiden ?)
std::string SecTilTidspunkt(int& tidsvaerdi)
{
char buffer[6];
sprintf(buffer, \"%02d:%02d\", tidsvaerdi / 60, tidsvaerdi % 60);
--tidsvaerdi;
return (std::string)buffer;
}
Bemærk at tidsvaerdi overføres \"by reference\", dvs. at du kan rette på indholdet af den oprindelige værdi. For at justere/vise tiden skal du blot kalde d.o. funktion i stil med dette:
SetDlgItemText(hwnd,19, SecTilTidspunkt(TidHvid)));
eller
SetDlgItemText(hwnd,19,SecTilTidspunkt(TidSort));