📄 winecalc.c
字号:
{
int i;
int n;
calc.digitGrouping = !calc.digitGrouping;
n = (calc.digitGrouping ? MF_CHECKED : MF_UNCHECKED);
for (i=0;i<COUNT_MENUS;i++)
CheckMenuItem(menus[i], IDM_DIGIT_GROUPING, n);
calc_buffer_display(&calc);
}
return 0;
case IDM_HELP_TOPICS:
MessageBox(hWnd, TEXT("No Help Available"), TEXT("Windows Help"), MB_OK);
return 0;
case IDM_ABOUT:
DialogBox( calc.hInst, TEXT("DLG_ABOUT"), hWnd, AboutDlgProc );
return 0;
case ID_CALC_NS_HEX:
case ID_CALC_NS_DEC:
case ID_CALC_NS_OCT:
case ID_CALC_NS_BIN:
{
int i;
int w = LOWORD(wParam);
if (w == ID_CALC_NS_HEX) {
if (calc.numBase == NBASE_HEX)
return 0;
else
calc.numBase = NBASE_HEX;
}
else if (w == ID_CALC_NS_DEC) {
if (calc.numBase == NBASE_DECIMAL)
return 0;
else
calc.numBase = NBASE_DECIMAL;
}
else if (w == ID_CALC_NS_OCT) {
if (calc.numBase == NBASE_OCTAL)
return 0;
else
calc.numBase = NBASE_OCTAL;
}
else if (w == ID_CALC_NS_BIN) {
if (calc.numBase == NBASE_BINARY)
return 0;
else
calc.numBase = NBASE_BINARY;
}
for (i=0;i<CALC_NS_COUNT;i++)
SendMessage(calc.cb[60+i].hBtn, BM_SETCHECK, w == (ID_CALC_NS_HEX + i) ? 1 : 0, 0);
for (i=2;i<TOGGLE_COUNT;i++) { // skip 0 and 1, always valid
if (btn_toggle[w - ID_CALC_NS_HEX ][i]) {
if (!IsWindowEnabled((HWND)calc.cb[h[i]].hBtn))
EnableWindow((HWND)calc.cb[h[i]].hBtn, TRUE);
}
else {
if (IsWindowEnabled((HWND)calc.cb[h[i]].hBtn))
EnableWindow((HWND)calc.cb[h[i]].hBtn, FALSE);
}
}
if (w == ID_CALC_NS_DEC) {
for (i=0;i<CALC_WS_COUNT;i++) {
if (IsWindowEnabled((HWND)calc.cb[hws[i]].hBtn)) {
ShowWindow((HWND)calc.cb[hws[i]].hBtn, SW_HIDE);
EnableWindow((HWND)calc.cb[hws[i]].hBtn, FALSE);
}
}
for (i=0;i<CALC_MS_COUNT;i++) {
if (!IsWindowEnabled((HWND)calc.cb[hms[i]].hBtn)) {
ShowWindow((HWND)calc.cb[hms[i]].hBtn, SW_SHOWNORMAL);
EnableWindow((HWND)calc.cb[hms[i]].hBtn, TRUE);
}
}
}
else {
for (i=0;i<CALC_MS_COUNT;i++) {
if (IsWindowEnabled((HWND)calc.cb[hms[i]].hBtn)) {
ShowWindow((HWND)calc.cb[hms[i]].hBtn, SW_HIDE);
EnableWindow((HWND)calc.cb[hms[i]].hBtn, FALSE);
}
}
for (i=0;i<CALC_WS_COUNT;i++) {
if (!IsWindowEnabled((HWND)calc.cb[hws[i]].hBtn)) {
ShowWindow((HWND)calc.cb[hws[i]].hBtn, SW_SHOWNORMAL);
EnableWindow((HWND)calc.cb[hws[i]].hBtn, TRUE);
}
}
}
CheckMenuItem(menus[i], ID_CALC_MS_DEGREES, MF_CHECKED);
for (i=1;i<COUNT_MENUS;i++) { // skip the simple Standard calculator mode
CheckMenuItem(menus[i], ID_CALC_NS_HEX, (w == ID_CALC_NS_HEX ? MF_CHECKED : MF_UNCHECKED) );
CheckMenuItem(menus[i], ID_CALC_NS_DEC, (w == ID_CALC_NS_DEC ? MF_CHECKED : MF_UNCHECKED) );
CheckMenuItem(menus[i], ID_CALC_NS_OCT, (w == ID_CALC_NS_OCT ? MF_CHECKED : MF_UNCHECKED) );
CheckMenuItem(menus[i], ID_CALC_NS_BIN, (w == ID_CALC_NS_BIN ? MF_CHECKED : MF_UNCHECKED) );
}
if (wParam == ID_CALC_NS_DEC) {
SetMenu(hWnd, menus[MENU_SCIMS]);
}
else {
calc.displayMode = 0;
SetMenu(hWnd, menus[MENU_SCIWS]);
}
}
calc_buffer_display(&calc);
break;
case ID_CALC_MS_DEGREES:
case ID_CALC_MS_RADIANS:
case ID_CALC_MS_GRADS:
{
int i;
int w = LOWORD(wParam);
if (w == ID_CALC_MS_DEGREES)
calc.trigMode = TRIGMODE_DEGREES;
else if (w == ID_CALC_MS_RADIANS)
calc.trigMode = TRIGMODE_RADIANS;
else if (w == ID_CALC_MS_GRADS)
calc.trigMode = TRIGMODE_GRADS;
else
return 0;
for (i=0;i<CALC_MS_COUNT;i++)
SendMessage(calc.cb[64+i].hBtn, BM_SETCHECK, w == (ID_CALC_MS_DEGREES + i) ? 1 : 0, 0);
for (i=1;i<COUNT_MENUS;i++) { // skip the simple Standard calculator mode
CheckMenuItem(menus[i], ID_CALC_MS_DEGREES, (wParam == ID_CALC_MS_DEGREES) ? MF_CHECKED : MF_UNCHECKED);
CheckMenuItem(menus[i], ID_CALC_MS_RADIANS, (wParam == ID_CALC_MS_RADIANS) ? MF_CHECKED : MF_UNCHECKED);
CheckMenuItem(menus[i], ID_CALC_MS_GRADS, (wParam == ID_CALC_MS_GRADS) ? MF_CHECKED : MF_UNCHECKED);
}
}
SetFocus(hWnd);
return 0;
case ID_CALC_WS_QWORD:
case ID_CALC_WS_DWORD:
case ID_CALC_WS_WORD:
case ID_CALC_WS_BYTE:
{
int i;
int w = LOWORD(wParam);
calc.wordSize = w;
for (i=0;i<CALC_WS_COUNT;i++)
SendMessage(calc.cb[69+i].hBtn, BM_SETCHECK, LOWORD(wParam) == (ID_CALC_WS_QWORD + i) ? 1 : 0, 0);
for (i=1; i<COUNT_MENUS; i++) { // skip the simple Standard calculator mode
CheckMenuItem(menus[i], ID_CALC_WS_QWORD, (w == ID_CALC_WS_QWORD ? MF_CHECKED : MF_UNCHECKED) );
CheckMenuItem(menus[i], ID_CALC_WS_DWORD, (w == ID_CALC_WS_DWORD ? MF_CHECKED : MF_UNCHECKED) );
CheckMenuItem(menus[i], ID_CALC_WS_WORD, (w == ID_CALC_WS_WORD ? MF_CHECKED : MF_UNCHECKED) );
CheckMenuItem(menus[i], ID_CALC_WS_BYTE, (w == ID_CALC_WS_BYTE ? MF_CHECKED : MF_UNCHECKED) );
}
}
SetFocus(hWnd);
return 0;
case ID_CALC_CB_INV:
if (calc.invMode)
calc.invMode = 0;
else
calc.invMode = 1;
SendMessage(calc.cb[67].hBtn, BM_SETCHECK, calc.invMode ? TRUE : FALSE, 0);
SetFocus(hWnd);
return 0;
case ID_CALC_CB_HYP:
if (calc.hypMode)
calc.hypMode = 0;
else
calc.hypMode = 1;
SendMessage(calc.cb[68].hBtn, BM_SETCHECK, calc.hypMode ? TRUE : FALSE, 0);
SetFocus(hWnd);
return 0;
default:
if (HIWORD(wParam) == BN_CLICKED) {
if (calc.err &&
LOWORD(wParam) != ID_CALC_CLEAR_ENTRY &&
LOWORD(wParam) != ID_CALC_CLEAR_ALL) {
MessageBeep(0);
return 0;
}
else {
calc.err = 0;
}
switch (LOWORD(wParam)) {
case ID_CALC_ZERO:
case ID_CALC_ONE:
case ID_CALC_TWO:
case ID_CALC_THREE:
case ID_CALC_FOUR:
case ID_CALC_FIVE:
case ID_CALC_SIX:
case ID_CALC_SEVEN:
case ID_CALC_EIGHT:
case ID_CALC_NINE:
SendMessage(hWnd, WM_CHAR, LOWORD(wParam)+TEXT('0') , lParam);
break;
case ID_CALC_A:
SendMessage(hWnd, WM_CHAR, TEXT('a'), lParam);
break;
case ID_CALC_B:
SendMessage(hWnd, WM_CHAR, TEXT('b'), lParam);
break;
case ID_CALC_C:
SendMessage(hWnd, WM_CHAR, TEXT('c'), lParam);
break;
case ID_CALC_D:
SendMessage(hWnd, WM_CHAR, TEXT('d'), lParam);
break;
case ID_CALC_E:
SendMessage(hWnd, WM_CHAR, TEXT('e'), lParam);
break;
case ID_CALC_F:
SendMessage(hWnd, WM_CHAR, TEXT('f'), lParam);
break;
case ID_CALC_DECIMAL:
SendMessage(hWnd, WM_CHAR, TEXT('.'), lParam);
break;
case ID_CALC_BACKSPACE:
SendMessage(hWnd, WM_CHAR, TEXT('\b'), lParam);
break;
case ID_CALC_CLEAR_ENTRY:
SendMessage(hWnd, WM_KEYDOWN, VK_DELETE , lParam);
break;
case ID_CALC_CLEAR_ALL:
SendMessage(hWnd, WM_CHAR, TEXT('\x1b'), lParam);
break;
case ID_CALC_MEM_CLEAR:
SendMessage(hWnd, WM_CHAR, 0x0c, lParam);
break;
case ID_CALC_MEM_RECALL:
SendMessage(hWnd, WM_CHAR, 0x12, lParam);
break;
case ID_CALC_MEM_STORE:
SendMessage(hWnd, WM_CHAR, 0x0d, NUMBER_OF_THE_BEAST); // trying to tell between Return and Ctrl+M
break;
case ID_CALC_MEM_PLUS:
SendMessage(hWnd, WM_CHAR, 0x10, lParam);
break;
case ID_CALC_SQRT:
SendMessage(hWnd, WM_CHAR, TEXT('?'), lParam); // this is not a wincalc keystroke
break;
case ID_CALC_SQUARE:
SendMessage(hWnd, WM_CHAR, TEXT('@'), lParam);
break;
case ID_CALC_PI:
SendMessage(hWnd, WM_CHAR, TEXT('p'), lParam);
break;
case ID_CALC_LN:
SendMessage(hWnd, WM_CHAR, TEXT('n'), lParam);
break;
case ID_CALC_LOG10:
SendMessage(hWnd, WM_CHAR, TEXT('l'), lParam);
break;
case ID_CALC_CUBE:
SendMessage(hWnd, WM_CHAR, TEXT('#'), lParam);
break;
case ID_CALC_POWER:
SendMessage(hWnd, WM_CHAR, TEXT('y'), lParam);
break;
case ID_CALC_SIN:
SendMessage(hWnd, WM_CHAR, TEXT('s'), lParam);
break;
case ID_CALC_COS:
SendMessage(hWnd, WM_CHAR, TEXT('o'), lParam);
break;
case ID_CALC_TAN:
SendMessage(hWnd, WM_CHAR, TEXT('t'), lParam);
break;
case ID_CALC_LSH:
SendMessage(hWnd, WM_CHAR, TEXT('<'), lParam);
break;
case ID_CALC_NOT:
SendMessage(hWnd, WM_CHAR, TEXT('~'), lParam);
break;
case ID_CALC_AND:
SendMessage(hWnd, WM_CHAR, TEXT('&'), lParam);
break;
case ID_CALC_OR:
SendMessage(hWnd, WM_CHAR, TEXT('|'), lParam);
break;
case ID_CALC_XOR:
SendMessage(hWnd, WM_CHAR, TEXT('^'), lParam);
break;
case ID_CALC_INT:
SendMessage(hWnd, WM_CHAR, TEXT(';'), lParam);
break;
case ID_CALC_FACTORIAL:
SendMessage(hWnd, WM_CHAR, TEXT('!'), lParam);
break;
case ID_CALC_RECIPROCAL:
SendMessage(hWnd, WM_CHAR, TEXT('r'), lParam);
break;
case ID_CALC_SIGN:
SendMessage(hWnd, WM_KEYDOWN, VK_F9, lParam);
break;
case ID_CALC_PLUS:
SendMessage(hWnd, WM_CHAR, TEXT('+'), lParam);
break;
case ID_CALC_MINUS:
SendMessage(hWnd, WM_CHAR, TEXT('-'), lParam);
break;
case ID_CALC_MULTIPLY:
SendMessage(hWnd, WM_CHAR, TEXT('*'), lParam);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -