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

📄 main.cpp

📁 自己写的二进制编辑器.二进制阅读器.类似于ultra Edit. 功能:decimal,hexadecimal,char: 十进制显示
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	g_nTickTotal=0;
	
	switch(g_nFindMode)
	{
	case HEXADECIMAL_FIND:
		{				
			for (int j=0;j<(g_nFileLen-g_nCh/3);j++)
			{	
				
				if(!memcmp(g_pBy,(g_p+j),g_nCh/3))
				{
					g_nTickTotal++;
				}				
			}		
		}
		break;
	case DECIMAL_FIND:
		{			
			for (int j=0;j<(g_nFileLen-g_nCh/2);j++)
			{				
				if(!memcmp(g_pBy,(g_p+j),g_nCh/2))
				{
					g_nTickTotal++;
				}					
			}
		}
		break;
	case CHAR_FIND:
		{			
			for (int j=0;j<g_nFileLen-g_nCh;j++)
			{	
				if(!memcmp(g_ch,(g_p+j),g_nCh))
				{
					g_nTickTotal++;
				}				
			}
		}
		break;
	}
	char ch[200];
	wsprintf(ch,"g_nPosFind IS : %012d bytes,%08d K,%04d M,      g_nTickTemp  IS : %05d",
		g_nPosFind,g_nPosFind/1024,g_nPosFind/(1024*1024),g_nTickTemp);
	SetDlgItemText(GetParent(GetForegroundWindow()),IDC_POS_FIND,ch);
	wsprintf(ch,"g_nFileLen  IS : %012d bytes,%08d K,%04d M,      g_nTickTotal   IS : %05d",
		g_nFileLen,g_nFileLen/1024,g_nFileLen/(1024*1024),g_nTickTotal);
	
	SetDlgItemText(GetParent(GetForegroundWindow()),IDC_FILESIZE,ch);
	return 0;
}

BOOL __stdcall Dialog_Replace_All(HWND hDlg,UINT message,WPARAM wParam,LPARAM lParam)
{
	
	switch(message)
	{
	case WM_INITDIALOG:
		{
			switch(g_nFindMode)
			{
			case DECIMAL_FIND:
				{
					CheckDlgButton(hDlg,IDC_FIND_DECIMAL,BST_CHECKED);
				}
				break;
			case HEXADECIMAL_FIND:
				{
					CheckDlgButton(hDlg,IDC_FIND_HEXADECIMAL,BST_CHECKED);
				}
				break;
			case CHAR_FIND:
				{
					CheckDlgButton(hDlg,IDC_FIND_CHAR,BST_CHECKED);
				}
				break;
			}
			g_bModified=g_bTickTotal=TRUE;
			g_nTickTemp=g_nTickTotal=g_nPosFind=0;
			
			
//			MoveWindow(hDlg,100,400,750,200,TRUE);
			SetWindowText(GetDlgItem(hDlg,IDC_STR_REPLACE),g_chReplace);
			SetWindowText(GetDlgItem(hDlg,IDC_STR_FIND),g_chFind);
		}
		break;
	case WM_COMMAND:
		{
			switch(LOWORD(wParam))
			{
			case IDOK:
				{
					GetDlgItemText(hDlg,IDC_STR_REPLACE,g_chReplace,sizeof(g_chReplace));
					GetDlgItemText(hDlg,IDC_STR_FIND,g_chFind,sizeof(g_chFind));
					EndDialog(hDlg,IDOK);
				}
				break;

			case IDC_FIND_DECIMAL:
				{
					idc_find_decimal(hDlg);
				}
				break;
			case IDC_FIND_HEXADECIMAL:
				{

					idc_find_hexadecimal(hDlg);
				}
				break;
			case IDC_FIND_CHAR:
				{
					idc_find_char(hDlg);
				}
				break;
			case IDC_BTN_REPLACE_ALL://2008.4.12
				{
					idc_btn_replace_all(hDlg);
				}
				break;
			}
		}
		break;
	}
	return FALSE;
}


