void CMainWnd::OnNotify(LPNMHDR lpnmh) { switch(lpnmh->code) { case TCN_SELCHANGE: OnTabChange(); break; } }
bool MainWindow::eventFilter(QObject *o, QEvent *e) { if (o == tab_bar_ && e->type() == QEvent::MouseButtonPress) { QMouseEvent *mouse_event = static_cast<QMouseEvent *>(e); if (mouse_event->button() == Qt::MidButton) { // middle button pressed on a tab int index = tab_bar_->tabAt(mouse_event->pos()); // remove tab and Search if it's not "+" if (index < tab_bar_->count() - 1) { tab_bar_->removeTab(index); delete searches_[index]; searches_.erase(searches_.begin() + index); if (static_cast<size_t>(tab_bar_->currentIndex()) == searches_.size()) tab_bar_->setCurrentIndex(searches_.size() - 1); OnTabChange(tab_bar_->currentIndex()); // that's because after removeTab text will be set to previous search's caption // which is because my way of dealing with "+" tab is hacky and should be replaced by something sane tab_bar_->setTabText(tab_bar_->count() - 1, "+"); } return true; } } return QMainWindow::eventFilter(o, e); }
static LRESULT CALLBACK Child_WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { case WM_PAINT: return Child_OnPaint(hWnd); case WM_SIZE: return Child_OnSize(hWnd); case WM_NOTIFY: { HHInfo *info = (HHInfo*)GetWindowLongPtrW(hWnd, GWLP_USERDATA); NMHDR *nmhdr = (NMHDR*)lParam; switch(nmhdr->code) { case TCN_SELCHANGE: return OnTabChange(hWnd); case TVN_SELCHANGEDW: return OnTopicChange(info, (void*)((NMTREEVIEWW *)lParam)->itemNew.lParam); case NM_DBLCLK: if(!info) return 0; switch(info->current_tab) { case TAB_INDEX: return OnTopicChange(info, (void*)((NMITEMACTIVATE *)lParam)->lParam); case TAB_SEARCH: return OnTopicChange(info, (void*)((NMITEMACTIVATE *)lParam)->lParam); } break; case NM_RETURN: if(!info) return 0; switch(info->current_tab) { case TAB_INDEX: { HWND hwndList = info->tabs[TAB_INDEX].hwnd; LVITEMW lvItem; lvItem.iItem = (int) SendMessageW(hwndList, LVM_GETSELECTIONMARK, 0, 0); lvItem.mask = TVIF_PARAM; SendMessageW(hwndList, LVM_GETITEMW, 0, (LPARAM)&lvItem); OnTopicChange(info, (void*) lvItem.lParam); return 0; } case TAB_SEARCH: { if(nmhdr->hwndFrom == info->search.hwndEdit) { char needle[100]; DWORD i, len; len = GetWindowTextA(info->search.hwndEdit, needle, sizeof(needle)); if(!len) { FIXME("Unable to get search text.\n"); return 0; } /* Convert the requested text for comparison later against the * lower case version of HTML file contents. */ for(i=0;i<len;i++) needle[i] = tolower(needle[i]); InitSearch(info, needle); return 0; }else if(nmhdr->hwndFrom == info->search.hwndList) { HWND hwndList = info->search.hwndList; LVITEMW lvItem; lvItem.iItem = (int) SendMessageW(hwndList, LVM_GETSELECTIONMARK, 0, 0); lvItem.mask = TVIF_PARAM; SendMessageW(hwndList, LVM_GETITEMW, 0, (LPARAM)&lvItem); OnTopicChange(info, (void*) lvItem.lParam); return 0; } break; } } break; } break; } default: return DefWindowProcW(hWnd, message, wParam, lParam); } return 0; }