www.pudn.com > JMYJM.rar > TraceMe.cpp


/*------------------------------------------------------- 
TraceMe.cpp -- 动态调试技术练习实例 
(c) www.PEDIY.com  2002.9 
-------------------------------------------------------*/ 
 
#include "resource.h" 
#include   
 
/*-------------------------------------------------------------*/ 
/* 定义子程序与全局变量、常量                                  */ 
/*-------------------------------------------------------------*/ 
 
#define MAXINPUTLEN 80 
 
BOOL    CALLBACK MainDlg   (HWND, UINT, WPARAM, LPARAM) ; 
BOOL    CALLBACK AboutDlgProc (HWND, UINT, WPARAM, LPARAM) ; 
BOOL    CALLBACK CheckDlgProc  (HWND, UINT, WPARAM, LPARAM) ; 
 
BOOL GenRegCode( TCHAR  *rCode, TCHAR  *name ,int len) ; 
TCHAR szBuffer[30]; 
unsigned char Table[8] = {0xC,0xA,0x13,0x9,0xC,0xB,0xA,0x8};    //计算序列号要用的数据表,全局变量 
 
HINSTANCE hInst; 
 
/*-------------------------------------------------------------*/ 
/* WinMain - 基于WIN32的程序的入口                            */ 
/*-------------------------------------------------------------*/ 
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, 
                    PSTR szCmdLine, int iCmdShow) 
{ 
	hInst = hInstance; 
	DialogBoxParam (hInstance, MAKEINTRESOURCE(IDD_MAINDLG), NULL, MainDlg, NULL); 
	return 0;	 
} 
 
/*-------------------------------------------------------------*/ 
/* AboutDlgProc - 关于窗口                                    */ 
/*-------------------------------------------------------------*/ 
 
BOOL CALLBACK AboutDlgProc (HWND hDlg, UINT message,  
                            WPARAM wParam, LPARAM lParam) 
{ 
	switch (message) 
	{ 
         
	case WM_COMMAND : 
		switch (LOWORD (wParam))  		             
		{ 
		case IDOK : 
		case IDCANCEL : 
			EndDialog (hDlg, 0) ; 
			return TRUE ; 
		 } 
		  break ; 
	 } 
     return FALSE ; 
} 
 
/*-------------------------------------------------------------*/ 
/* CheckDlgProc - 提示信息窗口                            */ 
/*-------------------------------------------------------------*/ 
 
BOOL CALLBACK CheckDlgProc (HWND hDlg, UINT message,  
                            WPARAM wParam, LPARAM lParam) 
{ 
	switch (message) 
	{ 
	case WM_INITDIALOG: 
         
		SendMessage(GetDlgItem(hDlg, IDC_STATIC1), WM_SETTEXT, 0, (LPARAM)szBuffer);//初始化提示信息 
        return TRUE; 
	case WM_COMMAND : 
		switch (LOWORD (wParam))  		             
		{ 
		case IDOK : 
		case IDCANCEL : 
			EndDialog (hDlg, 0) ; 
			return TRUE ; 
		 } 
		  break ; 
	 } 
     return FALSE ; 
} 
 
 
/*-------------------------------------------------------------*/ 
/*  MainDlg - 主对话窗口                                      */ 
/*-------------------------------------------------------------*/ 
 
BOOL CALLBACK MainDlg (HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) 
 
{			 
 
	TCHAR cName[MAXINPUTLEN]={0}; 
	TCHAR cCode[100]={0}; 
	int len; 
 
	TCHAR szEnchar[] = TEXT ("你输入字符要大于四个!") ; 
	TCHAR szSucc[] = TEXT ("恭喜你!成功!") ; 
	TCHAR szFail[] = TEXT ("序列号错误,再来一次!") ; 
 
 
	switch (message)  
	{ 
	case WM_INITDIALOG: 
		SendMessage(hDlg,WM_SETICON,ICON_BIG,LPARAM(LoadIcon(hInst,MAKEINTRESOURCE(IDI_ICON)))); //设置图标 
		SendDlgItemMessage(hDlg, IDC_TXT0, EM_LIMITTEXT, MAXINPUTLEN, 0);   //初始化edit控件IDC_TXT0字符长度 
		break;  
		 
	case WM_CLOSE: 
		DestroyWindow(hDlg); 		                        
		break; 
 
	case WM_COMMAND:  
		switch (LOWORD (wParam)) 
		{ 
	 
		case IDC_ABOUT : 
		case IDM_HELP_ABOUT : 
			DialogBox (hInst, MAKEINTRESOURCE (IDD_ABOUT), hDlg, AboutDlgProc) ; 
			break; 
			 
		case IDC_OK:		 
 
			len=GetDlgItemText(hDlg,IDC_TXT0,cName,sizeof(cName)/sizeof(TCHAR)+1); 
			GetDlgItemText(hDlg,IDC_TXT1,cCode,sizeof(cCode)/sizeof(TCHAR)+1); 
			if (cName[0] == 0||len<5)  
			{ 
				lstrcpy(szBuffer,szEnchar); 
				SetFocus (GetDlgItem(hDlg,IDC_TXT0)); 
			} 
 
			else 
			{ 
 
				 
				if(GenRegCode(cCode, cName ,len))	//此处调用序列号计算的子程序 
				{	lstrcpy(szBuffer,szSucc); 
			    	EnableWindow(GetDlgItem(hDlg,IDC_TXT0),FALSE); 
					EnableWindow(GetDlgItem(hDlg,IDC_TXT1),FALSE); 
				} 
 
				else 
					lstrcpy(szBuffer,szFail); 
		   	SetFocus (GetDlgItem(hDlg,IDC_TXT1)); 
			} 
			MessageBeep (MB_OK); 
			DialogBox (hInst, MAKEINTRESOURCE (IDD_CHECK), hDlg, CheckDlgProc ) ;	 
			 
 
 
			break; 
 
		case IDC_EXIT:  
			SendMessage(hDlg, WM_CLOSE, 0, 0); 
			break; 
		} 
 
		return TRUE; 
		break; 
	} 
	return FALSE; 
} 
 
 
/*-------------------------------------------------------------*/ 
/* GenRegCode - 注册算法主函数                                */ 
/*-------------------------------------------------------------*/ 
BOOL GenRegCode( TCHAR  *rCode, TCHAR  *name ,int len)  
{  
int i,j; 
unsigned long code=0;  
 
	for(i=3,j=0;i7) j=0;  
		   code+=((BYTE)name[i])*Table[j]; 											 														 
		  }  
 
	wsprintf(name,TEXT("%ld"),code); 
	if(lstrcmp(rCode, name)==0)      //比较真假序列号,这里为了省事,直接比较了 
		return TRUE; 
	else 
		return FALSE; 
 
}