int idc_find_forebackward(HWND hDlg)
{
	
	char pTemp[20];
	memset(pTemp,0,sizeof(pTemp));
	//char *end;
	char ch[200];
	char chLocal[200];
	memset(chLocal,0,sizeof(chLocal));
	GetDlgItemText(hDlg,IDC_STR_FIND,chLocal,sizeof(chLocal));
	if(!(strlen(chLocal)==strlen(g_ch)) ||  strncmp(chLocal,g_ch,strlen(chLocal)))
	{	
		GetDlgItemText(hDlg,IDC_STR_FIND,g_ch,sizeof(g_ch));					
		g_nCh=strlen(g_ch);
		
		g_nTickTemp=g_nTickTotal=g_nItem=g_nPosFind=0;
		g_bModified=g_bTickTotal=TRUE;
		
		InsertListItems();						
	}					
	
	switch(g_nFindMode)
	{
	case DECIMAL_FIND:
		{
			
			for(int ii=0;ii<g_nCh;ii++)
			{
				if(!isdigit(g_ch[ii]))
				{
					MessageBox(NULL,"Your Input Data is not DIGIT! ","Illegal data!",MB_OK);
					//g_bModified=TRUE;
					return FALSE;
				}
			}
			if((g_nCh%3)!=0 || g_nCh==0)
			{
				MessageBox(hDlg,"You must input a string,the length of which must be THREEs !",
					"Illegal Data!",MB_OK);
				//g_bModified=TRUE;
				return FALSE;
			}
			if(g_bModified)
			{
				for(int i=0;i<g_nCh/3;i++)
				{
					g_pBy[i]=(BYTE)(strtoul(strncpy(pTemp,g_ch+3*i,3),&g_end,10));
					MessageBox(NULL,strncpy(pTemp,g_ch,3),"test",MB_OK);
				}
				g_bModified=FALSE;
			}
			
			for (int j=0;j<g_nFileLen;j++)
			{
				
				if(!g_bForeward && g_nPosFind<0 )
				{
					g_nPosFind=g_nCount=g_nTickTemp=0;
					MessageBox(NULL,"YOU HAVE REACHED the       H_E_A_D        of THE FILE!","FIND END!",MB_OK);
					return FALSE;
				}
				if(g_nPosFind>(g_nFileLen-g_nCh/3-1))
				{
					g_nPosFind=g_nFileLen-g_nCh/3-1;
					MessageBox(NULL,"YOU HAVE REACHED the       E_N_D         of THE FILE!","FIND END!",MB_OK);
					return FALSE;
				}
				
				if(!memcmp(g_pBy,(g_p+g_nPosFind),g_nCh/3))
				{
					g_bForeward?(g_nTickTemp++):(g_nTickTemp--);
					
					g_nItem=g_nPosFind/10;
					g_si.nPos=g_nCount=g_nItem*10;
					InsertListItems();
					MessageBox(NULL,g_ch,"str_find",MB_OK);
					if(g_bTickTotal)
					{
						g_bTickTotal=FALSE;
						CheckDlgButton(hDlg,IDC_TICK_TOTAL,BST_UNCHECKED);
						idc_update();
					}
					
					g_bForeward?g_nPosFind++:g_nPosFind--;
					if(!g_bForeward && g_nPosFind<0 )
					{
						g_nPosFind=g_nCount=g_nTickTemp=0;
						MessageBox(NULL,"YOU HAVE REACHED the       H_E_A_D        of THE FILE!","FIND END!",MB_OK);
						return FALSE;
					}
					if(g_bForeward && g_nPosFind>(g_nFileLen-g_nCh/3-1))
					{
						g_nPosFind=g_nFileLen-g_nCh/3-1;
						MessageBox(NULL,"YOU HAVE REACHED the       E_N_D         of THE FILE!","FIND END!",MB_OK);
						return FALSE;
					}
					break;
				}
				g_bForeward?g_nPosFind++:g_nPosFind--;
				if(!g_bForeward && g_nPosFind<0 )
				{
					g_nPosFind=g_nCount=g_nTickTemp=0;
					MessageBox(NULL,"YOU HAVE REACHED the       H_E_A_D        of THE FILE!","FIND END!",MB_OK);
					return FALSE;
				}
				if(g_bForeward && g_nPosFind>(g_nFileLen-g_nCh/3-1))
				{
					g_nPosFind=g_nFileLen-g_nCh/3-1;
					MessageBox(NULL,"YOU HAVE REACHED the       E_N_D         of THE FILE!","FIND END!",MB_OK);
					return FALSE;
				}
			}	
		}
		break;
	case HEXADECIMAL_FIND:
		{
			
			for(int ii=0;ii<g_nCh;ii++)
			{
				if(!isxdigit(g_ch[ii]))
				{
					MessageBox(NULL,"Your Input Data is not XDIGIT! ","Illegal data!",MB_OK);
					//g_bModified=TRUE;
					return FALSE;
				}
			}
			if((g_nCh%2)!=0 || g_nCh==0)
			{
				MessageBox(hDlg,"You must input a string,the length of which must be TWOs !",
					"Illegal Data!",MB_OK);
				//g_bModified=TRUE;
				return FALSE;
			}
			if(g_bModified)
			{
				for(int i=0;i<g_nCh/2;i++)
				{
					g_pBy[i]=(BYTE)(strtoul(strncpy(pTemp,g_ch+2*i,2),&g_end,16));
					MessageBox(NULL,strncpy(pTemp,g_ch,2),"test",MB_OK);
				}
				g_bModified=FALSE;
			}
			
			for (int j=0;j<g_nFileLen;j++)
			{
				
				if(!g_bForeward && g_nPosFind<0 )
				{
					g_nPosFind=g_nCount=g_nTickTemp=0;
					MessageBox(NULL,"YOU HAVE REACHED the       H_E_A_D        of THE FILE!","FIND END!",MB_OK);
					return FALSE;
				}
				if(g_nPosFind>(g_nFileLen-g_nCh/2-1))
				{
					g_nPosFind=g_nFileLen-g_nCh/2-1;
					MessageBox(NULL,"YOU HAVE REACHED the       E_N_D         of THE FILE!","FIND END!",MB_OK);
					return FALSE;
				}
				
				if(!memcmp(g_pBy,(g_p+g_nPosFind),g_nCh/2))
				{
					g_bForeward?(g_nTickTemp++):(g_nTickTemp--);
					
					g_nItem=g_nPosFind/10;
					g_si.nPos=g_nCount=g_nItem*10;
					InsertListItems();
					MessageBox(NULL,g_ch,"str_find",MB_OK);
					if(g_bTickTotal)
					{
						g_bTickTotal=FALSE;
						CheckDlgButton(hDlg,IDC_TICK_TOTAL,BST_UNCHECKED);
						idc_update();
					}
					
					g_bForeward?g_nPosFind++:g_nPosFind--;
					if(!g_bForeward && g_nPosFind<0 )
					{
						g_nPosFind=g_nCount=g_nTickTemp=0;
						MessageBox(NULL,"YOU HAVE REACHED the       H_E_A_D        of THE FILE!","FIND END!",MB_OK);
						return FALSE;
					}
					if(g_bForeward && g_nPosFind>(g_nFileLen-g_nCh/2-1))
					{
						g_nPosFind=g_nFileLen-g_nCh/2-1;
						MessageBox(NULL,"YOU HAVE REACHED the       E_N_D         of THE FILE!","FIND END!",MB_OK);
						return FALSE;
					}
					break;
				}
				g_bForeward?g_nPosFind++:g_nPosFind--;
				if(!g_bForeward && g_nPosFind<0 )
				{
					g_nPosFind=g_nCount=g_nTickTemp=0;
					MessageBox(NULL,"YOU HAVE REACHED the       H_E_A_D        of THE FILE!","FIND END!",MB_OK);
					return FALSE;
				}
				if(g_bForeward && g_nPosFind>(g_nFileLen-g_nCh/2-1))
				{
					g_nPosFind=g_nFileLen-g_nCh/2-1;
					MessageBox(NULL,"YOU HAVE REACHED the       E_N_D         of THE FILE!","FIND END!",MB_OK);
					return FALSE;
				}
			}	
		}
		break;
	case CHAR_FIND:
		{						
			for (int j=0;j<g_nFileLen;j++)
			{
				
				if(!g_bForeward && g_nPosFind<0 )
				{
					g_nPosFind=g_nCount=g_nTickTemp=0;
					MessageBox(NULL,"YOU HAVE REACHED the       H_E_A_D        of THE FILE!","FIND END!",MB_OK);
					return FALSE;
				}
				if(g_nPosFind>(g_nFileLen-1))
				{
					g_nPosFind=g_nFileLen-g_nCh-1;
					MessageBox(NULL,"YOU HAVE REACHED the       E_N_D         of THE FILE!","FIND END!",MB_OK);
					return FALSE;
				}
				
				if(!memcmp(g_ch,(g_p+g_nPosFind),g_nCh))
				{
					g_bForeward?(g_nTickTemp++):(g_nTickTemp--);
					
					g_nItem=g_nPosFind/10;
					g_si.nPos=g_nCount=g_nItem*10;
					InsertListItems();
					MessageBox(NULL,g_ch,"str_find",MB_OK);
					if(g_bTickTotal)
					{
						g_bTickTotal=FALSE;
						CheckDlgButton(hDlg,IDC_TICK_TOTAL,BST_UNCHECKED);
						idc_update();
					}
					
					g_bForeward?g_nPosFind++:g_nPosFind--;
					if(!g_bForeward && g_nPosFind<0 )
					{
						g_nPosFind=g_nCount=g_nTickTemp=0;
						MessageBox(NULL,"YOU HAVE REACHED the       H_E_A_D        of THE FILE!","FIND END!",MB_OK);
						return FALSE;
					}
					if(g_bForeward && g_nPosFind>(g_nFileLen-g_nCh-1))
					{
						g_nPosFind=g_nFileLen-g_nCh-1;
						MessageBox(NULL,"YOU HAVE REACHED the       E_N_D         of THE FILE!","FIND END!",MB_OK);
						return FALSE;
					}
					break;
				}
				g_bForeward?g_nPosFind++:g_nPosFind--;
				if(!g_bForeward && g_nPosFind<0 )
				{
					g_nPosFind=g_nCount=g_nTickTemp=0;
					MessageBox(NULL,"YOU HAVE REACHED the       H_E_A_D        of THE FILE!","FIND END!",MB_OK);
					return FALSE;
				}
				if(g_bForeward && g_nPosFind>(g_nFileLen-g_nCh-1))
				{
					g_nPosFind=g_nFileLen-g_nCh-1;
					MessageBox(NULL,"YOU HAVE REACHED the       E_N_D         of THE FILE!","FIND END!",MB_OK);
					return FALSE;
				}
			}	
		}
		break;
	}
	
	wsprintf(ch,"g_nPosFind IS : %012d bytes,%08d K,%04d M,      g_nTickTemp  IS : %05d",
		g_nPosFind,g_nPosFind/1024,g_nPosFind/(1024*1024),g_nTickTemp);
	SetDlgItemText(GetParent(hDlg),IDC_POS_FIND,ch);
	//g_bModified=FALSE;
}

void idc_find_char(HWND hDlg)
{
	if(g_nFindMode!=CHAR_FIND)
	{
		g_nTickTemp=g_nTickTotal=g_nItem=g_nPosFind=0;
		g_bModified=g_bTickTotal=TRUE;
		//	ThreadProc2();
	}
	
	int nRet=::IsDlgButtonChecked(hDlg,IDC_FIND_CHAR);
	if(nRet==BST_CHECKED)
	{
		g_nFindMode=CHAR_FIND;
		if(g_bDecimal)
		{
			g_bDecimal=FALSE;
		}
		else
		{
			g_bDecimal=TRUE;
		}
		InsertListItems();
	}
}

void idc_find_hexadecimal(HWND hDlg)
{
	if(g_nFindMode!=HEXADECIMAL_FIND)
	{
		g_nTickTemp=g_nTickTotal=g_nItem=g_nPosFind=0;
		g_bModified=g_bTickTotal=TRUE;
		//	ThreadProc2();
	}
	
	int nRet=::IsDlgButtonChecked(hDlg,IDC_FIND_HEXADECIMAL);
	if(nRet==BST_CHECKED)
	{
		g_nFindMode=HEXADECIMAL_FIND;
		if(g_bDecimal)
		{
			g_bDecimal=FALSE;
		}
		else
		{
			g_bDecimal=TRUE;
		}
		InsertListItems();
	}
}
void idc_find_decimal(HWND hDlg)
{
	if(g_nFindMode!=DECIMAL_FIND)
	{
		g_nTickTemp=g_nTickTotal=g_nItem=g_nPosFind=0;
		g_bModified=g_bTickTotal=TRUE;
		//ThreadProc2();
	}
	int nRet=::IsDlgButtonChecked(hDlg,IDC_FIND_DECIMAL);
	if(nRet==BST_CHECKED)
	{
		g_nFindMode=DECIMAL_FIND;
		if(g_bDecimal)
		{
			g_bDecimal=FALSE;
		}
		else
		{
			g_bDecimal=TRUE;
		}
		InsertListItems();
	}
				
}

