//重绘选项卡 void SiTabCtl_OnDrawItem(DRAWITEMSTRUCT* item) { HBRUSH hBrush; TCITEM tci; char text[SI_BUF_SIZE]; int type; memset(&tci,0,sizeof(TCITEM)); tci.mask = TCIF_TEXT | TCIF_STATE; tci.pszText = (LPSTR)text; tci.cchTextMax = SI_BUF_SIZE; TabCtrl_GetItem(hwnd_tab_ctl,item->itemID,&tci); type = GetColorIndex(text); //创建颜色为hdc(窗口矩形)背景色的实画刷 hBrush = CreateSolidBrush(color_table[type]); if(SiTabCtl_GetCurItem() == item->itemID) { hBrush = CreateSolidBrush(RGB(255,0,0)); } //SetTextColor(lpDrawItem->hDC, RGB(0, 0, 255)); //FrameRect(item->hDC,&item->rcItem,hBrush); FillRect(item->hDC,&item->rcItem,hBrush); DeleteObject(hBrush); SetBkMode(item->hDC,TRANSPARENT); DrawText(item->hDC,text,strlen(text),&item->rcItem,DT_CENTER|DT_LEFT|DT_VCENTER|DT_SINGLELINE); }
//单击选项卡 void SiTabCtl_OnLButtonClk(void) { int rtv; int idx = SiTabCtl_GetCurItem(); int count = SiTabCtl_GetItemCount(); if(idx != count) return; if(count == 0) return; rtv = MessageBox(hwnd_tab_ctl,"是否关闭所有标签?","sitab plugin by Red_angelX",MB_OKCANCEL|MB_ICONQUESTION|MB_DEFBUTTON2); if(rtv == IDCANCEL) return; while(count > 0) { HWND hwnd; TCITEM tci; memset(&tci,0,sizeof(TCITEM)); tci.mask = TCIF_TEXT | TCIF_PARAM; TabCtrl_GetItem(hwnd_tab_ctl,count-1,&tci); hwnd = (HWND)tci.lParam; SendMessage(hwnd,WM_SYSCOMMAND,SC_CLOSE,0); count--; } }
//标签选中改变 void SiTabCtl_OnSelChange(void) { HWND hwnd; int idx = SiTabCtl_GetCurItem(); TCITEM tci; memset(&tci,0,sizeof(TCITEM)); tci.mask = TCIF_TEXT | TCIF_PARAM; TabCtrl_GetItem(hwnd_tab_ctl,idx,&tci); hwnd = (HWND)tci.lParam; SendMessage(GetParent(hwnd),WM_MDIACTIVATE,(WPARAM)hwnd,0); }
static LRESULT CALLBACK SiFrameSubClass(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch(uMsg) { case WM_SETTEXT: { char buf[SI_BUF_SIZE]; strcpy(buf,(char*)lParam); strcat(buf,PLUGIN_TITLE); lParam = (LPARAM)buf; } break; case WM_NOTIFY: { LPNMHDR hdr = (LPNMHDR)lParam; if(hdr->hwndFrom != hwnd_tab_ctl) { break; } if(hdr->code == TCN_SELCHANGE) { SiTabCtl_OnSelChange(); } else if(hdr->code == TCN_SELCHANGING) { last_active_item = SiTabCtl_GetCurItem(); } else if(hdr->code == NM_CLICK) { SiTabCtl_OnLButtonClk(); } } break; case WM_DRAWITEM: { DRAWITEMSTRUCT* item = (DRAWITEMSTRUCT*)lParam; if (item->hwndItem != hwnd_tab_ctl) break; SiTabCtl_OnDrawItem(item); } break; default: break; } LRESULT lr = CallWindowProc(old_si_frame_proc, hWnd, uMsg, wParam, lParam); return lr; }
//双击选项卡 void SiTabCtl_OnLButtonDblClk(void) { HWND hwnd; int idx = SiTabCtl_GetCurItem(); if(idx == -1) return; TCITEM tci; memset(&tci,0,sizeof(TCITEM)); tci.mask = TCIF_TEXT | TCIF_PARAM; TabCtrl_GetItem(hwnd_tab_ctl,idx,&tci); hwnd = (HWND)tci.lParam; SendMessage(hwnd,WM_SYSCOMMAND,SC_CLOSE,0); }