📄 ec.c
字号:
# include <windows.h>
# include "resource.h"
# include "expc.c"
BOOL CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
int WINAPI WinMain(HINSTANCE hInst,HINSTANCE hPrevInst,LPSTR lpCmd,int nShowCmd)
{
DialogBox(hInst,MAKEINTRESOURCE(IDD_MAINDIALOG),NULL,(DLGPROC)WndProc);
return 0;
}
BOOL CALLBACK WndProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
// UINT i=0,j=0;
static char buff[MAXLEN];
int len;
double result;
static HWND hWndeditcontent;
static HWND hWndeditexp;
static HWND hWndTopMost;
static int TopMostFlag=0;
DWORD i,j,lPos=0;
DWORD lRowCnt;
// DWORD lColCnt;
LPBYTE lpClip,lpGlobalMemory;
DWORD dwLength;
HANDLE hClipMemory,hGlobalMemory;
DWORD m,n;
DWORD dwPos[5000],dwPrePos[5000];
switch(uMsg)
{
case WM_INITDIALOG:
hWndeditcontent=GetDlgItem(hWnd,IDC_EDITCONTENT);
hWndeditexp=GetDlgItem(hWnd,IDC_EDITEXP);
hWndTopMost=GetDlgItem(hWnd,IDTOPMOST);
return TRUE;
case WM_COMMAND:
switch(LOWORD(wParam))
{
case IDCALC:
len=GetDlgItemText(hWnd,IDC_EDITEXP,buff,MAXLEN);
if (len>0)
{
if (lstrcmpi(buff,"help")==0)
{
SendMessage(hWndeditcontent,
EM_REPLACESEL,
FALSE,
(LPARAM)"运算符:加+ ,减 - ,乘 * ,除/ ,幂 ^ ,取模% 。\r\n支持的函数:\r\n abs,acos,asin,atan,cos,\r\ncosh,exp,log,log10,sin,\r\nsinh,tan,tanh,sqrt,ceil,floor\r\n");
return TRUE;
}
if (lstrcmpi(buff,"clear")==0)
{
SendMessage(hWndeditcontent,
EM_REPLACESEL,
FALSE,
(LPARAM)"");
return TRUE;
}
buff[len]='\0';
result=calcExp(buff);
buff[len]='=';
if (expcerr!=0)
{
buff[len+1]='\0';
SendMessage(hWndeditcontent,EM_REPLACESEL,TRUE,(LPARAM)(LPCTSTR)buff);
SendMessage(hWndeditcontent,EM_REPLACESEL,FALSE,(LPARAM)expcerrmsg[expcerr]);
SendMessage(hWndeditcontent,EM_REPLACESEL,FALSE,(LPARAM)"\r\n");
return TRUE;
}
sprintf(&buff[len+1],"%.12g",result);
for(i=0;i<250;i++)
SendMessage(hWndeditcontent,WM_KEYDOWN,(WPARAM)(VK_DOWN),(LPARAM)0);
SendMessage(hWndeditcontent,EM_REPLACESEL,TRUE,(LPARAM)(LPCTSTR)buff);
SendMessage(hWndeditcontent,EM_REPLACESEL,FALSE,(LPARAM)"\r\n");
}
return TRUE;
case IDTOPMOST:
if (TopMostFlag)
{
SetWindowPos(hWnd,HWND_NOTOPMOST,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);
SetWindowText(hWndTopMost,"总在最前面");
TopMostFlag=0;
}
else
{
SetWindowPos(hWnd,HWND_TOPMOST,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);
SetWindowText(hWndTopMost,"不在最前面");
TopMostFlag=1;
}
return TRUE;
case IDROWTOCOL: /*剪贴板内容行列互置*/
if (!OpenClipboard(hWnd))
{
MessageBox(hWnd,"不能打开剪粘板!","提示",MB_OK);
return TRUE;
}
hClipMemory=GetClipboardData(CF_TEXT);
if(hClipMemory==NULL)
{
CloseClipboard();
MessageBox(hWnd,"不能获得剪切板数据!","提示",MB_OK);
return TRUE;
}
lpClip=(LPBYTE)GlobalLock(hClipMemory);
dwLength=GlobalSize(hClipMemory);
/*计算行数*/
j=0;
dwPrePos[0]=0;
for(i=0;i<dwLength && i<5000;i++)
{
if (lpClip[i]==10)
{
if (j>0)
{
dwPrePos[j]=dwPos[j - 1]+1;
}
dwPos[j]= i;
j++;
}
if (j>=5000)
{
CloseClipboard();
MessageBox(hWnd,"行数过多!","提示",MB_OK);
return TRUE;
}
}
lRowCnt =j;
hGlobalMemory=GlobalAlloc(GHND|GMEM_DDESHARE,dwLength+lRowCnt*2);
if (hGlobalMemory==NULL)
{
CloseClipboard();
MessageBox(hWnd,"不能分配内存!","提示",MB_OK);
return TRUE;
}
// 锁定内存,获得内存指针
lpGlobalMemory=(LPBYTE)GlobalLock(hGlobalMemory);
m=0;
i=0;
while (dwPrePos[i]<dwPos[i])
{
for(i=0;i<lRowCnt;i++)
{
for(n=dwPrePos[i];n<dwPos[i];n++)
{
if (lpClip[n]=='\t' || lpClip[n]=='\r')
{
if (i < lRowCnt -1)
{
lpGlobalMemory[m]='\t';
m++;
}
break;
}
lpGlobalMemory[m]=lpClip[n];
m++;
}
dwPrePos[i]=n+1;
}
i=0;
lpGlobalMemory[m]='\r';
m++;
lpGlobalMemory[m]='\n';
m++;
}
GlobalUnlock(hClipMemory);
if(EmptyClipboard()==0)
{
CloseClipboard();
GlobalFree(hGlobalMemory);
MessageBox(hWnd,"清空剪切板数据出错!","提示",MB_OK);
return TRUE;
}
GlobalUnlock(hGlobalMemory);
if(SetClipboardData(CF_TEXT,hGlobalMemory)==NULL)
{
CloseClipboard();
GlobalFree(hGlobalMemory);
MessageBox(hWnd,"设置剪切板数据出错!","提示",MB_OK);
return TRUE;
}
CloseClipboard();
GlobalFree(hGlobalMemory);
return TRUE;
}
break;
case WM_CLOSE:
EndDialog(hWnd,0);
return TRUE;
case WM_DESTROY:
PostQuitMessage(0);
return TRUE;
}
return FALSE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -