void ShellBrowser::OnTreeItemRClick(int idCtrl, LPNMHDR pnmh) { CONTEXT("ShellBrowser::OnTreeItemRClick()"); TVHITTESTINFO tvhti; GetCursorPos(&tvhti.pt); ScreenToClient(_left_hwnd, &tvhti.pt); tvhti.flags = LVHT_NOWHERE; (void)TreeView_HitTest(_left_hwnd, &tvhti); if (TVHT_ONITEM & tvhti.flags) { LPARAM itemData = TreeView_GetItemData(_left_hwnd, tvhti.hItem); if (itemData) { Entry* entry = (Entry*)itemData; ClientToScreen(_left_hwnd, &tvhti.pt); HRESULT hr = entry->do_context_menu(_hwnd, tvhti.pt, _cm_ifs); if (SUCCEEDED(hr)) refresh(); else CHECKERROR(hr); } } }
void ShellBrowserChild::Tree_DoItemMenu(HWND hwndTreeView, HTREEITEM hItem, LPPOINT pptScreen) { CONTEXT("ShellBrowserChild::Tree_DoItemMenu()"); LPARAM itemData = TreeView_GetItemData(hwndTreeView, hItem); if (itemData) { ShellEntry* entry = (ShellEntry*)itemData; ShellDirectory* dir = entry->_up; ShellFolder folder = dir? dir->_folder: GetDesktopFolder(); LPCITEMIDLIST pidl = static_cast<ShellEntry*>(entry)->_pidl; CHECKERROR(ShellFolderContextMenu(folder, _hwnd, 1, &pidl, pptScreen->x, pptScreen->y, _cm_ifs)); } }
float AdInput(UINT channel) { float volts; long adcvalue; long value; CHECKERROR(olDaGetSingleValue(board.hdass, &adcvalue, channel, gain)); if (encoding != OL_ENC_BINARY) { value ^= 1L << (resolution - 1); value &= (1L << resolution) - 1; } volts = ((float)max - (float)min) / (1L << resolution) * adcvalue;// + (float)min; olDaReleaseDASS(board.hdass); return volts; }
bool DesktopShellView::DoContextMenu(int x, int y) { IDataObject* selection; HRESULT hr = _pShellView->GetItemObject(SVGIO_SELECTION, IID_IDataObject, (void**)&selection); if (FAILED(hr)) return false; PIDList pidList; hr = pidList.GetData(selection); if (FAILED(hr)) { selection->Release(); //CHECKERROR(hr); return false; } LPIDA pida = pidList; if (!pida->cidl) { selection->Release(); return false; } LPCITEMIDLIST parent_pidl = (LPCITEMIDLIST) ((LPBYTE)pida+pida->aoffset[0]); LPCITEMIDLIST* apidl = (LPCITEMIDLIST*) alloca(pida->cidl*sizeof(LPCITEMIDLIST)); for(int i=pida->cidl; i>0; --i) apidl[i-1] = (LPCITEMIDLIST) ((LPBYTE)pida+pida->aoffset[i]); hr = ShellFolderContextMenu(ShellFolder(parent_pidl), _hwnd, pida->cidl, apidl, x, y, _cm_ifs); selection->Release(); if (SUCCEEDED(hr)) refresh(); else CHECKERROR(hr); return true; }
LRESULT FileChildWindow::WndProc(UINT nmsg, WPARAM wparam, LPARAM lparam) { switch(nmsg) { case WM_DRAWITEM: { LPDRAWITEMSTRUCT dis = (LPDRAWITEMSTRUCT)lparam; Entry* entry = (Entry*) dis->itemData; if (dis->CtlID == IDW_TREE_LEFT) { _left->draw_item(dis, entry); return TRUE; } else if (dis->CtlID == IDW_TREE_RIGHT) { _right->draw_item(dis, entry); return TRUE; } goto def;} case WM_SIZE: if (wparam != SIZE_MINIMIZED) resize_children(LOWORD(lparam), HIWORD(lparam)); return DefMDIChildProc(_hwnd, nmsg, wparam, lparam); case PM_GET_FILEWND_PTR: return (LRESULT)this; case WM_SETFOCUS: { TCHAR path[MAX_PATH]; if (_left && _left->_cur) { _left->_cur->get_path(path, COUNTOF(path)); SetCurrentDirectory(path); } SetFocus(_focus_pane? _right_hwnd: _left_hwnd); goto def;} case PM_DISPATCH_COMMAND: { Pane* pane = GetFocus()==_left_hwnd? _left: _right; switch(LOWORD(wparam)) { case ID_WINDOW_NEW: {CONTEXT("FileChildWindow PM_DISPATCH_COMMAND ID_WINDOW_NEW"); if (_root._entry->_etype == ET_SHELL) FileChildWindow::create(ShellChildWndInfo(GetParent(_hwnd)/*_hmdiclient*/, _path, DesktopFolderPath())); else FileChildWindow::create(FileChildWndInfo(GetParent(_hwnd)/*_hmdiclient*/, _path)); break;} case ID_REFRESH: {CONTEXT("ID_REFRESH"); refresh(); break;} case ID_ACTIVATE: {CONTEXT("ID_ACTIVATE"); activate_entry(pane); break;} default: if (pane->command(LOWORD(wparam))) return TRUE; else return super::WndProc(nmsg, wparam, lparam); } return TRUE;} case WM_CONTEXTMENU: { // first select the current item in the listbox HWND hpanel = (HWND) wparam; POINT pt; pt.x = LOWORD(lparam); pt.y = HIWORD(lparam); POINT pt_screen = pt; ScreenToClient(hpanel, &pt); SendMessage(hpanel, WM_LBUTTONDOWN, 0, MAKELONG(pt.x, pt.y)); SendMessage(hpanel, WM_LBUTTONUP, 0, MAKELONG(pt.x, pt.y)); // now create the popup menu using shell namespace and IContextMenu Pane* pane = GetFocus()==_left_hwnd? _left: _right; int idx = ListBox_GetCurSel(*pane); if (idx != -1) { Entry* entry = (Entry*) ListBox_GetItemData(*pane, idx); HRESULT hr = entry->do_context_menu(_hwnd, pt_screen, _cm_ifs); if (SUCCEEDED(hr)) refresh(); else CHECKERROR(hr); } break;} default: def: return super::WndProc(nmsg, wparam, lparam); } return 0; }
LRESULT QuickLaunchBar::WndProc(UINT nmsg, WPARAM wparam, LPARAM lparam) { switch(nmsg) { case PM_REFRESH: AddShortcuts(); break; case PM_GET_WIDTH: { // take line wrapping into account int btns = SendMessage(_hwnd, TB_BUTTONCOUNT, 0, 0); int rows = SendMessage(_hwnd, TB_GETROWS, 0, 0); if (rows<2 || rows==btns) return _size; RECT rect; int max_cx = 0; for(QuickLaunchMap::const_iterator it=_entries.begin(); it!=_entries.end(); ++it) { SendMessage(_hwnd, TB_GETRECT, it->first, (LPARAM)&rect); if (rect.right > max_cx) max_cx = rect.right; } return max_cx;} case PM_UPDATE_DESKTOP: UpdateDesktopButtons(wparam); break; case WM_CONTEXTMENU: { TBBUTTON btn; QuickLaunchMap::iterator it; Point screen_pt(lparam), clnt_pt=screen_pt; ScreenToClient(_hwnd, &clnt_pt); Entry* entry = NULL; int idx = SendMessage(_hwnd, TB_HITTEST, 0, (LPARAM)&clnt_pt); if (idx>=0 && SendMessage(_hwnd, TB_GETBUTTON, idx, (LPARAM)&btn)!=-1 && (it=_entries.find(btn.idCommand))!=_entries.end()) { entry = it->second._entry; } if (entry) { // entry is NULL for desktop switch buttons HRESULT hr = entry->do_context_menu(_hwnd, screen_pt, _cm_ifs); if (!SUCCEEDED(hr)) CHECKERROR(hr); } else goto def; break;} default: def: return super::WndProc(nmsg, wparam, lparam); } return 0; }