?? main.cpp
字號:
#include "hex_dec_read.h"
enum FINDMODE{CHAR_FIND,DECIMAL_FIND,HEXADECIMAL_FIND};
FINDMODE g_nFindMode=DECIMAL_FIND;
char g_szFileName[MAX_PATH]="";
char *g_p=NULL,*g_end;
char g_ch[200],g_chFind[200],g_chReplace[200];
BYTE g_pBy[200];
int g_nIndicate=0,g_nItem=0,g_nCount=0, g_nFileLen=0 ,g_nColor=0 ,
g_nPosFind=0,g_nTickTemp=0,g_nTickTotal=0,g_nCh,g_nChReplace;
HWND g_hWndList,g_hWndProgress;
HANDLE g_hFile=NULL,g_hMap=NULL;
SCROLLINFO g_si;
RECT g_rcInvalid={0,100,800,500};
LPNMLISTVIEW g_lpnmlv;
BOOL g_bDecimal=TRUE,g_bForeward=TRUE,g_bModified=FALSE,g_bTickTotal=TRUE;
//HWND g_hDlgFind=NULL;
BOOL __stdcall Dialog_Main(HWND ,UINT,WPARAM,LPARAM);
BOOL __stdcall Dialog_Modify(HWND ,UINT,WPARAM,LPARAM);
BOOL __stdcall Dialog_Find_Replace(HWND ,UINT,WPARAM,LPARAM);
BOOL __stdcall Dialog_Replace_All(HWND ,UINT,WPARAM,LPARAM);
void idc_btn_replaceall(HWND hDlg);
int idc_find_forebackward(HWND hDlg);
int idc_find_foreward(HWND hDlg);
int idc_find_backward(HWND hDlg);
void idc_find_char(HWND hDlg);
void idc_find_hexadecimal(HWND hDlg);
void idc_find_decimal(HWND hDlg);
void idc_tick_total(HWND hDlg);
int idc_btn_replace(HWND hDlg);
int idc_btn_replace_all(HWND hDlg);
DWORD WINAPI ThreadProc(LPVOID);
DWORD idc_update(void);
int __stdcall WinMain(HINSTANCE hInstance,HINSTANCE,LPSTR,int)
{
::InitCommonControls();
//::InitializeCriticalSection(&g_cs);
::DialogBoxParam(hInstance,MAKEINTRESOURCE(IDD_DIALOG_MAIN),NULL,Dialog_Main,NULL);
return 0;
}
BOOL __stdcall Dialog_Main(HWND hDlg,UINT message,WPARAM wParam,LPARAM lParam)
{
static HMENU hMenu,hSubMenu;
POINT point;
switch(message)
{
case WM_INITDIALOG:
{
CheckDlgButton(hDlg,IDC_DECIMAL,BST_CHECKED);
hMenu=LoadMenu(GetModuleHandle(NULL),MAKEINTRESOURCE(IDR_MENU1));
hSubMenu=GetSubMenu(hMenu,0);
g_si.cbSize=sizeof(g_si);
g_si.fMask=SIF_RANGE | SIF_PAGE;
g_si.nMin=0;
g_si.nMax=0;
g_si.nPage=0;
SetScrollInfo(GetDlgItem(hDlg,IDC_SCROLLBAR1),SB_CTL,&g_si,TRUE);
//InvalidateRect(hDlg,NULL,TRUE);
//SetWindowIN
PlaySound("logon.wav",NULL,SND_FILENAME |SND_ASYNC );
SetClassLong(hDlg,GCL_HICON,
(long)LoadIcon(GetModuleHandle(NULL),MAKEINTRESOURCE(IDI_ICON1)));
::SetDlgItemText(hDlg,IDC_FILESIZE,"No File has been read");
g_hWndProgress=GetDlgItem(hDlg,IDC_PROGRESS);
::SendMessage(g_hWndProgress,PBM_SETRANGE,0,MAKELPARAM(0,30));
::SendMessage(g_hWndProgress,PBM_SETSTEP,1,0);
::SendMessage(g_hWndProgress,PBM_SETBKCOLOR,0,RGB(0,0,0xff));
::SendMessage(g_hWndProgress,PBM_SETBARCOLOR,0,RGB(0xff,0xff,0));
::ShowWindow(g_hWndProgress,SW_HIDE);
g_hWndList=::GetDlgItem(hDlg,IDC_LIST);
::SendMessage(g_hWndList,LVM_SETEXTENDEDLISTVIEWSTYLE,
0,LVS_EX_GRIDLINES
|LVS_EX_FULLROWSELECT
|LVS_EX_ONECLICKACTIVATE
|LVS_EX_TWOCLICKACTIVATE
|LVS_EX_TRACKSELECT
|LVS_EX_MULTIWORKAREAS
/*|LVS_EX_UNDERLINECOLD*/);
LVCOLUMN column;
column.mask=LVCF_TEXT|LVCF_FMT|LVCF_WIDTH;
column.fmt=LVCFMT_CENTER;
column.cx=100;
column.pszText="BytesCt";
::SendMessage(g_hWndList,LVM_INSERTCOLUMN,0,(LPARAM)&column);
char ch[20];
memset(ch,0,20);
for(int i=1;i<=10;i++)
{
wsprintf(ch,"%d",i);
column.pszText=ch;
column.cx=40;
::SendMessage(g_hWndList,LVM_INSERTCOLUMN,i,(long)&column);
}
column.pszText="";
column.cx=20;
::SendMessage(g_hWndList,LVM_INSERTCOLUMN,11,(LPARAM)&column);
for(int j=1;j<=10;j++)
{
wsprintf(ch,"c%d",j);
column.pszText=ch;
column.cx=32;
::SendMessage(g_hWndList,LVM_INSERTCOLUMN,j+11,(long)&column);
}
}
break;
case WM_COMMAND:
{
switch(LOWORD(wParam))
{
case IDOK:
{
if(g_hFile)
{
CloseHandle(g_hFile);
g_hFile=NULL;
}
if(g_hMap)
{
UnmapViewOfFile(g_p);
CloseHandle(g_hMap);
g_hMap=NULL;
}
::EndDialog(hDlg,IDOK);
}
break;
case IDCANCEL:
if(g_hFile)
{
CloseHandle(g_hFile);
g_hFile=NULL;
}
if(g_hMap)
{
UnmapViewOfFile(g_p);
CloseHandle(g_hMap);
g_hMap=NULL;
}
::EndDialog(hDlg,IDCANCEL);
break;
case IDC_BTN_REPLACE:
{
DialogBox(GetModuleHandle(NULL),LPCTSTR(IDD_DIALOG_REPLACE_ALL),
hDlg,Dialog_Replace_All);
}
break;
case IDC_BTN_READ:
{
g_nFileLen=g_nItem=g_nCount=0;
::SendMessage(g_hWndList,LVM_DELETEALLITEMS,0,0);
CreateListItems();
//HANDLE h=CreateThread(NULL,0,ThreadProc,NULL,0,NULL);
//CloseHandle(h);
}
break;
/***************************************************************************************/
case IDC_BTN_FIND:
{
//g_nFileLen=g_nItem=g_nCount=0;
DialogBox(GetModuleHandle(NULL),LPCTSTR(IDD_DIALOG_FIND_REPLACE),
hDlg,Dialog_Find_Replace);
}
break;
/****************************************************************************************/
case IDC_COPY:
{
MessageBox(hDlg,"hDlg copy menu","popup menu",MB_OK);
}
break;
case IDC_CUT:
{
MessageBox(hDlg,"hDlg cut menu","popup menu",MB_OK);
}
break;
case IDC_DECIMAL:
{
int nRet=::IsDlgButtonChecked(hDlg,IDC_DECIMAL);
if(nRet==BST_CHECKED)
{
g_bDecimal=TRUE;
g_nFindMode=DECIMAL_FIND;
}
InsertListItems();
}
break;
case IDC_HEXADECIMAL:
{
int nRet=::IsDlgButtonChecked(hDlg,IDC_HEXADECIMAL);
if(nRet==BST_CHECKED)
{
g_bDecimal=FALSE;
g_nFindMode=HEXADECIMAL_FIND;
}
InsertListItems();
}
break;
}
break;
}
break;
case WM_NOTIFY:
{
LPNMHDR pnmh = (LPNMHDR) lParam;
LPNMLISTVIEW lpnmlv = (LPNMLISTVIEW) lParam;
switch(pnmh->code)
{
case NM_CLICK:
{
char ch[200];
wsprintf(ch," id:%d subi %d",lpnmlv->iItem ,lpnmlv->iSubItem );
//MessageBox(hDlg,ch,"notify",MB_OK);
//ListView_SetItemState(g_hWndList, lpnmlv->iItem, UINT state, UINT mask);
LVITEM lvi;
lvi.mask=LVIF_TEXT ;//|LVIF_STATE ;
lvi.state=LVIS_FOCUSED ;
lvi.iItem=lpnmlv->iItem;
lvi.iSubItem=lpnmlv->iSubItem;
lvi.pszText=ch;
SendMessage(g_hWndList,LVM_SETITEM,0,(long)&lvi);
}
return 0;
case NM_RCLICK:
{
g_lpnmlv=lpnmlv;
point=lpnmlv->ptAction;
ClientToScreen(g_hWndList,&point);
BOOL bIdRet=TrackPopupMenu(hSubMenu,TPM_RIGHTBUTTON|TPM_LEFTALIGN|TPM_RETURNCMD,
point.x,point.y,0,hDlg,NULL);
switch (bIdRet)
{
case IDC_CUT:
MessageBox(g_hWndList,"g_hWndList cut","pop",MB_OK);
break;
case IDC_COPY:
MessageBox(g_hWndList,"g_hWndList copy","pop",MB_OK);
break;
case IDC_MODIFY:
DialogBox(GetModuleHandle(NULL),LPCTSTR(IDD_DIALOG_MODIFY),
g_hWndList,Dialog_Modify);
break;
}
}
return 0;
}
}
break;
case WM_RBUTTONDOWN:
{
point.x=LOWORD(lParam);
point.y=HIWORD(lParam);
ClientToScreen(hDlg,&point);
TrackPopupMenu(hSubMenu,TPM_RIGHTBUTTON|TPM_LEFTALIGN,//|TPM_RETURNCMD,
point.x,point.y,0,hDlg,NULL);
return 0;
}
break;
case WM_KEYDOWN:
{
// SetFocus(GetDlgItem(hDlg,IDC_SCROLLBAR1));
switch(wParam)
{
case VK_HOME:
SendMessage(hDlg,WM_VSCROLL,SB_TOP,0);
break;
case VK_END:
SendMessage(hDlg,WM_VSCROLL,SB_BOTTOM,0);
break;
case VK_PRIOR:
SendMessage(hDlg,WM_VSCROLL,SB_PAGEUP,0);
break;
case VK_NEXT:
SendMessage(hDlg,WM_VSCROLL,SB_PAGEDOWN,0);
break;
case VK_UP:
SendMessage(hDlg,WM_VSCROLL,SB_LINEUP,0);
break;
case VK_DOWN:
SendMessage(hDlg,WM_VSCROLL,SB_LINEDOWN,0);
break;
}
break;
}
break;
case WM_VSCROLL:
{
//SCROLLINFO si;
g_si.cbSize=sizeof(g_si);
g_si.fMask=SIF_ALL;
GetScrollInfo(GetDlgItem(GetForegroundWindow(),IDC_SCROLLBAR1),SB_CTL,&g_si);
/*if(si.nPos!=g_si.nPos)
{
SetScrollInfo(GetDlgItem(GetForegroundWindow(),IDC_SCROLLBAR1),SB_CTL,&g_si,TRUE);
}*/
switch(LOWORD(wParam))
{
case SB_THUMBPOSITION:
case SB_THUMBTRACK:
g_si.nPos=g_si.nTrackPos;
break;
case SB_PAGEDOWN:
g_si.nPos+=g_si.nPage;
break;
case SB_LINEDOWN:
g_si.nPos+=10;
break;
case SB_PAGEUP:
g_si.nPos-=g_si.nPage;
break;
case SB_LINEUP:
g_si.nPos-=10;
break;
case SB_TOP:
g_si.nPos=g_si.nMin;
break;
case SB_BOTTOM:
g_si.nPos=g_si.nMax;
break;
default:
break;
}
g_si.fMask=SIF_POS;
SetScrollInfo(GetDlgItem(GetForegroundWindow(),IDC_SCROLLBAR1),SB_CTL,&g_si,TRUE);
GetScrollInfo(GetDlgItem(GetForegroundWindow(),IDC_SCROLLBAR1),SB_CTL,&g_si);
SendMessage(hDlg,WM_PAINT,0,0);
if(g_nFileLen>0)
{
//MessageBox(hDlg,"NO File read!","exclaming",MB_OK);
g_nItem=g_si.nPos/10;
InsertListItems();
//g_nItem=0;
break;
}
}
break;
}
return 0;
}
BOOL __stdcall Dialog_Modify(HWND hDlg,UINT message,WPARAM wParam,LPARAM lParam)
{
//LPNMLISTVIEW lpnmlv;
char ch[200];
LVITEM lvi;
lvi.mask=LVIF_TEXT ;//|LVIF_STATE ;
lvi.iItem=g_lpnmlv->iItem;
lvi.iSubItem=g_lpnmlv->iSubItem;
lvi.pszText=ch;
lvi.cchTextMax=200;
switch(message)
{
case WM_INITDIALOG:
{
// lpnmlv = (LPNMLISTVIEW) lParam;
char pTemp[200];
char psz[200];
if(!SendMessage(g_hWndList,LVM_GETITEM,0,(long)&lvi))
MessageBox(NULL,"failed to get item text","failure",MB_OK);
wsprintf(pTemp," id:%d subi %d",g_lpnmlv->iItem ,g_lpnmlv->iSubItem );
wsprintf(psz,"%s : %s",pTemp,ch);
SetDlgItemText(hDlg,IDC_OLDDATA,psz);
}
break;
case WM_COMMAND:
{
switch(LOWORD(wParam))
{
case IDOK:
GetDlgItemText(hDlg,IDC_NEWDATA,ch,200);
if(strlen(ch)>=4 || strlen (ch)==0)
{
MessageBox(hDlg,"You input a data is more than 255,or a NULL ","Illegel data",
MB_OK);
//EndDialog(hDlg,IDOK);
return 0;
}
BYTE byNew;
switch (strlen(ch))
{
case 1:
{
if(ISNUM(ch[0]))
{
byNew=CHARTONUM(ch[0]);
}
else
{
MessageBox(hDlg,"You input a illegel number ","Illegel data",
MB_OK);
//EndDialog(hDlg,IDOK);
return 0;
}
}
break;
case 2:
if(ISNUM(ch[0]) && ISNUM(ch[1]))
{
byNew=CHARTONUM(ch[0])*10+CHARTONUM(ch[1]);
}
else
{
MessageBox(hDlg,"You input a illegel number ","Illegel data",
MB_OK);
//EndDialog(hDlg,IDOK);
return 0;
}
break;
case 3:
if(ISNUM(ch[0]) && ISNUM(ch[1]) && ISNUM(ch[2]))
{
byNew=CHARTONUM(ch[0])*100+CHARTONUM(ch[1])*10+CHARTONUM(ch[2]);
}
else
{
MessageBox(hDlg,"You input a illegel number ","Illegel data",
MB_OK);
//EndDialog(hDlg,IDOK);
return 0;
}
}
int iRet;
iRet=MessageBox(hDlg,"Your MODIFICATION will be written to the file,select OK if you want to ,otherwise select CANCEL to prevent it ","Modify or not?",
MB_OKCANCEL|MB_ICONWARNING|MB_DEFBUTTON2);
if(IDOK==iRet)
{
*(BYTE*)(g_p+(g_nItem+g_lpnmlv->iItem)*10+g_lpnmlv->iSubItem-1)=byNew;
lvi.pszText=ch;
SendMessage(g_hWndList,LVM_SETITEM,0,(long)&lvi);
}
EndDialog(hDlg,IDOK);
break;
case IDCANCEL:
EndDialog(hDlg,IDCANCEL);
break;
}
}
break;
}
return 0;
}
BOOL __stdcall Dialog_Find_Replace(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);//2008.4.12
SetWindowText(GetDlgItem(hDlg,IDC_STR_FIND),g_ch);
GetDlgItemText(hDlg,IDC_STR_FIND,g_ch,sizeof(g_ch));
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(hDlg),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(hDlg),IDC_FILESIZE,ch);
}
break;
case WM_COMMAND:
{
switch(LOWORD(wParam))
{
case IDOK:
{
GetDlgItemText(hDlg,IDC_STR_FIND,g_ch,sizeof(g_ch));
EndDialog(hDlg,IDOK);
}
break;
case IDCANCEL:
{
EndDialog(hDlg,IDCANCEL);
}
break;
case IDC_TICK_TOTAL:
{
idc_tick_total(hDlg);
}
break;
case IDC_UPDATE:
{
idc_update();
}
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://2008.4.12
{
idc_btn_replace(hDlg);
}
break;
case IDC_FIND_FOREWARD:
{
idc_find_foreward(hDlg);
}
break;
case IDC_FIND_BACKWARD:
{
idc_find_backward(hDlg);
}
break;
}
}
break;
}
return FALSE;
}
DWORD WINAPI ThreadProc(LPVOID lpStart)
{
SendMessage(g_hWndProgress,PBM_SETPOS,0,0);
ShowWindow(g_hWndProgress,SW_SHOW);
CreateListItems();
ShowWindow(g_hWndProgress,SW_HIDE);
return 0;
}
DWORD idc_update()
{
//MessageBox(NULL,g_ch,"TEXT_g_ch",MB_OK);
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -