⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 winecalc.c

📁 ReactOS是一些高手根据Windows XP的内核编写出的类XP。内核实现机理和API函数调用几乎相同。甚至可以兼容XP的程序。喜欢研究系统内核的人可以看一看。
💻 C
📖 第 1 页 / 共 5 页
字号:
                    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 + -