int idc_find_foreward(HWND hDlg)
{
	g_bForeward=TRUE;
	int ret=idc_find_forebackward(hDlg);
	return ret;
}

int idc_find_backward(HWND hDlg)
{
	g_bForeward=FALSE;
	int ret=idc_find_forebackward(hDlg);
	return ret;

}

void idc_tick_total(HWND hDlg)
{
	int nRet=::IsDlgButtonChecked(hDlg,IDC_TICK_TOTAL);
	if(nRet==BST_CHECKED)
	{
		g_bTickTotal=TRUE;
		idc_update();
		//Check6DlgButton(hDlg,IDC_TICK_TOTAL,BST_CHECKED);
	}
}

int idc_btn_replace(HWND hDlg)
{
	int i;
	char chTemp[20];

	GetDlgItemText(hDlg,IDC_STR_REPLACE,g_chReplace,sizeof(g_chReplace));
	g_nChReplace=strlen(g_chReplace);

	switch(g_nFindMode)
	{
	case DECIMAL_FIND:
		{
			
			for(int ii=0;ii<g_nChReplace;ii++)
			{
				if(!isdigit(g_chReplace[ii]))
				{
					MessageBox(NULL,"Your input Data is not DIGIT! ","Illegal data!",MB_OK);
					//g_bModified=TRUE;
					return FALSE;
				}
			}
			if((g_nChReplace%3)!=0 || g_nChReplace==0)
			{
				MessageBox(hDlg,"You must input a string,the length of which must be THREEs !",
					"Illegal Data!",MB_OK);
				//g_bModified=TRUE;
				return FALSE;
			}
			for(i=0;i<g_nChReplace/3;i++){
				
				*((BYTE*)(g_p+g_nPosFind+i-1))=(BYTE)(strtoul(strncpy(chTemp,g_chReplace+3*i,3),&g_end,10));
			}
		}
		break;
	case HEXADECIMAL_FIND:
		{
			
			for(int ii=0;ii<g_nChReplace;ii++)
			{
				if(!isxdigit(g_ch[ii]))
				{
					MessageBox(NULL,"Your Input Data is not XDIGIT! ","Illegal data!",MB_OK);
					return FALSE;
				}
			}
			if((g_nChReplace%2)!=0 || g_nChReplace==0)
			{
				MessageBox(hDlg,"You must input a string,the length of which must be TWOs !",
					"Illegal Data!",MB_OK);
				return FALSE;
			}
			for(i=0;i<g_nChReplace/2;i++){
				
				*((BYTE*)(g_p+g_nPosFind+i-1))=(BYTE)(strtoul(strncpy(chTemp,g_chReplace+2*i,2),&g_end,16));
			}
		}
		break;
	case CHAR_FIND:
		{						
			for(i=0;i<g_nChReplace;i++){
				
				*((BYTE*)(g_p+g_nPosFind+i-1))=*((BYTE*)(g_chReplace+i));
			}
		}
		break;
	}
	InsertListItems();

}
int idc_btn_replace_all(HWND hDlg)
{
	idc_find_foreward(hDlg);
	return idc_btn_replace(hDlg);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -