Delam si takovou jednoduchou kalkulacku. Chci aby fungovala á la Kalkulačka Windows. Tzn po stisku tlacitka operatoru, mi zustanou cisla v edit box, smazou se az po druhem kliknuti na jakekoliv tlacitko nebo stisknuti klavesy cislice.
Chtel jsem to resit pomoci promenne BOOL clear, pokud jeji hodnota bude TRUE, pak po stisku leveho tlacitka mysi se text v edit boxu smaze.
Jenomze pri kliknuti na jednotlive tlacitka se zprava WM_LBUTTONDOWN asi vubec neposila :) Posle se pouze pokud kliknu v nejake oblasti okna a ne na tlacitka.
Jak tohle resit aniz bych nemusel pridat podminku
if(clear==true) {
SetWindowText(GetDlgItem(hWnd, IDC_EDIT), TEXT(""));
clear = false;
}
Ke kazdemu tlacitku ?
INT_PTR CALLBACK DialogProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch (uMsg)
{
case WM_INITDIALOG:
SetClassLongPtr(hWnd, GCLP_HICONSM, (LONG_PTR)LoadIcon(g_hInst, MAKEINTRESOURCE(IDI_ICON1)));
break;
case WM_LBUTTONDOWN:
if(clear==true) {
SetWindowText(GetDlgItem(hWnd, IDC_EDIT), TEXT(""));
clear = false;
}
break;
case WM_COMMAND:
switch (LOWORD(wParam))
{
case BT_C:
SetWindowText(GetDlgItem(hWnd, IDC_EDIT), TEXT(""));
number = 0;
buffer = 0;
break;
case BT_PLUS:
GetWindowText(GetDlgItem(hWnd, IDC_EDIT), TchText, 200);
tstrtoc_s(TchText, lstrlen(TchText), ChText);
buffer = atof(ChText); //nahrati cisel do promenne buffer
operation = 1; //nastaveni operace scitani
//SetWindowText(GetDlgItem(hWnd, IDC_EDIT), TEXT(""));
clear = true;
break;
case BT_MINUS:
GetWindowText(GetDlgItem(hWnd, IDC_EDIT), TchText, 200);
tstrtoc_s(TchText, lstrlen(TchText), ChText);
buffer = atof(ChText); //nahrati cisel do promenne buffer
operation = 2; //nastaveni operace scitani
//SetWindowText(GetDlgItem(hWnd, IDC_EDIT), TEXT(""));
clear = true;
break;
case BT_EQUALS: //tlacitko =
GetWindowText(GetDlgItem(hWnd, IDC_EDIT), TchText, 200);
tstrtoc_s(TchText, lstrlen(TchText), ChText);
number = atof(ChText);
switch(operation)
{
case 1:
number = buffer + number;
sprintf_s(ChText, "%f", number);
cstrtot_s(ChText, sizeof(ChText), TchText);
SetWindowText(GetDlgItem(hWnd, IDC_EDIT), TchText);
break;
case 2:
number = buffer - number;
sprintf_s(ChText, "%f", number);
cstrtot_s(ChText, sizeof(ChText), TchText);
SetWindowText(GetDlgItem(hWnd, IDC_EDIT), TchText);
break;
}
break;
case BT_0:
GetWindowText(GetDlgItem(hWnd, IDC_EDIT), TchText, 200);
lstrcat(TchText, TEXT("0")); //prida znak k TCHAR TchText
SetWindowText(GetDlgItem(hWnd, IDC_EDIT), TchText);
break;
case BT_1:
GetWindowText(GetDlgItem(hWnd, IDC_EDIT), TchText, 200);
lstrcat(TchText, TEXT("1")); //prida znak k TCHAR TchText
SetWindowText(GetDlgItem(hWnd, IDC_EDIT), TchText);
break;
//atd...jednotliva tlacitka cisel
case WM_DESTROY:
PostQuitMessage(0);
break;
}
break;
}
return FALSE;
}
btw Jaky je rozdil mezi tlacitkem C a CE ? :)