📄 winecalc.c
字号:
break;
case ID_CALC_DIVIDE:
SendMessage(hWnd, WM_CHAR, TEXT('/'), lParam);
break;
case ID_CALC_EQUALS:
SendMessage(hWnd, WM_CHAR, TEXT('='), lParam);
break;
case ID_CALC_PERCENT:
SendMessage(hWnd, WM_CHAR, TEXT('%'), lParam);
break;
case ID_CALC_EXP:
SendMessage(hWnd, WM_CHAR, TEXT('x'), lParam);
break;
case ID_CALC_FE:
SendMessage(hWnd, WM_CHAR, TEXT('v'), lParam);
break;
case ID_CALC_LEFTPAREN:
SendMessage(hWnd, WM_CHAR, TEXT('('), lParam);
break;
case ID_CALC_RIGHTPAREN:
SendMessage(hWnd, WM_CHAR, TEXT(')'), lParam);
break;
case ID_CALC_MOD:
SendMessage(hWnd, WM_CHAR, TEXT('%'), lParam);
break;
case ID_CALC_DAT:
SendMessage(hWnd, WM_KEYDOWN, VK_INSERT, lParam);
break;
case ID_CALC_AVE:
SendMessage(hWnd, WM_CHAR, TEXT('\x01'), lParam); // Ctrl+A
break;
case ID_CALC_S:
SendMessage(hWnd, WM_CHAR, TEXT('\x04'), lParam); // Ctrl+D
break;
case ID_CALC_STA:
SendMessage(hWnd, WM_CHAR, TEXT('\x13'), lParam); // Ctrl+S
break;
case ID_CALC_SUM:
SendMessage(hWnd, WM_CHAR, TEXT('\x14'), lParam); // Ctrl+T
break;
case ID_CALC_DMS:
SendMessage(hWnd, WM_CHAR, TEXT('m'), lParam);
break;
default:
break;
} // button message switch
SetFocus(hWnd);
if (debug)
show_debug(&calc, TEXT("After WM_CHAR"), wParam, lParam);
return 0;
} // if BN_CLICKED
} // WM_COMMAND switch
} // Main Message switch
return( DefWindowProc( hWnd, msg, wParam, lParam ));
} // MainProc
void InitLuts(void)
{
int i;
// initialize keys lut for validating keystrokes in various number bases
for (i=TEXT('0');i<=TEXT('9');i++) {
keys[NBASE_HEX][i] = 1;
keys[NBASE_DECIMAL][i] = 1;
if (i <= TEXT('7'))
keys[NBASE_OCTAL][i] = 1;
if (i <= TEXT('1'))
keys[NBASE_BINARY][i] = 1;
}
for (i=TEXT('a');i<=TEXT('f');i++)
keys[NBASE_HEX][i] = 1;
for (i=TEXT('A');i<=TEXT('F');i++)
keys[NBASE_HEX][i] = 1;
}
void InitMenus(HINSTANCE hInst)
{
if (!(menus[MENU_STD] = LoadMenu(hInst,TEXT("MAIN_MENU"))))
exit(1);
if (!(menus[MENU_SCIMS] = LoadMenu(hInst,TEXT("SCIMS_MENU"))))
exit(1);
if (!(menus[MENU_SCIWS] = LoadMenu(hInst,TEXT("SCIWS_MENU"))))
exit(1);
CheckMenuItem(menus[MENU_STD], IDM_MODE_STANDARD, MF_CHECKED);
if (calc.digitGrouping) {
CheckMenuItem(menus[MENU_STD], IDM_DIGIT_GROUPING, MF_CHECKED);
CheckMenuItem(menus[MENU_SCIMS], IDM_DIGIT_GROUPING, MF_CHECKED);
CheckMenuItem(menus[MENU_SCIWS], IDM_DIGIT_GROUPING, MF_CHECKED);
}
calc_setmenuitem_radio(menus[MENU_STD], IDM_MODE_STANDARD);
calc_setmenuitem_radio(menus[MENU_STD], IDM_MODE_SCIENTIFIC);
calc_setmenuitem_radio(menus[MENU_SCIMS], IDM_MODE_STANDARD);
calc_setmenuitem_radio(menus[MENU_SCIMS], IDM_MODE_SCIENTIFIC);
calc_setmenuitem_radio(menus[MENU_SCIMS], ID_CALC_NS_HEX);
calc_setmenuitem_radio(menus[MENU_SCIMS], ID_CALC_NS_DEC);
calc_setmenuitem_radio(menus[MENU_SCIMS], ID_CALC_NS_OCT);
calc_setmenuitem_radio(menus[MENU_SCIMS], ID_CALC_NS_BIN);
calc_setmenuitem_radio(menus[MENU_SCIMS], ID_CALC_MS_DEGREES);
calc_setmenuitem_radio(menus[MENU_SCIMS], ID_CALC_MS_RADIANS);
calc_setmenuitem_radio(menus[MENU_SCIMS], ID_CALC_MS_GRADS);
CheckMenuItem(menus[MENU_SCIMS], IDM_MODE_SCIENTIFIC, MF_CHECKED);
CheckMenuItem(menus[MENU_SCIMS], ID_CALC_NS_DEC, MF_CHECKED);
CheckMenuItem(menus[MENU_SCIMS], ID_CALC_MS_DEGREES, MF_CHECKED);
calc_setmenuitem_radio(menus[MENU_SCIWS], IDM_MODE_STANDARD);
calc_setmenuitem_radio(menus[MENU_SCIWS], IDM_MODE_SCIENTIFIC);
calc_setmenuitem_radio(menus[MENU_SCIWS], ID_CALC_NS_HEX);
calc_setmenuitem_radio(menus[MENU_SCIWS], ID_CALC_NS_DEC);
calc_setmenuitem_radio(menus[MENU_SCIWS], ID_CALC_NS_OCT);
calc_setmenuitem_radio(menus[MENU_SCIWS], ID_CALC_NS_BIN);
calc_setmenuitem_radio(menus[MENU_SCIWS], ID_CALC_WS_QWORD);
calc_setmenuitem_radio(menus[MENU_SCIWS], ID_CALC_WS_DWORD);
calc_setmenuitem_radio(menus[MENU_SCIWS], ID_CALC_WS_WORD);
calc_setmenuitem_radio(menus[MENU_SCIWS], ID_CALC_WS_BYTE);
CheckMenuItem(menus[MENU_SCIWS], IDM_MODE_SCIENTIFIC, MF_CHECKED);
CheckMenuItem(menus[MENU_SCIWS], ID_CALC_NS_DEC, MF_CHECKED);
CheckMenuItem(menus[MENU_SCIWS], ID_CALC_WS_QWORD, MF_CHECKED);
}
void InitCalc (CALC *calc)
{
int n;
int skipx;
int skipy;
int top_button;
HINSTANCE hInst = calc->hInst;
HFONT hFont = GetStockObject(DEFAULT_GUI_FONT);
calc->trigMode = TRIGMODE_DEGREES;
calc->numBase = NBASE_DECIMAL;
calc->init = 1;
if (calc->new) {
calc->new = 0;
calc->value = 0;
calc->memory = 0;
calc->displayMode = 0;
calc->buffer[0] = TEXT('\0');
_tcscpy(calc->display, TEXT("0."));
calc->err = 0;
calc->next = TEXT('\0');
calc->wordSize = WORDSIZE_QWORD;
calc->invMode = 0;
calc->hypMode = 0;
}
if (calc->sciMode) {
calc->numButtons = CALC_BUTTONS_STANDARD;
// Row 1 (top)
skipx = MARGIN_LEFT;
skipy = CALC_STANDARD_MARGIN_TOP + CALC_EDIT_HEIGHT;
calc->cb[0].id = 0;
_tcscpy(calc->cb[0].label,TEXT("FILLER"));
calc->cb[0].color = CALC_COLOR_BLUE;
calc->cb[0].r.left = skipx + 4;
calc->cb[0].r.top = skipy + 2;
calc->cb[0].r.right = skipx + SZ_FILLER_X - 2;
calc->cb[0].r.bottom = skipy + SZ_FILLER_Y - 2;
calc->cb[0].enable = 1;
skipx = SZ_FILLER_X + MARGIN_STANDARD_BIG_X + 11;
calc->cb[1].id = ID_CALC_BACKSPACE;
LoadString( hInst, IDS_BTN_BACKSPACE, calc->cb[1].label, sizeof(calc->cb[1].label) / sizeof(calc->cb[1].label[0]));
calc->cb[1].color = CALC_COLOR_RED;
calc->cb[1].r.left = skipx;
calc->cb[1].r.top = skipy;
calc->cb[1].r.right = SZ_BIGBTN_X;
calc->cb[1].r.bottom = SZ_BIGBTN_Y;
calc->cb[1].enable = 1;
skipx += SZ_BIGBTN_X + MARGIN_SMALL_X;
calc->cb[2].id = ID_CALC_CLEAR_ENTRY;
LoadString( hInst, IDS_BTN_CLEAR_ENTRY, calc->cb[2].label, sizeof(calc->cb[2].label) / sizeof(calc->cb[2].label[0]));
calc->cb[2].color = CALC_COLOR_RED;
calc->cb[2].r.left = skipx;
calc->cb[2].r.top = skipy;
calc->cb[2].r.right = SZ_BIGBTN_X;
calc->cb[2].r.bottom = SZ_BIGBTN_Y;
calc->cb[2].enable = 1;
skipx += SZ_BIGBTN_X + MARGIN_SMALL_X;
calc->cb[3].id = ID_CALC_CLEAR_ALL;
LoadString( hInst, IDS_BTN_CLEAR_ALL, calc->cb[3].label, sizeof(calc->cb[3].label) / sizeof(calc->cb[3].label[0]));
calc->cb[3].color = CALC_COLOR_RED;
calc->cb[3].r.left = skipx;
calc->cb[3].r.top = skipy;
calc->cb[3].r.right = SZ_BIGBTN_X;
calc->cb[3].r.bottom = SZ_BIGBTN_Y;
calc->cb[3].enable = 1;
// Row 2
skipx = MARGIN_LEFT;
skipy += SZ_BIGBTN_Y + MARGIN_BIG_Y;
calc->cb[4].id = ID_CALC_MEM_CLEAR;
LoadString( hInst, IDS_BTN_MEM_CLEAR, calc->cb[4].label, sizeof(calc->cb[4].label) / sizeof(calc->cb[4].label[0]));
calc->cb[4].color = CALC_COLOR_RED;
calc->cb[4].r.left = skipx;
calc->cb[4].r.top = skipy;
calc->cb[4].r.right = SZ_MEDBTN_X;
calc->cb[4].r.bottom = SZ_MEDBTN_Y;
calc->cb[4].enable = 1;
skipx += SZ_MEDBTN_X + MARGIN_STANDARD_BIG_X;
calc->cb[5].id = ID_CALC_SEVEN;
_tcscpy(calc->cb[5].label,TEXT("7"));
calc->cb[5].color = CALC_COLOR_BLUE;
calc->cb[5].r.left = skipx;
calc->cb[5].r.top = skipy;
calc->cb[5].r.right = SZ_MEDBTN_X;
calc->cb[5].r.bottom = SZ_MEDBTN_Y;
calc->cb[5].enable = 1;
skipx += SZ_MEDBTN_X + MARGIN_SMALL_X;
calc->cb[6].id = ID_CALC_EIGHT;
_tcscpy(calc->cb[6].label,TEXT("8"));
calc->cb[6].color = CALC_COLOR_BLUE;
calc->cb[6].r.left = skipx;
calc->cb[6].r.top = skipy;
calc->cb[6].r.right = SZ_MEDBTN_X;
calc->cb[6].r.bottom = SZ_MEDBTN_Y;
calc->cb[6].enable = 1;
skipx += SZ_MEDBTN_X + MARGIN_SMALL_X;
calc->cb[7].id = ID_CALC_NINE;
_tcscpy(calc->cb[7].label,TEXT("9"));
calc->cb[7].color = CALC_COLOR_BLUE;
calc->cb[7].r.left = skipx;
calc->cb[7].r.top = skipy;
calc->cb[7].r.right = SZ_MEDBTN_X;
calc->cb[7].r.bottom = SZ_MEDBTN_Y;
calc->cb[7].enable = 1;
skipx += SZ_MEDBTN_X + MARGIN_SMALL_X;
calc->cb[8].id = ID_CALC_DIVIDE;
_tcscpy(calc->cb[8].label,TEXT("/"));
calc->cb[8].color = CALC_COLOR_RED;
calc->cb[8].r.left = skipx;
calc->cb[8].r.top = skipy;
calc->cb[8].r.right = SZ_MEDBTN_X;
calc->cb[8].r.bottom = SZ_MEDBTN_Y;
calc->cb[8].enable = 1;
skipx += SZ_MEDBTN_X + MARGIN_SMALL_X;
calc->cb[9].id = ID_CALC_SQRT;
LoadString( hInst, IDS_BTN_SQRT, calc->cb[9].label, sizeof(calc->cb[9].label) / sizeof(calc->cb[9].label[0]));
calc->cb[9].color = CALC_COLOR_BLUE;
calc->cb[9].r.left = skipx;
calc->cb[9].r.top = skipy;
calc->cb[9].r.right = SZ_MEDBTN_X;
calc->cb[9].r.bottom = SZ_MEDBTN_Y;
calc->cb[9].enable = 1;
// Row 3
skipx = MARGIN_LEFT;
skipy += SZ_MEDBTN_Y + MARGIN_SMALL_Y;
calc->cb[10].id = ID_CALC_MEM_RECALL;
LoadString( hInst, IDS_BTN_MEM_RECALL, calc->cb[10].label, sizeof(calc->cb[10].label) / sizeof(calc->cb[10].label[0]));
calc->cb[10].color = CALC_COLOR_RED;
calc->cb[10].r.left = skipx;
calc->cb[10].r.top = skipy;
calc->cb[10].r.right = SZ_MEDBTN_X;
calc->cb[10].r.bottom = SZ_MEDBTN_Y;
calc->cb[10].enable = 1;
skipx += SZ_MEDBTN_X + MARGIN_STANDARD_BIG_X;
calc->cb[11].id = ID_CALC_FOUR;
_tcscpy(calc->cb[11].label,TEXT("4"));
calc->cb[11].color = CALC_COLOR_BLUE;
calc->cb[11].r.left = skipx;
calc->cb[11].r.top = skipy;
calc->cb[11].r.right = SZ_MEDBTN_X;
calc->cb[11].r.bottom = SZ_MEDBTN_Y;
calc->cb[11].enable = 1;
skipx += SZ_MEDBTN_X + MARGIN_SMALL_X;
calc->cb[12].id = ID_CALC_FIVE;
_tcscpy(calc->cb[12].label,TEXT("5"));
calc->cb[12].color = CALC_COLOR_BLUE;
calc->cb[12].r.left = skipx;
calc->cb[12].r.top = skipy;
calc->cb[12].r.right = SZ_MEDBTN_X;
calc->cb[12].r.bottom = SZ_MEDBTN_Y;
calc->cb[12].enable = 1;
skipx += SZ_MEDBTN_X + MARGIN_SMALL_X;
calc->cb[13].id = ID_CALC_SIX;
_tcscpy(calc->cb[13].label,TEXT("6"));
calc->cb[13].color = CALC_COLOR_BLUE;
calc->cb[13].r.left = skipx;
calc->cb[13].r.top = skipy;
calc->cb[13].r.right = SZ_MEDBTN_X;
calc->cb[13].r.bottom = SZ_MEDBTN_Y;
calc->cb[13].enable = 1;
skipx += SZ_MEDBTN_X + MARGIN_SMALL_X;
calc->cb[14].id = ID_CALC_MULTIPLY;
_tcscpy(calc->cb[14].label,TEXT("*"));
calc->cb[14].color = CALC_COLOR_RED;
calc->cb[14].r.left = skipx;
calc->cb[14].r.top = skipy;
calc->cb[14].r.right = SZ_MEDBTN_X;
calc->cb[14].r.bottom = SZ_MEDBTN_Y;
calc->cb[14].enable = 1;
skipx += SZ_MEDBTN_X + MARGIN_SMALL_X;
calc->cb[15].id = ID_CALC_PERCENT;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -