frhed 헥사 에디터~

@codemaru · August 18, 2006 · 3 min read

frhed         md 0

오늘은 줄창나게 디버깅만 했습니다. ㅠ.ㅜ 디버깅 하다가 헥사 에디팅 할 일이 있어서 헥사 에디터를 실행 시켰더니 이 놈이 기간이 만료 되었더군요. 크랙 받기도 귀찮고 해서 무료 하나를 다운 받아 쓰려고 했더니 이놈(frhed)이 걸렸습니다.

소스 까지 공개 되어 있는 아주 착한 놈이었죠. 덕분에 헥사 에디팅은 편하게 마무리 했는데, 알고 보니 휠을 먹지 않더군요. 이런 ㅡ.ㅡ# VB6 이후로 휠 안먹는 프로그램에 불편함을 깊이 통감했던 지라 소스를 대충 수정했습니다. 덕분에 휠을 먹도록 고쳤습니다. 그냥 휠 돌리면 기존 휠하고 동일하게 동작합니다. 더디게 느껴 지신다면 컨트롤 키 누르고 돌리면 좀 더 많이 넘어 갑니다. 그냥은 한번에 스크롤바 한줄씩 움직이는 것이고, 컨트롤을 누르면 한 페이지씩 움직이게 됩니다.

소스는 API로 작성되었 더군요. 헥사 에디터 쪽을 공부하고 싶은 분들에게는 좋은 소스일 것 같습니다. 아래는 패치해서 컴파일한 실행 파일과 패치된 내용을 담고 있는 diff 파일 입니다. 필요하신 분들은 다운 받아 보세용~

FRHED.zip frhed_diff.zip

아래 코드는 패치의 핵심인 휠 메시지 핸들러 입니다.

궁금하신 분들은 클릭해 보세요~ more..

int HexEditorWindow::mousewheel( WPARAM wParam, LPARAM lParam )  

{  

  UINT lines;  

  int unit;  

  short delta;  

  

  SystemParametersInfo(SPI\_GETWHEELSCROLLLINES, 0, &lines, 0);  

  unit = (int) WHEEL\_DELTA / lines;  

  delta = (short) HIWORD(wParam);  

  m\_sumDelta += delta;  

  

  int nscroll = m\_sumDelta / unit;  

  m\_sumDelta %= unit;  

  

  int cmd[2][2] =   

                   {  

                       { SB\_LINEUP, SB\_LINEDOWN },  

                       { SB\_PAGEUP, SB\_PAGEDOWN }  

                   };  

  

  int control = (GetKeyState(VK\_CONTROL) & 0x8000) != 0;  

  int down = FALSE;  

  if(nscroll < 0)  

  {  

       down = TRUE;  

       nscroll = -nscroll;  

  }  

  

  for(int i=0; i<nscroll; ++i)  

  {  

       vscroll(cmd[control][down], 0);  

  }  

  

  return 0;  

}
@codemaru
돌아보니 좋은 날도 있었고, 나쁜 날도 있었다. 그런 나의 모든 소소한 일상과 배움을 기록한다. 여기에 기록된 모든 내용은 한 개인의 관점이고 의견이다. 내가 속한 조직과는 1도 상관이 없다.
(C) 2001 YoungJin Shin, 0일째 운영 중