Esempio n. 1
0
BOOL UpdateHighlights(BOOL fAlways)
{
	HWND hwndGridView;

	if ((hwndGridView = GetDlgItem(GetBookmarkWnd(), IDC_HIGHLIGHT_GRIDVIEW)) == 0)
		return FALSE;

	SendMessage(hwndGridView, WM_SETREDRAW, FALSE, 0);

	if(fAlways)
	{
		WIN32_FIND_DATA win32fd;
		HANDLE hFind;
		TCHAR szBookPath[MAX_PATH];
		TCHAR szFilePath[MAX_PATH];

		GetProgramDataPath(szBookPath, MAX_PATH);
		lstrcat(szBookPath, TEXT("\\Bookmarks\\*"));

		// enumerate all files in the bookmarks directory
		if((hFind = FindFirstFile(szBookPath, &win32fd)) != 0)
		{
			do 
			{
				if((win32fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == 0)
				{
					GetProgramDataPath(szBookPath, MAX_PATH);
					wsprintf(szFilePath, TEXT("%s\\Bookmarks\\%s"), szBookPath, win32fd.cFileName);				

					UpdateHighlight(0, szFilePath, TRUE);
				}

			} while(FindNextFile(hFind, &win32fd));

			FindClose(hFind);
		}
	}
	//else
	{
		int i;
		HWND hwndHexView;

		// add bookmarks for all open files
		for(i = 0; (hwndHexView = EnumHexView(g_hwndMain, i)) != 0; i++)
		{
			TCHAR szFilePath[MAX_PATH];
			HexView_GetFileName(hwndHexView, szFilePath, MAX_PATH);
			UpdateHighlight(szFilePath, 0, FALSE);
		}
	}

	SendMessage(hwndGridView, WM_SETREDRAW, TRUE, 0);
	return TRUE;
}
Esempio n. 2
0
BOOL HexSetCurFileHwnd(HWND hwndMain, HWND hwndHexView)
{
	int i;
	HWND hwndHV;

	for(i = 0; (hwndHV = EnumHexView(hwndMain, i)) != 0; i++)
	{
		if(hwndHV == hwndHexView)
		{
			HexSetCurFile(hwndMain, i, FALSE);
			return TRUE;
		}
	}

	return FALSE;
}
Esempio n. 3
0
HWND HexIsOpen(HWND hwndMain, LPCTSTR szFileName, int *idx)
{
	int i;
	HWND hwndHV;
	
	// is the file already open?!
	for(i = 0; (hwndHV = EnumHexView(hwndMain, i)) != 0; i++)
	{
		TCHAR szPath[MAX_PATH];
		
		if(HexView_GetFileName(hwndHV, szPath, MAX_PATH))
		{
			if(lstrcmpi(szPath, szFileName) == 0)
			{
				if(idx) 
					*idx = i;
				
				return hwndHV;
			}
		}
	}

	return NULL;
}
Esempio n. 4
0
BOOL UpdateHighlights2(HWND hwndHexView, HWND hwndGridView)
{

	HGRIDITEM hGridItem;
	hGridItem = GVI_ROOT;//GridView_InsertChild(hwndGridView, GVI_ROOT, &gvitem);

	SendMessage(hwndGridView, WM_SETREDRAW, FALSE, 0);
	GridView_DeleteAll(hwndGridView);

	if(hwndHexView == 0)
	{
		// just add bookmarks for specified hexview
		FillHexViewHighlights(GVI_ROOT, hwndHexView, hwndGridView, 0);
	}
	else if(hwndHexView != (HWND)-1)
	{
		int i;

		// add bookmarks for all open files
		for(i = 0; (hwndHexView = EnumHexView(g_hwndMain, i)) != 0; i++)
		{
			AddHexViewHighlights(GVI_ROOT, hwndHexView, hwndGridView, 0);
		}
	}
	else 
	{
		WIN32_FIND_DATA win32fd;
		HANDLE hFind;
		TCHAR szBookPath[MAX_PATH];
		TCHAR szFilePath[MAX_PATH];
		HCONFIG hConf ;

		GetProgramDataPath(szBookPath, MAX_PATH);
		lstrcat(szBookPath, TEXT("\\Bookmarks\\*"));

		// enumerate all files in the bookmarks directory
		if((hFind = FindFirstFile(szBookPath, &win32fd)) != 0)
		{
			do 
			{
				if((win32fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == 0)
				{
					HWND hwndHV; 
					int i;
					HCONFIG hBookmarks, bookmark;
					HGRIDITEM hItem;

					GetProgramDataPath(szBookPath, MAX_PATH);
					wsprintf(szFilePath, TEXT("%s\\Bookmarks\\%s"), szBookPath, win32fd.cFileName);				

					hConf = OpenConfig(szFilePath);
					GetConfigStr(hConf, TEXT("hexFileData\\filePath"), szFilePath, MAX_PATH, 0);

					if((hwndHV = HexIsOpen(g_hwndMain, szFilePath, 0)) != 0)
					{
						AddHexViewHighlights(GVI_ROOT, hwndHV, hwndGridView, 0);
					}
					else
					{
						hItem = CreateBookmarkFileRoot(GVI_ROOT, szFilePath, hwndGridView, FALSE);
					//EnumHighlights(szBookPath, addgv, hwndGridView);

						hBookmarks = OpenConfigSection(hConf, TEXT("hexFileData\\bookmarks"));

						for(i = 0; bookmark = EnumConfigSection(hBookmarks, TEXT("bookmark"), i); i++)
						{
							TCHAR name[100], desc[100];
							BOOKMARK bm = { 0, 0, 0, 0, 0, name, 100, desc, 100 };

							GetConfigBookmark(bookmark, &bm);

							FillGridView2(hwndGridView, hItem, NULL, &bm, 0);
						//callback(&bm, param);	
						}
					}

					CloseConfig(hConf);
				}

			} while(FindNextFile(hFind, &win32fd));

			FindClose(hFind);
		}


	}

/*	for(hbm = 0; (hbm = HexView_EnumBookmark(hwndHexView, hbm, &bm)) != 0; )
	{
		TCHAR szOffset[32];
		TCHAR szTitle[32];

		_stprintf(szTitle, TEXT("%s"), bm.pszTitle);
		_stprintf(szOffset, TEXT("%08I64X  (%d bytes)"), bm.offset, bm.length);

		FillGridView2(hwndGridView, hGridItem, hbm, szTitle, szOffset, bm.pszText);
	}*/

	SendMessage(hwndGridView, WM_SETREDRAW, TRUE, 0);
	GridView_Update(hwndGridView);

	//ForceClientResize(hwndGridView);
	//InvalidateRect(hwndGridView, 0, 0);

	return TRUE;
}
Esempio n. 5
0
//
//	Main Window message handler
//
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
    NMHDR *hdr;
    POINT pt;
    RECT  rect;
    HMENU hMenu;
    HWND hwndHV = GetActiveHexView(hwnd);//g_hwndHexView;
    int i;
    TCITEM tci;

    MAINWND *mainWnd = (MAINWND *)GetWindowLongPtr(hwnd, 0);

    switch(msg)
    {
    case WM_NCCREATE:

        if((mainWnd = malloc(sizeof(MAINWND))) == 0)
            return FALSE;

        SetWindowLongPtr(hwnd, 0, (LONG_PTR)mainWnd);
        ZeroMemory(mainWnd, sizeof(MAINWND));
        return TRUE;

    case WM_NCDESTROY:
        free(mainWnd);
        return 0;

    case WM_CREATE:

        g_hwndMain = hwnd;

        SetWindowIcon(hwnd, IDI_APP);

        // create a child-window EDIT control
        //g_hwndHexView	= CreateHexViewCtrl(hwnd);
        g_hwndTabView	= CreateWindow(WC_TABVIEW, TEXT(""), WS_CHILD|WS_VISIBLE,0,0,0,0,hwnd, 0, g_hInstance, 0);
        g_hwndStatusBar = CreateStatusBar(hwnd);

        SendMessage(g_hwndTabView, TCM_SETITEMSIZE, 0, MAKELPARAM(150, 0));

        SetStatusBarParts(g_hwndStatusBar);

        hwndHV = g_hwndHexView;

        mainWnd->hwndMain		= hwnd;
        mainWnd->hwndStatusBar	= g_hwndStatusBar;
        mainWnd->hwndTabView	= g_hwndTabView;

        CreateToolTip(g_hwndHexView);

//		g_hwndDock[0] = CreateDockWnd(&dock, hwnd, TEXT("Toolbar"));



        //g_hwndToolbar   = InitToolbar(hwnd);
        //g_hwndSearchBar = CreateSearchBar(hwnd);
        //g_hwndTypeView  = CreateTypeView(hwnd);


        SetFocus(hwndHV);


        // tell windows that we can handle drag+drop'd files
        DragAcceptFiles(hwnd, TRUE);

        UpdateRecentMenu(GetSubMenu(GetMenu(hwnd), 0));

        SetTimer(hwnd, 0xdeadbeef, 1000, 0);

        return TRUE;

    case WM_TIMER:
        if(wParam == 0xdeadbeef)
        {
            KillTimer(hwnd, wParam);
            //FirstTimeOptions(hwnd);
        }
        return 0;

    case WM_DROPFILES:

        // get the screen coordinates of the drop-location
        if(DragQueryPoint((HDROP)wParam, &pt))
            ClientToScreen(hwnd, &pt);

        GetWindowRect(hwndHV, &rect);

        // drop anywhere *except* the hexview, as that does D&D itself
        if(!PtInRect(&rect, pt))
        {
            HandleDropFiles(hwnd, (HDROP)wParam);
        }

        //CreateToolTip(mainWnd->hwndTabView);
        return 0;

    case WM_ENABLE:
        EnableWindow(g_hwndSearch, (BOOL)wParam);
        EnableWindow(g_hwndGoto, (BOOL)wParam);
        return 0;

    case WM_CONTEXTMENU:
        if((HWND)wParam == DockWnd_GetWindow(hwnd, DWID_TYPEVIEW))
        {
            HMENU hMenu = GetSubMenu(LoadMenu(g_hInstance, MAKEINTRESOURCE(IDR_TYPECONTEXT)), 0);
            UINT  u;

            MenuCheckMark(hMenu, IDM_TYPEVIEW_HEX, g_fDisplayHex);
            MenuCheckMark(hMenu, IDM_TYPEVIEW_BIGENDIAN, g_fDisplayBigEndian);
            u = TrackPopupMenu(hMenu, TPM_RETURNCMD, (short)LOWORD(lParam), (short)HIWORD(lParam), 0, hwnd, 0);

            SendMessage(DockWnd_GetContents(hwnd, DWID_TYPEVIEW), WM_COMMAND, u, 0);
        }

        break;

    case WM_COMMAND:
        return HexEdit_OnCommand(hwnd, LOWORD(wParam), HIWORD(wParam), (HWND)lParam);

    case WM_NOTIFY:
        hdr = (NMHDR *)lParam;
        if(hdr->hwndFrom == hwndHV)
            return HexViewNotifyHandler(mainWnd, hwnd, hdr);
        else
            return HexEdit_OnNotify(mainWnd, hwnd, (UINT)wParam, (NMHDR *)lParam);

    case WM_CLOSE:

        tci.mask = TCIF_PARAM;

        for(i = 0; (hwndHV = EnumHexView(hwnd, i)) != NULL; )
        {
            UINT uAnswer = HexFileCloseNotify(hwnd, hwndHV);

            if(uAnswer == IDCANCEL)
            {
                return 0;
            }
            else if(uAnswer == IDNO)
            {
                SaveHighlights(hwndHV);
                TabCtrl_DeleteItem(mainWnd->hwndTabView, i);
            }
            else
            {
                i++;
            }
        }

        // save settings *before* we destroy anything!
        DockWnd_SaveSettings(hwnd);

        // shut program down
        DestroyWindow(hwnd);
        return 0;

    case WM_DESTROY:
        DestroyWindow(hwndHV);

        //
        PostQuitMessage(0);
        return 0;

    case WM_SETFOCUS:
        SetFocus(hwndHV);
        return 0;

    case WM_SIZE:

        MainWndSize(mainWnd, LOWORD(lParam), HIWORD(lParam));
        UpdateStatusbar(mainWnd->hwndStatusBar);

        return 0;

    case WM_INITMENUPOPUP:
        hMenu = (HMENU)wParam;//GetMenu(hwnd);

        MenuCheckMark(hMenu, IDM_VIEW_TOOLBAR, DockWnd_IsOpen(hwnd, DWID_TOOLBAR));
        MenuCheckMark(hMenu, IDM_TOOLS_TYPEVIEW, DockWnd_IsOpen(hwnd, DWID_TYPEVIEW));
        MenuCheckMark(hMenu, IDM_TOOLS_SEARCHBAR, DockWnd_IsOpen(hwnd, DWID_SEARCHBAR));

        CheckMenuRadioItem(hMenu, IDM_VIEW_HEX, IDM_VIEW_BIN,
                           IDM_VIEW_HEX + (HexView_GetStyle(hwndHV) & HVS_FORMAT_MASK),
                           MF_BYCOMMAND);

        {   int look[32] = { 0, 0, 1, 0, 2 };
            CheckMenuRadioItem(hMenu, IDM_GROUP_BYTE, IDM_GROUP_DWORD,
                               IDM_GROUP_BYTE + look[HexView_GetGrouping(hwndHV)],
                               MF_BYCOMMAND);
        }

        {
            size_w selsize;
            UINT   edmode  = HexView_GetEditMode(hwndHV);
            BOOL   cftext  = IsClipboardFormatAvailable(CF_TEXT);
            BOOL   canundo = HexView_CanUndo(hwndHV);
            BOOL   canredo = HexView_CanRedo(hwndHV);

            HexView_GetSelSize(hwndHV, &selsize);

            //hMenu = GetSubMenu(GetMenu(hwnd), 1);

            EnableMenuCmdItem(hMenu, IDM_EDIT_UNDO,  canundo);
            EnableMenuCmdItem(hMenu, IDM_EDIT_REDO,  canredo);
            EnableMenuCmdItem(hMenu, IDM_EDIT_CUT,  selsize > 0 && edmode == HVMODE_INSERT);
            EnableMenuCmdItem(hMenu, IDM_EDIT_COPY, selsize > 0);
            EnableMenuCmdItem(hMenu, IDM_EDIT_COPYAS, selsize > 0);
            EnableMenuCmdItem(hMenu, IDM_EDIT_PASTE, cftext && edmode != HVMODE_READONLY  );
            EnableMenuCmdItem(hMenu, IDM_EDIT_PASTESPECIAL, edmode != HVMODE_READONLY  );
            EnableMenuCmdItem(hMenu, IDM_EDIT_DELETE, selsize > 0 && edmode != HVMODE_READONLY );

            EnableMenuCmdItem(hMenu, IDM_EDIT_REVERSE, selsize > 0 && edmode != HVMODE_READONLY );
            EnableMenuCmdItem(hMenu, IDM_TOOLS_TRANSFORM, selsize > 0 && edmode != HVMODE_READONLY );

            EnableMenuCmdItem(hMenu, IDM_FILE_REVERT, canundo || canredo);
        }

        return 0;
    }

    return DefWindowProc(hwnd, msg, wParam, lParam);
}