📄 biosdisk.cpp
字号:
TEXTMETRIC tm;
PAINTSTRUCT ps;
char ctemp[100];
unsigned char num[]="0123456789ABCDEF";
unsigned char c;
static int i,j,cKeyX,cKeyY,is_set=0,is_asc,cHexEdit=0;
CREATESTRUCT *ct;
switch(iMsg)
{
case WM_CREATE:
ct=(CREATESTRUCT *)lParam;
pHexEdit[cHexEdit]=(HEXEDIT *)GlobalAlloc(GPTR,sizeof HEXEDIT);
pNow=pHexEdit[cHexEdit];
pNow->buffer=buffer[cHexEdit];
cHexEdit++;
pNow->is_readonly=0;
pNow->start=0;
pNow->line=5;
pNow->totle=32;
pNow->hwnd=hwnd;
pNow->is_show=0;
return 0;
case WM_MOUSEMOVE:
SetCursor(LoadCursor(NULL,IDC_IBEAM));
break;
case WM_LBUTTONDOWN:
for(i=0;i<cHexEdit;i++)
{
if(pHexEdit[i]->hwnd==hwnd)
{pNow=pHexEdit[i];
break;
}
}
cKeyX=LOWORD(lParam)/cxChar;
cKeyY=HIWORD(lParam)/cyChar;
if(cKeyX<absX||cKeyY>pNow->line-1||cKeyX>=absX+15*3+2&&cKeyX<ascX+absX)break;
cKeyX-=absX;
SetFocus(hwnd);
CreateCaret(hwnd,NULL,0,cyChar);
ShowCaret(hwnd);
if(cKeyX>=ascX)
is_asc=1;
else
{
if(cKeyX%3==2)
{if(cKeyX>0)cKeyX--;
else cKeyX++;
}
is_asc=0;
}
SetCaretPos((cKeyX+absX)*cxChar,cKeyY*cyChar);
pNow->is_show=1;
break;
case WM_SETFOCUS:
CreateCaret(hwnd,NULL,0,cyChar);
SetCaretPos((cKeyX+absX)*cxChar,cKeyY*cyChar);
ShowCaret(hwnd);
break;
case WM_KILLFOCUS:
HideCaret(hwnd);
break;
case WM_CHAR:
for(i=0;i<cHexEdit;i++)
{
if(pHexEdit[i]->hwnd==hwnd)
{pNow=pHexEdit[i];
break;
}
}
if(pNow->is_readonly)break;
if(is_asc)
{
c=(TCHAR)wParam;
if(c==9)break;
pNow->buffer[cKeyX-ascX+(cKeyY+pNow->start)*16]=c;
outxy(hwnd,cKeyX-ascX,cKeyY,c);
//SendMessage(hwnd,WM_KEYDOWN,VK_RIGHT,0);
if(cKeyX<ascX+15)cKeyX++;
else
{
if(cKeyY==pNow->line-1&&pNow->start+pNow->line-1==pNow->totle)break;
if(cKeyY==pNow->line-1)
{pNow->start++;
//InvalidateRect(hwnd,NULL,TRUE);
ScrollWindow(hwnd,0,-cyChar,NULL,NULL);
}
else cKeyY++;
cKeyX=ascX;
}
SetCaretPos((cKeyX+absX)*cxChar,cKeyY*cyChar);
}
else
{
c=(TCHAR)wParam;
CharUpperBuff((char *)&c,1);
for(i=0;i<16;i++)
if(c==num[i])
{j=cKeyX/3;
if(cKeyX%3==0)
pNow->buffer[j+(cKeyY+pNow->start)*16]=(pNow->buffer[j+(cKeyY+pNow->start)*16]&0x0f)|(i*0x10);
else
pNow->buffer[j+(cKeyY+pNow->start)*16]=(pNow->buffer[j+(cKeyY+pNow->start)*16]&0xf0)|i;
//InvalidateRect(hwnd,NULL,TRUE);
outxy(hwnd,j,cKeyY,pNow->buffer[j+(cKeyY+pNow->start)*16]);
//SendMessage(hwnd,WM_KEYDOWN,VK_RIGHT,0);
if(cKeyX==16*3-2)
{
if(cKeyY==pNow->line-1&&pNow->start+pNow->line-1==pNow->totle)break;
if(cKeyY==pNow->line-1)
{pNow->start++;
//InvalidateRect(hwnd,NULL,TRUE);
ScrollWindow(hwnd,0,-cyChar,NULL,NULL);
}
else cKeyY++;
cKeyX=0;
}
else
{if(cKeyX%3==1)cKeyX+=2;
else cKeyX++;
}
SetCaretPos((cKeyX+absX)*cxChar,cKeyY*cyChar);
break;
}
}
break;
case WM_KEYDOWN:
switch(wParam)
{
case VK_TAB:
is_asc=!is_asc;
if(is_asc)cKeyX=cKeyX/3+ascX;
else cKeyX=(cKeyX-ascX)*3;
SetCaretPos((cKeyX+absX)*cxChar,cKeyY*cyChar);
break;
case VK_LEFT:
if(!is_asc)
{
if(cKeyX==0)
{if(cKeyY==0&&pNow->start==0)break;
if(cKeyY==0)
{pNow->start--;
//InvalidateRect(hwnd,NULL,TRUE);
ScrollWindow(hwnd,0,cyChar,NULL,NULL);
}
else cKeyY--;
cKeyX=15*3+1;
}
else if(cKeyX%3==0)cKeyX-=2;
else cKeyX--;
}
else
{
if(cKeyX>ascX)cKeyX--;
else
{if(cKeyY==0&&pNow->start==0)break;
if(cKeyY==0)
{pNow->start--;
//InvalidateRect(hwnd,NULL,TRUE);
ScrollWindow(hwnd,0,cyChar,NULL,NULL);
}
else cKeyY--;
cKeyX=ascX+15;
}
}
is_set=1;
break;
case VK_HOME:
pNow->start=0;
cKeyY=0;
cKeyX=is_asc*ascX;
InvalidateRect(hwnd,NULL,TRUE);
SetCaretPos((cKeyX+absX)*cxChar,cKeyY*cyChar);
break;
case VK_END:
pNow->start=pNow->totle-pNow->line;
cKeyY=pNow->line-1;
cKeyX=is_asc?ascX+15:15*3;
InvalidateRect(hwnd,NULL,TRUE);
SetCaretPos((cKeyX+absX)*cxChar,cKeyY*cyChar);
break;
case 33:
if(pNow->start==0)break;
if(pNow->start<pNow->line)
{pNow->start=0;
cKeyY=0;
SetCaretPos((cKeyX+absX)*cxChar,cKeyY*cyChar);
}
else pNow->start-=pNow->line;
//InvalidateRect(hwnd,NULL,TRUE);
ScrollWindow(hwnd,0,cyChar*pNow->line,NULL,NULL);
break;
case 34: //PAGEDOWN
if(pNow->start==pNow->totle-pNow->line)break;
if(pNow->start+pNow->line*2>pNow->totle)
{pNow->start=pNow->totle-pNow->line;
cKeyY=pNow->line-1;
SetCaretPos((cKeyX+absX)*cxChar,cKeyY*cyChar);
}
else pNow->start+=pNow->line;
//InvalidateRect(hwnd,NULL,TRUE);
ScrollWindow(hwnd,0,-cyChar*pNow->line,NULL,NULL);
break;
case VK_RIGHT:
if(!is_asc)
{
if(cKeyX==16*3-2)
{
if(cKeyY==pNow->line-1&&pNow->start+pNow->line-1==pNow->totle)break;
if(cKeyY==pNow->line-1)
{pNow->start++;
//InvalidateRect(hwnd,NULL,TRUE);
ScrollWindow(hwnd,0,-cyChar,NULL,NULL);
}
else cKeyY++;
cKeyX=0;
}
else
{if(cKeyX%3==1)cKeyX+=2;
else cKeyX++;
}
}
else
{if(cKeyX<ascX+15)cKeyX++;
else
{
if(cKeyY==pNow->line-1&&pNow->start+pNow->line-1==pNow->totle)break;
if(cKeyY==pNow->line-1)
{pNow->start++;
//InvalidateRect(hwnd,NULL,TRUE);
ScrollWindow(hwnd,0,-cyChar,NULL,NULL);
}
else cKeyY++;
cKeyX=ascX;
}
}
is_set=1;
break;
case VK_UP:
if(cKeyY==0)
{
if(pNow->start)
{pNow->start--;
//InvalidateRect(hwnd,NULL,TRUE);
ScrollWindow(hwnd,0,cyChar,NULL,NULL);
}
}
else
{
cKeyY--;
is_set=1;
}
break;
case VK_DOWN:
if(cKeyY==pNow->line-1)
{if(pNow->start+pNow->line==pNow->totle)break;
pNow->start++;
InvalidateRect(hwnd,NULL,TRUE);
ScrollWindow(hwnd,0,-cyChar,NULL,NULL);
break;
}
cKeyY++;
is_set=1;
break;
}
if(is_set)
{
SetCaretPos((cKeyX+absX)*cxChar,cKeyY*cyChar);
is_set=0;
}
return 0;
case WM_PAINT:
for(i=0;i<cHexEdit;i++)
{
if(pHexEdit[i]->hwnd==hwnd)
{pNow=pHexEdit[i];
break;
}
}
if(pNow->is_show)HideCaret(hwnd);
hdc=BeginPaint(hwnd,&ps);
SelectObject(hdc,GetStockObject(DEFAULT_GUI_FONT));
GetTextMetrics(hdc,&tm);
cxChar=tm.tmAveCharWidth;
cyChar=tm.tmHeight+tm.tmExternalLeading;
for(j=pNow->start;j<pNow->totle;j++)
{
wsprintf(ctemp,"%03d(%03X)",j*16,j*16);
TextOut(hdc,cxChar,cyChar*(j-pNow->start),ctemp,8);
for(i=0;i<16;i++)
{
wsprintf(ctemp,"%02X ",pNow->buffer[i+j*16]);
TextOut(hdc,cxChar*(i*3+11),cyChar*(j-pNow->start),ctemp,2);
if(isprint(pNow->buffer[i+j*16]))TextOut(hdc,cxChar*(i+ascX+absX),cyChar*(j-pNow->start),(char *)(pNow->buffer+i+j*16),1);
else TextOut(hdc,cxChar*(i+ascX+absX),cyChar*(j-pNow->start),".",1);
}
}
EndPaint(hwnd,&ps);
if(pNow->is_show)
{CreateCaret(hwnd,NULL,0,cyChar);
SetCaretPos((cKeyX+absX)*cxChar,cKeyY*cyChar);
ShowCaret(hwnd);
}
break;
}
return DefWindowProc (hwnd, iMsg, wParam, lParam);
}
void RegisterEdit(void)
{
WNDCLASSEX wndclass;
wndclass.cbSize = sizeof (wndclass) ;
wndclass.style = CS_HREDRAW | CS_VREDRAW ;
wndclass.lpfnWndProc = EditProc ;
wndclass.cbClsExtra = 0 ;
wndclass.cbWndExtra = 0 ;
wndclass.hInstance = hInst;
wndclass.hIcon = NULL ;
wndclass.hCursor = NULL;
wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;
wndclass.lpszMenuName = NULL ;
wndclass.lpszClassName = szEditName ;
wndclass.hIconSm = NULL;
RegisterClassEx (&wndclass);
}
char tempbuffer[8196];
LRESULT CALLBACK WndProc (HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
{
LPSTR lpszButtonText[]={"格式扇区","写入扇区","读取扇区","退出程序","磁盘A","磁盘B","原函数","动态库"};
LPSTR lpszMsgText[5]={"磁头号","磁道号","扇区号","写入数据:","读出数据:"};
LPSTR lpszEditText[]={"0","81","100"},lpszCh[]={"↑","↓","↑↓","比较"};
PAINTSTRUCT ps;
HDC hdc;
int i,j,k;
switch(iMsg)
{
case WM_CREATE:
wsprintf((char *)buffer[0],"Encrypt DATA");
hwndSt=CreateWindowEx(WS_EX_TRANSPARENT,"STATIC",
NULL,WS_CHILD|WS_VISIBLE|SS_ETCHEDFRAME|WS_GROUP|WS_TABSTOP,
20,text_y-7,win_x-45,28,hwnd,(HMENU)50,hInst,NULL);
hwndSt2=CreateWindowEx(WS_EX_TRANSPARENT,"STATIC",
NULL,WS_CHILD|WS_VISIBLE|SS_ETCHEDFRAME|WS_GROUP|WS_TABSTOP,
win_x-220,text_y-40,195,26,hwnd,(HMENU)52,hInst,NULL);
for(i=0;i<3;i++)
{
hwndEdit[i]=CreateWindowEx(WS_EX_STATICEDGE,"Edit",lpszEditText[i],WS_CHILD|ES_NUMBER|ES_RIGHT|WS_TABSTOP|WS_VISIBLE,
text_x+20+i*85,5,(i>1?5:0)+25,18,hwndSt,(HMENU)(i+11),hInst,0);
hwndtemp=CreateWindow("STATIC",lpszMsgText[i],WS_CHILD|SS_LEFT|WS_VISIBLE,
text_x+85*i,text_y,40,22,hwnd,(HMENU)(200+i),hInst,0);
SendMessage(hwndtemp,WM_SETFONT,(WPARAM)GetStockObject(DEFAULT_GUI_FONT),MAKELPARAM(TRUE,0));
}
for(i=0;i<4;i++)
{hwndCh[i]=CreateWindow("Button",lpszCh[i],WS_CHILD|BS_PUSHBUTTON|WS_VISIBLE,
win_x-160+i*30+(i==3?10:0),text_y+125,25+(i>=2?10:0),20,hwnd,(HMENU)(i+400),hInst,0);
SendMessage(hwndCh[i],WM_SETFONT,(WPARAM)GetStockObject(DEFAULT_GUI_FONT),MAKELPARAM(TRUE,0));
hwndButton[i]=CreateWindow("Button",lpszButtonText[i],WS_CHILD|BS_PUSHBUTTON|WS_VISIBLE|WS_TABSTOP,
(win_x-85*4)/2+i*85,win_y-55,75,22,hwnd,(HMENU)(i+100),hInst,0);
SendMessage(hwndButton[i],WM_SETFONT,(WPARAM)GetStockObject(DEFAULT_GUI_FONT),MAKELPARAM(TRUE,0));
}
RegisterEdit();
hwndEdit[3]=CreateWindowEx(WS_EX_STATICEDGE,szEditName,NULL,WS_CHILD|WS_VISIBLE,
10,text_y+45,win_x-27,73,hwnd,(HMENU)(10),hInst,0);
hwndEdit[4]=CreateWindowEx(WS_EX_STATICEDGE,szEditName,NULL,WS_CHILD|WS_VISIBLE|ES_READONLY,
10,text_y+150,win_x-27,73,hwnd,(HMENU)(11),hInst,0);
for(i=0;i<2;i++)
{
hwndButton[i+4]=CreateWindow("Button",lpszButtonText[4+i],WS_CHILD|BS_AUTORADIOBUTTON|WS_VISIBLE|WS_GROUP*(1-i),
20+i*65,4,60,20,hwndSt,(HMENU)(i+104),hInst,0);
SendMessage(hwndButton[i+4],WM_SETFONT,(WPARAM)GetStockObject(DEFAULT_GUI_FONT),MAKELPARAM(TRUE,0));
//SendMessage(hwndEdit[3+i],WM_SETFONT,(WPARAM)GetStockObject(DEFAULT_GUI_FONT),MAKELPARAM(TRUE,0));
hwndtemp=CreateWindow("STATIC",lpszMsgText[i+3],WS_CHILD|SS_LEFT|WS_VISIBLE,
20,text_y+30+i*105,80,15,hwnd,(HMENU)(300+i),hInst,0);
SendMessage(hwndtemp,WM_SETFONT,(WPARAM)GetStockObject(DEFAULT_GUI_FONT),MAKELPARAM(TRUE,0));
}
for(i=0;i<2;i++)
{
hwndButton[6+i]=CreateWindow("Button",lpszButtonText[6+i],WS_CHILD|BS_AUTORADIOBUTTON|WS_VISIBLE|WS_GROUP*(1-i),
35+i*75,4,60,20,hwndSt2,(HMENU)i+105,hInst,0);
SendMessage(hwndButton[6+i],WM_SETFONT,(WPARAM)GetStockObject(DEFAULT_GUI_FONT),MAKELPARAM(TRUE,0));
}
SendMessage(hwndButton[4],BM_SETCHECK,BST_CHECKED,0);
SendMessage(hwndButton[6],BM_SETCHECK,BST_CHECKED,0);
//SetWindowText(hwndEdit[3],"Encrypt DATA");
break;
case WM_PAINT:
hdc=BeginPaint(hwnd,&ps);
SetBkMode(hdc,TRANSPARENT);
SetTextColor(hdc,0xfFFFFF);
TextOut(hdc,33,text_y-36,"磁盘编辑程序 Ver1.0 周化",27);
SetTextColor(hdc,0xff0000);
TextOut(hdc,32,text_y-37,"磁盘编辑程序 Ver1.0 周化",27);
EndPaint(hwnd,&ps);
break;
case WM_COMMAND:
switch(LOWORD(wParam))
{
case 100:
case 101:
case 102:
SubProc(hwnd,LOWORD(wParam)-100);
break;
case 103:
PostQuitMessage(0);
break;
case 400:
memcpy(buffer[0],buffer[1],512);
InvalidateRect(hwndEdit[3],NULL,TRUE);
break;
case 401:
memcpy(buffer[1],buffer[0],512);
InvalidateRect(hwndEdit[4],NULL,TRUE);
break;
case 402:
memcpy(tempbuffer,buffer[0],512);
memcpy(buffer[0],buffer[1],512);
memcpy(buffer[1],tempbuffer,512);
InvalidateRect(hwndEdit[3],NULL,TRUE);
InvalidateRect(hwndEdit[4],NULL,TRUE);
break;
case 403:
k=0;
j=0;
for(i=0;i<512;i++)
if(buffer[0][i]!=buffer[1][i])
{k++;
wsprintf(tempbuffer,"发现不同次数:%d\n\n%03d(%03X): %02d(%02X) <=> %02d(%02X)",k,i,i,buffer[0][i],buffer[0][i],buffer[1][i],buffer[1][i]);
j=MessageBoxEx(hwnd,tempbuffer,"比较数据",MB_OKCANCEL,0x804);
if(j==IDCANCEL)break;
}
if(j!=IDCANCEL)MessageBoxEx(hwnd,"比较结束!"," ",MB_OK|MB_ICONINFORMATION,0x804);
}
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
}
return DefWindowProc (hwnd, iMsg, wParam, lParam);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -