📄 testdial.cpp
字号:
// testdial.cpp : Defines the entry point for the application.
//
#include "stdafx.h"
#include "defH.h"
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
// TODO: Place code here
HANDLE hThread;
DWORD IDThread;
HInstance=hInstance;
iCmdShow=nCmdShow;
hEvent = CreateEvent(NULL,FALSE,FALSE,NULL);
hThread =CreateThread(NULL,NULL,ThreadProc,0,0,&IDThread);
DialogBoxParam(hInstance,(LPCTSTR)IDD_DIALOG1,NULL,DlgProc,NULL);
return 0;
}
//主窗口消息处理函数
BOOL CALLBACK DlgProc(HWND hwnd,UINT imsg,WPARAM wParam,LPARAM lParam)
{
HWND hItem;
HWND hItem3;
HDC hdc;
PAINTSTRUCT ps;
static char* szstritem[]={"样本均值","样本方差","样本标准差","样本K阶原点距","样本K阶中心距"};
int i,n;
char *pf;
double tmp;
switch(imsg)
{
case WM_INITDIALOG:
SetClassLong(hwnd,GCL_HICON,(long)LoadIcon(HInstance,(LPCTSTR)IDI_ICON1));
BringWindowToTop(hwnd);
hItem=GetDlgItem(hwnd,IDC_EDIT_1);
addr=(WNDPROC)SetWindowLong(hItem,GWL_WNDPROC,(long)EditProc);
hItem=GetDlgItem(hwnd,IDC_EDIT_2);
SendMessage(hItem,ES_READONLY,0,0);
hItem=GetDlgItem(hwnd,IDC_COMBOX);
for(i=0;i<5;i++)
{
SendMessage(hItem,CB_INSERTSTRING,(WPARAM)-1,(LPARAM)szstritem[i]);
}
SendMessage(hItem,CBS_DROPDOWNLIST,NULL,NULL);
return TRUE;
case WM_PAINT:
hdc=BeginPaint(hwnd,&ps);
EndPaint(hwnd,&ps);
hItem=GetDlgItem(hwnd,IDC_EDIT_1);
SetFocus(hItem);
//组合框的初始化
return TRUE;
case WM_COMMAND:
//低位消息
switch(LOWORD(wParam))
{
case IDC_EXIT:
EndDialog(hwnd,0);
return TRUE;
case IDC_ABOUT:
DialogBoxParam(HInstance,(LPCTSTR)IDD_DIALOG2,hwnd,(DLGPROC)AboutDlgProc,NULL);
return TRUE;
case IDC_CLEAR:
hItem=GetDlgItem(hwnd,IDC_EDIT_1);
SetWindowText(hItem,"");
return TRUE;
case ID_COUNT:
hItem=GetDlgItem(hwnd,IDC_EDIT_1);
GetWindowText(hItem,BUFF,1024);
//add client code;
// SetEvent(hEvent);
n=DivStr(BUFF);
pf=BUFF;
for(i=0;i<n;i++)
{
tmp=CharToDou(pf);
swatch[i]=tmp;
pf=pf+strlen(pf)+1;
}
hItem=GetDlgItem(hwnd,IDC_EDIT_2);
average=aver(swatch,n);
switch(cbIndex)
{
case 0:
sprintf(lpStrInput,"%lf",average);
SetWindowText(hItem,lpStrInput);
break;
case 1:
Variance=Accum(swatch,n,average,2);
sprintf(lpStrInput,"%lf",Variance/(n-1));
SetWindowText(hItem,lpStrInput);
break;
case 2:
Variance=Accum(swatch,n,average,2);
SqrtVaria=sqrt(Variance/(n-1));
sprintf(lpStrInput,"%lf",SqrtVaria);
SetWindowText(hItem,lpStrInput);
break;
case 3:
hItem3=GetDlgItem(hwnd,IDC_EDIT_3);
GetWindowText(hItem3,lpStrRank,4);
rank=atoi(lpStrRank);
sprintf(lpStrInput,"%lf",(Accum(swatch,n,0,rank))/n);
SetWindowText(hItem,lpStrInput);
break;
case 4:
hItem3=GetDlgItem(hwnd,IDC_EDIT_3);
GetWindowText(hItem3,lpStrRank,4);
rank=atoi(lpStrRank);
sprintf(lpStrInput,"%lf",Accum(swatch,n,average,rank)/n);
SetWindowText(hItem,lpStrInput);
break;
case -1:
MessageBox(hwnd,"请先选择估计量","Warning",MB_OK|MB_ICONSTOP);
default:
break;
}
return TRUE;
}
//高位消息
switch(HIWORD(wParam))
{
case CBN_SELCHANGE:
// add invoke function;
cbIndex = SendMessage((HWND)lParam,CB_GETCURSEL,NULL,NULL);
switch(cbIndex)
{
case 0:
case 1:
case 2:
if(stRankEdit!=0)
{
hItem=GetDlgItem(hwnd,IDC_EDIT_3);
ShowWindow(hItem,SW_HIDE);
hItem=GetDlgItem(hwnd,IDC_STATIC_EDIT);
ShowWindow(hItem,SW_HIDE);
};
break;
case 3:
case 4:
hItem=GetDlgItem(hwnd,IDC_EDIT_3);
ShowWindow(hItem,iCmdShow);
hItem=GetDlgItem(hwnd,IDC_STATIC_EDIT);
ShowWindow(hItem,iCmdShow);
stRankEdit=1;
break;
}
return TRUE;
// --
}
return TRUE;
case WM_CLOSE:
EndDialog(hwnd,0);
return TRUE;
}
return FALSE;
}
//关于对话框消息处理函数
BOOL CALLBACK AboutDlgProc(HWND hADlg,UINT umsg,WPARAM wParam,LPARAM lParam)
{
switch(umsg)
{
case WM_COMMAND:
if(LOWORD(wParam)==IDC_ABOUT_OK)
{
EndDialog(hADlg,0);
return TRUE;
}
case WM_CLOSE:
EndDialog(hADlg,0);
return TRUE;
}
return FALSE;
}
DWORD WINAPI ThreadProc(LPVOID Param)
{
// add the work thread code
int i;
for(i=0;i<1026;i++)
{
BUFF[i]=0;
}
//WaitForSingleObject(hEvent,INFINITE);
//waitint for button ID_COTTON pushed
return 0;
}
int DivStr(char *arr)
{
int i;
char* pf;
i=0;
pf=arr;
do
{
pf=strchr(pf,(int)'+');
if(pf==0) break;
*(pf)=0;
pf++;
i++;
}while((*(pf)!=0));
return (i+1);
}
//关于类传递
LRESULT CALLBACK EditProc(HWND hEdit,UINT imsg,WPARAM wParam,LPARAM lParam)
{
int ASC_KEY;
static int formerkey=0;
ASC_KEY=wParam;
switch(imsg)
{
case WM_CHAR:
if((ASC_KEY>=48&&ASC_KEY<58)||(ASC_KEY==32)||(ASC_KEY>=24&&ASC_KEY<=27)||(ASC_KEY==8)||ASC_KEY==(int)'.')
{
if(ASC_KEY==32&&formerkey==32)
{
return TRUE;
}
else if(ASC_KEY==32&&formerkey!=32)
{
formerkey=ASC_KEY;
wParam=43;
return CallWindowProc(addr,hEdit,imsg,wParam,lParam);
}
else
{
formerkey=ASC_KEY;
return CallWindowProc(addr,hEdit,imsg,wParam,lParam);
}
}
else
{
return FALSE;
}
default:break;
}
return CallWindowProc(addr,hEdit,imsg,wParam,lParam);
}
double CharToDou(char* pp)
{
int i;
int errC=0;
int intlen;
int reallen;
int stlen;
double output;
output=0;
stlen=strlen(pp);
for(i=0;i<stlen;i++)
{
}
for(i=0;i<=stlen;i++)
{
if(*(pp+i)=='.'||*(pp+i)==0)
{
intlen=i;
for(i=i;i<=stlen;i++)
{
if(*(pp+i)==0)
{
reallen=i-intlen-1;
}
}
}
}
for(i=0;i<intlen;i++)
{
output=output+pow(10,i)*((int)(*(pp+intlen-1-i)-48));
}
for(i=0;i<reallen;i++)
{
/* if((*(pp+intlen+1+i)-48)=='.')
{
}*/
output=output+pow(10,-1*(i+1))*((int)(*(pp+intlen+1+i)-48));
}
return output;
}
Average aver(double* arr,int n)
{
int i;
double tmp=0;
for(i=0;i<n;i++)
{
tmp=*(arr+i)+tmp;
}
return tmp/n;
}
double Accum(double* arr,int n, Average aver,int rank)
{
int i;
double tmp=0.0;
for(i=0;i<n;i++)
{
tmp=tmp+pow((*(arr+i)-aver),(double)rank);
}
return tmp;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -