LRESULT CALLBACK HighlightViewCommandHandler(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { extern HWND g_hwndMain; HWND hwndHV = GetActiveHexView(g_hwndMain); if (msg == WM_COMMAND) { switch (LOWORD(wParam)) { case IDC_HIGHLIGHT_ADD: HighlightDlg(NULL, NULL); break; case IDC_HIGHLIGHT_EDIT: { HWND hwndGridView = GetDlgItem(hwnd, IDC_HIGHLIGHT_GRIDVIEW); ULONG curSelItem = GridView_GetCurSel(hwndGridView); HGRIDITEM hgCurSelItem = GridView_GetItemHandle(hwndGridView, curSelItem); GVITEM curItem = { GVIF_PARAM, curSelItem, 0 }; // Get the current item - param contains the HBOOKMARK for this item if (GridView_GetItem(hwndGridView, hgCurSelItem, &curItem) && curItem.param) { HBOOKMARK hbm = (HBOOKMARK)curItem.param; // Get the parent item - param contains the HWND for the hexview if (GridView_GetParentItem(hwndGridView, hgCurSelItem, &curItem) && curItem.param) { HWND hwndHexView = (HWND)curItem.param; HighlightDlg(hwndHexView, hbm); } } break; } case IDC_HIGHLIGHT_DELETE: { TCHAR itemText[100] = { 0 }; HWND hwndGridView = GetDlgItem(hwnd, IDC_HIGHLIGHT_GRIDVIEW); ULONG curSelItem = GridView_GetCurSel(hwndGridView); HGRIDITEM hgCurSelItem = GridView_GetItemHandle(hwndGridView, curSelItem); GVITEM curItem = { GVIF_PARAM | GVIF_TEXT, curSelItem, 0 }; curItem.pszText = itemText; curItem.cchTextMax = ARRAYSIZE(itemText); // Get the current item - param contains the HBOOKMARK for this item if (GridView_GetItem(hwndGridView, hgCurSelItem, &curItem)) { if (curItem.param) { HBOOKMARK hbm = (HBOOKMARK)curItem.param; // Get the parent item - param contains the HWND for the hexview if (GridView_GetParentItem(hwndGridView, hgCurSelItem, &curItem) && curItem.param) { HWND hwndHexView = (HWND)curItem.param; GridView_DeleteItem(hwndGridView, hgCurSelItem); HexView_DelBookmark(hwndHexView, hbm); GridView_Update(hwndGridView); } } else { // This wasn't a live bookmark - it exists in a config file TCHAR parentText[100] = { 0 }; curItem.pszText = parentText; if (GridView_GetParentItem(hwndGridView, hgCurSelItem, &curItem)) { DeleteBookmarkFromConfig(parentText, itemText); GridView_DeleteAll(hwndGridView); UpdateHighlights(TRUE); } } } break; } } return 0; } if(msg == WM_NOTIFY) { NMGRIDVIEW *nmgv = (NMGRIDVIEW *)lParam; if(nmgv->hdr.code == GVN_DBLCLK) { GVITEM gvi = { GVIF_PARAM, nmgv->iItem, 0 };//nmgv->nColumn }; if(GridView_GetParent(nmgv->hdr.hwndFrom, nmgv->hItem)) { if(GridView_GetItem(nmgv->hdr.hwndFrom, nmgv->hItem, &gvi)) { // file is not open yet! if(gvi.param == 0) { TCHAR szFileName[MAX_PATH]; gvi.mask |= GVIF_TEXT; gvi.pszText = szFileName; gvi.cchTextMax = MAX_PATH; if(GridView_GetParentItem(nmgv->hdr.hwndFrom, nmgv->hItem, &gvi)) { HexOpenFile(g_hwndMain, szFileName, DefaultFileMode()); } } else { HighlightDlg(hwndHV, (HBOOKMARK)gvi.param); } } } } else if(nmgv->hdr.code == GVN_DELETED) { GVITEM gvi = { GVIF_PARAM, nmgv->iItem, 0 };//nmgv->nColumn }; //HIGHLIGHT_PARAM hp; // get current item in gridview GridView_GetItem(nmgv->hdr.hwndFrom, nmgv->hItem, &gvi); HexView_DelBookmark(hwndHV, (HBOOKMARK)gvi.param); return 0; } else if(nmgv->hdr.code == GVN_SELCHANGED) { GVITEM gvi = { GVIF_PARAM, nmgv->iItem, 0 };//nmgv->nColumn }; BOOKMARK bm; // get the gvi.param - contains the HBOOKMARK for this bookmark entry if(GridView_GetItem(nmgv->hdr.hwndFrom, nmgv->hItem, &gvi) && gvi.param) { HBOOKMARK hbm = (HBOOKMARK)gvi.param; // get parent item's param - contains HWND to the hexview if(GridView_GetParentItem(nmgv->hdr.hwndFrom, nmgv->hItem, &gvi) && gvi.param) { // make sure the current file is active hwndHV = (HWND)gvi.param; HexSetCurFileHwnd(g_hwndMain, hwndHV); if(HexView_GetBookmark(hwndHV, hbm, &bm)) { HexView_SetCurPos(hwndHV, bm.offset + bm.length); HexView_SetSelStart(hwndHV, bm.offset); HexView_SetSelEnd(hwndHV, bm.offset + bm.length); HexView_ScrollTo(hwndHV, bm.offset + bm.length); InvalidateRect(hwndHV,0,0); } } } return 0; } } return 0; }
LRESULT HexEdit_OnNotify(MAINWND *mainWnd, HWND hwnd, UINT idCtrl, NMHDR *hdr) { HWND hwndHV = GetActiveHexView(hwnd); if(hdr->hwndFrom == mainWnd->hwndTabView) { TCITEM tci = { TCIF_PARAM }; TabCtrl_GetItem(mainWnd->hwndTabView, TabCtrl_GetCurSel(mainWnd->hwndTabView), &tci); // has the user clicked a file-tab? if(hdr->code == TCN_SELCHANGE) { HexSetCurFile(hwnd, TabCtrl_GetCurSel(mainWnd->hwndTabView), TRUE); OnFileChange(mainWnd); return 0; } else if(hdr->code == TCN_CLOSING) { // prompt close if if(HexFileCloseNotify(hwnd, hwndHV) == IDCANCEL) return TRUE; return 0; } else if(hdr->code == TCN_CLOSE) { // ask user if they want to save changes if(HexFileCloseNotify(hwnd, hwndHV) == IDCANCEL) return 0; //SetCurFile(hwnd, TabCtrl_GetCurSel(mainWnd->hwndTabView)); //DestroyWindow((HWND)tci.lParam); HexCloseFile(mainWnd, TabCtrl_GetCurSel(mainWnd->hwndTabView)); return 0; } } // double-click in a statusbar pane? if(hdr->hwndFrom == mainWnd->hwndStatusBar && hdr->code == NM_DBLCLK) { NMMOUSE *nmmouse; // statusbar is the only window at present which sends double-clicks nmmouse = (NMMOUSE *)hdr; // toggle the Readonly/Insert/Overwrite mode if(nmmouse->dwItemSpec == 4) { ToggleEditorMode(hwndHV); UpdateStatusBarText(mainWnd->hwndStatusBar, hwndHV); } return 0; } if(hdr->code == TBN_DROPDOWN) { if(GetParent(hdr->hwndFrom) == mainWnd->hwndStatusBar) { StatusBar_DropDownTB(mainWnd, hwndHV, (NMTOOLBAR *)hdr); } if(hdr->hwndFrom == mainWnd->hwndToolbar) { HexPasteSpecialDlg2(hwnd); } return 0; } /* if(hdr->code == DWN_ISDOCKABLE) { RECT rc1, rc2; // Get main window "outer" rectangle GetWindowRect(hwnd, &rc1); // Get main window "inner" rectangle GetClientRect(hwnd, &rc2); MapWindowPoints(hwnd, 0, (POINT *)&rc2, 2); InflateRect(&rc2, -2, -2); return DockWnd_GetDockSide(hwnd, (NMDOCKWNDQUERY *)hdr, &rc1, &rc2); }*/ if(hdr->code == DWN_SAVESETTINGS) { NMDOCKWNDCREATE *nmdw = (NMDOCKWNDCREATE *)hdr; TRACEA(" DWN_SAVESETTINGS: %d\n", nmdw->uId); switch(nmdw->hdr.idFrom) { case DWID_TYPEVIEW: case DWID_ALLTYPES: SaveTypeView(nmdw->hwndClient, nmdw->hKey); break; } return 0; } if(hdr->code == DWN_UPDATE_CONTENT) { NMDOCKWND *nmdw = (NMDOCKWND *)hdr; HWND hwndHV = GetActiveHexView(hwnd); switch(nmdw->hdr.idFrom) { case DWID_HIGHLIGHT: UpdateHighlights(TRUE); break; } return 0; } if(hdr->code == DWN_CREATE_CONTENT) { NMDOCKWNDCREATE *nmdw = (NMDOCKWNDCREATE *)hdr; TRACEA("DWN_CREATE_CONTENT: %d\n", hdr->idFrom); switch(nmdw->hdr.idFrom) { case DWID_TOOLBAR: mainWnd->hwndToolbar = InitToolbar(hdr->hwndFrom); return (LONG)mainWnd->hwndToolbar; case DWID_SEARCHBAR: return (LONG)CreateSearchBar(hdr->hwndFrom); case DWID_ALLTYPES: //SendMessage(hwndTB, TB_SETSTATE, IDM_TOOLS_TYPEVIEW, DockWnd_IsOpen(g_hwndMain, DWID_TYPEVIEW) ? TBSTATE_CHECKED|TBSTATE_ENABLED : TBSTATE_ENABLED); return (LONG)CreateTypeView(hdr->hwndFrom, nmdw->hKey, TRUE);//TEXT("struct ALL")); case DWID_TYPEVIEW: //SendMessage(hwndTB, TB_SETSTATE, IDM_TOOLS_TYPEVIEW, DockWnd_IsOpen(g_hwndMain, DWID_TYPEVIEW) ? TBSTATE_CHECKED|TBSTATE_ENABLED : TBSTATE_ENABLED); return (LONG)CreateTypeView(hdr->hwndFrom, nmdw->hKey, 0); case DWID_HIGHLIGHT: return (LONG)CreateHighlightView(hdr->hwndFrom); case DWID_STRINGS: return (LONG)CreateStringsView(hdr->hwndFrom); } } else if(hdr->code == DWN_DOCKCHANGE) { NMDOCKWND *nmdw = (NMDOCKWND *)hdr; switch(nmdw->hdr.idFrom) { case DWID_TOOLBAR: SendMessage(DockWnd_GetContents(mainWnd->hwndMain, DWID_TOOLBAR), TB_SETPARENT, (WPARAM)hdr->hwndFrom, 0); return 0; } } else if(hdr->code == DWN_CLOSING) { NMDOCKWND *nmdw = (NMDOCKWND *)hdr; switch(nmdw->hdr.idFrom) { case DWID_TYPEVIEW: break; } return 0; } return DefWindowProc(hwnd, WM_NOTIFY, idCtrl, (LONG)hdr); }