如何做一个计算器的C语言程序,一个纯C实现的图形化计算器

下面是编程之家 jb51.cc 通过网络收集整理的代码片段。

编程之家小编现在分享给大家,也给大家做个参考。

#include"graphics.h"

#include"dos.h"

#include"stdio.h"

#include"math.h"

union REGS i,o;

char *text[]={ "7","8","9","*","4","5","6","/","1","2","3","+","0","00",".","-","M","M+","M-","+/-","MR","MC","x^2","sr","OFF","AC","CE","="};

int k=0,pass,op,prop,newnum=1,bt,memo=1,d=0,sq;

long double num=0,accum,m;

void normalbutton(int,int,char**);

void main()

{

int gd=DETECT,gm,x1,x2,y1,y2,i,j,maxx,maxy,x,y,button;

char *text1[]={""","T","o"," ","K","n","w","a","b","u","t","m","e","l","g",":"};

char *text2[]={"w","c","i","s","k","d","p","h"};

initgraph(&gd,&gm,"");

if(initmouse()==0)

{

closegraph();

restorecrtmode();

printf("

Mouse driver not loded");

exit(1);

}

showmouseptr();

// x=y=50;

movemouseptr(&x,&y);

setbkcolor(11);

setcolor(1);

rectangle(198,140,417,163);

rectangle(199,141,418,164);

rectangle(197,139,416,162);

rectangle(185,130,430,450);

rectangle(184,129,431,451);

rectangle(182,127,433,454);

rectangle(181,126,434,453);

//setfillstyle(SOLID_FILL,3);

//bar(200,142,415,161);

outtextxy(200,50,"A Calculator in C");

outtextxy(200,100,"Press OFF button to exit....");

y1=140;

y2=160;

for(j=0;j<7;j++)

{

x1=200;

x2=235;

y1+=40;

y2

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以为您提供一些思路和代码示例。 首先,需要用到C语言的图形库来实现窗口和鼠标交互。常用的图形库有Windows API、GTK+、Qt等,这里以Windows API为例。 以下是一个简单的计算器程序的代码示例: ```c #include <windows.h> LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam); int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { // 注册窗口类 WNDCLASS wc = {0}; wc.lpfnWndProc = WndProc; wc.hInstance = hInstance; wc.hCursor = LoadCursor(NULL, IDC_ARROW); wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1); wc.lpszClassName = "Calculator"; RegisterClass(&wc); // 创建窗口 HWND hWnd = CreateWindow("Calculator", "Calculator", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 320, 240, NULL, NULL, hInstance, NULL); // 显示窗口 ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd); // 消息循环 MSG msg = {0}; while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return (int)msg.wParam; } LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { case WM_CREATE: // 创建控件 CreateWindow("BUTTON", "1", WS_VISIBLE | WS_CHILD, 10, 50, 50, 50, hWnd, (HMENU)1, NULL, NULL); CreateWindow("BUTTON", "2", WS_VISIBLE | WS_CHILD, 70, 50, 50, 50, hWnd, (HMENU)2, NULL, NULL); CreateWindow("BUTTON", "+", WS_VISIBLE | WS_CHILD, 130, 50, 50, 50, hWnd, (HMENU)3, NULL, NULL); CreateWindow("BUTTON", "=", WS_VISIBLE | WS_CHILD, 190, 50, 50, 50, hWnd, (HMENU)4, NULL, NULL); CreateWindow("STATIC", "", WS_VISIBLE | WS_CHILD | SS_CENTER, 10, 10, 230, 30, hWnd, (HMENU)5, NULL, NULL); break; case WM_COMMAND: // 处理按钮点击事件 switch (LOWORD(wParam)) { case 1: SetWindowText(GetDlgItem(hWnd, 5), "1"); break; case 2: SetWindowText(GetDlgItem(hWnd, 5), "2"); break; case 3: SetWindowText(GetDlgItem(hWnd, 5), "+"); break; case 4: // 计算结果 char text[10]; GetWindowText(GetDlgItem(hWnd, 5), text, 10); int a = 0, b = 0, result = 0; sscanf(text, "%d+%d", &a, &b); result = a + b; sprintf(text, "%d", result); SetWindowText(GetDlgItem(hWnd, 5), text); break; } break; case WM_DESTROY: // 退出程序 PostQuitMessage(0); break; default: return DefWindowProc(hWnd, message, wParam, lParam); } return 0; } ``` 这个程序实现一个简单的计算器,有四个按钮和一个文本框。当按钮被点击时,文本框的内容会发生变化,当“=”按钮被点击时,程序会计算文本框中的表达式并显示结果。 您需要在这个程序的基础上添加鼠标交互功能。例如,当鼠标在按钮上移动时,按钮的颜色会发生变化;当鼠标在文本框上单击时,文本框中的内容会被选中。您可以利用Windows API提供的消息和事件来实现这些功能。例如: ```c case WM_MOUSEMOVE: // 处理鼠标移动事件 if (GetDlgItem(hWnd, 1) == WindowFromPoint(GETPOINTSTOPOINT(lParam))) { SetWindowLong(GetDlgItem(hWnd, 1), GWL_STYLE, GetWindowLong(GetDlgItem(hWnd, 1), GWL_STYLE) | BS_DEFPUSHBUTTON); SetWindowLong(GetDlgItem(hWnd, 2), GWL_STYLE, GetWindowLong(GetDlgItem(hWnd, 2), GWL_STYLE) & ~BS_DEFPUSHBUTTON); SetWindowLong(GetDlgItem(hWnd, 3), GWL_STYLE, GetWindowLong(GetDlgItem(hWnd, 3), GWL_STYLE) & ~BS_DEFPUSHBUTTON); SetWindowLong(GetDlgItem(hWnd, 4), GWL_STYLE, GetWindowLong(GetDlgItem(hWnd, 4), GWL_STYLE) & ~BS_DEFPUSHBUTTON); InvalidateRect(GetDlgItem(hWnd, 1), NULL, TRUE); InvalidateRect(GetDlgItem(hWnd, 2), NULL, TRUE); InvalidateRect(GetDlgItem(hWnd, 3), NULL, TRUE); InvalidateRect(GetDlgItem(hWnd, 4), NULL, TRUE); } // ... break; case WM_LBUTTONDOWN: // 处理鼠标左键单击事件 if (GetDlgItem(hWnd, 5) == WindowFromPoint(GETPOINTSTOPOINT(lParam))) { SendMessage(GetDlgItem(hWnd, 5), EM_SETSEL, 0, -1); } // ... break; ``` 这里只是简单地演示了如何实现鼠标交互,您可以根据自己的需要进一步扩展和优化程序
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值