void CCList::SetInfoIcon(HTREEITEM hItem, HICON hIcon) { _ASSERT(hItem && hIcon && GetItemType(hItem) == MCLCIT_INFO); TVITEM tvi = { 0 }; tvi.mask = TVIF_HANDLE | TVIF_IMAGE | TVIF_SELECTEDIMAGE; tvi.hItem = hItem; HIMAGELIST iml = TreeView_GetImageList(hTreeView, TVSIL_NORMAL); tvi.iImage = tvi.iSelectedImage = ImageList_AddIcon(iml, hIcon); // again, we don't check for duplicate icons TreeView_SetImageList(hTreeView, iml, TVSIL_NORMAL); TreeView_SetItem(hTreeView, &tvi); }
void mIRCLinker::load(LOADINFO * lInfo) { m_mIRCHWND = lInfo->mHwnd; m_dwVersion = lInfo->mVersion; if (HIWORD(m_dwVersion) == 2) { //Fix the problem that mIRC v6.20 reports itself as 6.2 m_dwVersion -= 2; m_dwVersion += 20; // err how exactly does this fix it? } lInfo->mKeep = TRUE; if (this->getMainVersion() >= 7) { lInfo->mUnicode = TRUE; this->m_bUnicodemIRC = true; } initMapFile(); // Check if we're in debug mode TString isDebug; tsEval(isDebug, TEXT("$debug")); m_bDebug = (isDebug.trim().len() > 0); if (m_bDebug) { DCX_DEBUG(debug,TEXT("LoadmIRCLink"), TEXT("Debug mode detected...")); } if (this->getMainVersion() == 7) { DCX_DEBUG(debug,TEXT("LoadmIRCLink"), TEXT("mIRC V7 detected...")); } DCX_DEBUG(debug,TEXT("LoadmIRCLink"), TEXT("Finding mIRC_Toolbar...")); m_hToolbar = FindWindowEx(m_mIRCHWND,NULL,TEXT("mIRC_Toolbar"),NULL); DCX_DEBUG(debug,TEXT("LoadmIRCLink"), TEXT("Finding MDIClient...")); m_hMDI = FindWindowEx(m_mIRCHWND,NULL,TEXT("MDIClient"),NULL); DCX_DEBUG(debug,TEXT("LoadmIRCLink"), TEXT("Finding mIRC_SwitchBar...")); m_hSwitchbar = FindWindowEx(m_mIRCHWND,NULL,TEXT("mIRC_SwitchBar"),NULL); // v2 dll for mirc V7+ anyway. //if (isOrNewerVersion(6,30)) { // class renamed for 6.30+ DCX_DEBUG(debug,TEXT("LoadmIRCLink"), TEXT("Finding mIRC_TreeBar...")); m_hTreebar = FindWindowEx(m_mIRCHWND,NULL,TEXT("mIRC_TreeBar"),NULL); //} //else { // DCX_DEBUG(debug,TEXT("LoadmIRCLink"), TEXT("Finding mIRC_TreeList...")); // m_hTreebar = FindWindowEx(m_mIRCHWND,NULL,TEXT("mIRC_TreeList"),NULL); //} if (IsWindow(m_hTreebar)) { //m_hTreeview = GetWindow(mIRCLink.m_hTreebar,GW_CHILD); m_hTreeview = FindWindowEx(m_hTreebar,NULL,WC_TREEVIEW,NULL); if (IsWindow(m_hTreeview)) m_hTreeImages = TreeView_GetImageList(m_hTreeview,TVSIL_NORMAL); } }
// --------------------------------------------------------------------- // addItemToTree Function // Ham Add 1 item vao TreeView // + bChildren: = TRUE: item nay co con, nguoc lai: item nay khong co con // + hParent: handle cua parent item // + hPrev: handle cua item dung truoc // --------------------------------------------------------------------- HTREEITEM addItemToTree(TCHAR *szItemText, TCHAR* szLParam, HTREEITEM &hParent, HTREEITEM &hPrev, BOOL bChildren) { // Cau truc 1 thanh phan (Item) cua Tree-View TVITEM tvi; // tvi.LParam chua dia chi cua chuoi duong dan, va phan tu cuoi // cung cua chuoi cho biet o dia hay thu muc da duoc mo hay chua TVINSERTSTRUCT tvins; SHFILEINFO psfi; HIMAGELIST himl1 = TreeView_GetImageList(hwndTreeView, TVSIL_NORMAL); // HIMAGELIST himl2 = TreeView_GetImageList(hwndTreeView, TVSIL_STATE); // Khoi tao 1 item cua Tree-View // Open icon // SHGetFileInfo(szLParam, 0, &psfi2, sizeof ( SHFILEINFO ), SHGFI_ICON | SHGFI_OPENICON); // ImageList_AddIcon(himl2, psfi2.hIcon); // Normal icon SHGetFileInfo(szLParam, 0, &psfi, sizeof ( SHFILEINFO ), SHGFI_ICON | SHGFI_SMALLICON); ImageList_AddIcon(himl1, psfi.hIcon); tvi.mask = TVIF_TEXT | TVIF_PARAM | TVIF_CHILDREN | TVIF_SELECTEDIMAGE | TVIF_IMAGE; tvi.cChildren = bChildren; tvi.pszText = szItemText; tvi.lParam = (LPARAM) szLParam; tvi.iImage = ImageList_GetImageCount(himl1) - 1; tvi.iSelectedImage = tvi.iImage; // Image cua item - default la IDB_DOC // tvi.iImage = 0; // Index cua anh, dung cho trang thai closed (non-selected) // tvi.iSelectedImage = 0; // Index cua anh, dung cho trang thai opened (selected) // Khoi tao cau truc TVINSERTSTRUCT dung de them 1 item vao Tree-View // Xac dinh vi tri cua item can them // Neu la phan tu dau tien -> la goc tvins.item = tvi; tvins.hParent = hParent; tvins.hInsertAfter = hPrev; // Add item vao Tree-View HTREEITEM kq = TreeView_InsertItem(hwndTreeView, &tvins); // Cap nhat Image cua Parent -> IDB_CLOSED / IDB_OPENED // if (nLevel > 0) { // tvi.mask = TVIF_IMAGE | TVIF_SELECTEDIMAGE; // tvi.hItem = hParent; // tvi.iImage = 1; // //tvi.iSelectedImage = 2; // TreeView_SetItem(HTreeViewWnd, &tvi); //} return kq; }
HTREEITEM CCList::AddInfo(TCString Title, HTREEITEM hParent, HTREEITEM hInsertAfter, LPARAM lParam, HICON hIcon) { TVINSERTSTRUCT tvi = {}; tvi.item.mask = TVIF_TEXT | TVIF_STATE | TVIF_PARAM; tvi.item.pszText = Title; tvi.hParent = hParent; tvi.hInsertAfter = hInsertAfter; tvi.item.lParam = Items.AddElem(CCLItemData()); Items[tvi.item.lParam].lParam = lParam; tvi.item.state = tvi.item.stateMask = TVIS_BOLD | TVIS_EXPANDED; if (hIcon) { HIMAGELIST iml = TreeView_GetImageList(hTreeView, TVSIL_NORMAL); tvi.item.mask |= TVIF_IMAGE | TVIF_SELECTEDIMAGE; tvi.item.iImage = tvi.item.iSelectedImage = ImageList_AddIcon(iml, hIcon); // we don't check for duplicate icons, but i think that's ok, judging that the check will require some pretty significant amount of additional coding TreeView_SetImageList(hTreeView, iml, TVSIL_NORMAL); } return TreeView_InsertItem(hTreeView, &tvi); }
void TreeView::Add(const GenericString text) const { TVINSERTSTRUCT tv; tv.hParent = TVI_ROOT; tv.hInsertAfter = TVI_LAST; tv.item.mask = TVIF_TEXT; tv.item.pszText = const_cast<wchar_t*>( text.Ptr() ); tv.item.cchTextMax = text.Length(); if (TreeView_GetImageList( control, TVSIL_NORMAL )) { tv.item.mask = TVIF_TEXT|TVIF_IMAGE|TVIF_SELECTEDIMAGE; tv.item.iImage = ImageList::UNSELECTED; tv.item.iSelectedImage = ImageList::SELECTED; } TreeView_InsertItem( control, &tv ); }
/* * select_folder_proc - フォルダ選択ウィンドウプロシージャ */ static BOOL CALLBACK select_folder_proc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch (uMsg) { case WM_INITDIALOG: SendMessage(GetDlgItem(hDlg, IDC_STATIC_MSG), WM_SETTEXT, 0, (LPARAM)message); // イメージリストの設定 TreeView_SetImageList(GetDlgItem(hDlg, IDC_TREE), TreeView_GetImageList(from_treeview, TVSIL_NORMAL), TVSIL_NORMAL); // アイテムのコピー treeview_copy_tree(from_treeview, from_root_item, GetDlgItem(hDlg, IDC_TREE), TVI_ROOT); TreeView_Expand(GetDlgItem(hDlg, IDC_TREE), TreeView_GetRoot(GetDlgItem(hDlg, IDC_TREE)), TVE_EXPAND); break; case WM_CLOSE: EndDialog(hDlg, FALSE); break; case WM_COMMAND: switch (LOWORD(wParam)) { case IDCANCEL: SendMessage(hDlg, WM_CLOSE, 0, 0); break; case IDOK: // 選択アイテムの取得 ret_item = (HTREEITEM)treeview_get_lparam(GetDlgItem(hDlg, IDC_TREE), TreeView_GetSelection(GetDlgItem(hDlg, IDC_TREE))); EndDialog(hDlg, TRUE); break; } break; default: return FALSE; } return TRUE; }
BOOL OptTree_ProcessMessage(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam, BOOL *result, int idcTree, OPTTREE_OPTION *options, int optionCount) { enum { IMG_GROUP, IMG_CHECK, IMG_NOCHECK, IMG_RCHECK, IMG_NORCHECK, IMG_GRPOPEN, IMG_GRPCLOSED }; HWND hwndTree = GetDlgItem(hwnd, idcTree); switch (msg) { case WM_INITDIALOG: { int indx; TCHAR itemName[1024]; HIMAGELIST hImgLst; TreeView_SelectItem(hwndTree, NULL); TreeView_DeleteAllItems(hwndTree); hImgLst = ImageList_Create(GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON), ILC_COLOR|ILC_COLOR32|ILC_MASK, 5, 1); ImageList_ReplaceIcon(hImgLst, -1, (HICON)LoadSkinnedIcon(SKINICON_OTHER_MIRANDA)); ImageList_ReplaceIcon(hImgLst, -1, (HICON)LoadSkinnedIcon(SKINICON_OTHER_TICK)); // check on ImageList_ReplaceIcon(hImgLst, -1, (HICON)LoadSkinnedIcon(SKINICON_OTHER_NOTICK)); // check off ImageList_ReplaceIcon(hImgLst, -1, (HICON)LoadSkinnedIcon(SKINICON_OTHER_TICK)); // radio on ImageList_ReplaceIcon(hImgLst, -1, (HICON)LoadSkinnedIcon(SKINICON_OTHER_NOTICK)); // radio on ImageList_ReplaceIcon(hImgLst, -1, (HICON)LoadSkinnedIcon(SKINICON_OTHER_GROUPOPEN)); ImageList_ReplaceIcon(hImgLst, -1, (HICON)LoadSkinnedIcon(SKINICON_OTHER_GROUPSHUT)); TreeView_SetImageList(hwndTree, hImgLst, TVSIL_NORMAL); /* build options tree. based on code from IcoLib */ for (indx = 0; indx < optionCount; indx++) { TCHAR* sectionName; int sectionLevel = 0; HTREEITEM hSection = NULL; if (options[indx].szOptionName) lstrcpy(itemName, options[indx].szOptionName); else itemName[0] = 0; sectionName = itemName; while (sectionName) { // allow multi-level tree TCHAR* pItemName = sectionName; HTREEITEM hItem; if (sectionName = _tcschr(sectionName, '/')) { // one level deeper *sectionName = 0; sectionName++; } hItem = OptTree_FindNamedTreeItemAt(hwndTree, hSection, pItemName); //if (!sectionName || !hItem) if ((!sectionName || !hItem) && !(options[indx].dwFlag & OPTTREE_INVISIBLE)) { if (!hItem) { TVINSERTSTRUCT tvis = {0}; tvis.hParent = hSection; tvis.hInsertAfter = TVI_LAST;//TVI_SORT; tvis.item.mask = TVIF_TEXT|TVIF_PARAM|TVIF_STATE|TVIF_IMAGE|TVIF_SELECTEDIMAGE; tvis.item.pszText = pItemName; tvis.item.state = tvis.item.stateMask = TVIS_EXPANDED; if (sectionName) { tvis.item.lParam = -1; tvis.item.state |= TVIS_BOLD; tvis.item.stateMask |= TVIS_BOLD; tvis.item.iImage = tvis.item.iSelectedImage = IMG_GRPOPEN; } else { tvis.item.lParam = indx; if (options[indx].groupId == OPTTREE_CHECK) { tvis.item.iImage = tvis.item.iSelectedImage = IMG_NOCHECK; } else { tvis.item.iImage = tvis.item.iSelectedImage = IMG_NORCHECK; } } hItem = TreeView_InsertItem(hwndTree, &tvis); if (!sectionName) options[indx].hItem = hItem; } } sectionLevel++; hSection = hItem; } } OptTree_Translate(hwndTree); ShowWindow(hwndTree, SW_SHOW); TreeView_SelectItem(hwndTree, OptTree_FindNamedTreeItemAt(hwndTree, 0, NULL)); break; } case WM_DESTROY: { ImageList_Destroy(TreeView_GetImageList(hwndTree, TVSIL_NORMAL)); break; } case WM_NOTIFY: { LPNMHDR lpnmhdr = (LPNMHDR)lparam; if (lpnmhdr->idFrom != idcTree) break; switch (lpnmhdr->code) { case NM_CLICK: { TVHITTESTINFO hti; hti.pt.x=(short)LOWORD(GetMessagePos()); hti.pt.y=(short)HIWORD(GetMessagePos()); ScreenToClient(lpnmhdr->hwndFrom,&hti.pt); if(TreeView_HitTest(lpnmhdr->hwndFrom,&hti)) { if(hti.flags&TVHT_ONITEMICON) { TVITEM tvi; tvi.mask=TVIF_HANDLE|TVIF_PARAM|TVIF_IMAGE|TVIF_SELECTEDIMAGE; tvi.hItem=hti.hItem; TreeView_GetItem(lpnmhdr->hwndFrom,&tvi); switch (tvi.iImage) { case IMG_GRPOPEN: tvi.iImage = tvi.iSelectedImage = IMG_GRPCLOSED; TreeView_Expand(lpnmhdr->hwndFrom, tvi.hItem, TVE_COLLAPSE); break; case IMG_GRPCLOSED: tvi.iImage = tvi.iSelectedImage = IMG_GRPOPEN; TreeView_Expand(lpnmhdr->hwndFrom, tvi.hItem, TVE_EXPAND); break; case IMG_CHECK: tvi.iImage = tvi.iSelectedImage = IMG_NOCHECK; SendMessage(GetParent(hwnd), PSM_CHANGED, 0, 0); break; case IMG_NOCHECK: tvi.iImage = tvi.iSelectedImage = IMG_CHECK; SendMessage(GetParent(hwnd), PSM_CHANGED, 0, 0); break; case IMG_NORCHECK: { int i; for (i = 0; i < optionCount; ++i) { if (options[i].groupId == options[tvi.lParam].groupId) { TVITEM tvi_tmp; tvi_tmp.mask = TVIF_HANDLE|TVIF_IMAGE|TVIF_SELECTEDIMAGE; tvi_tmp.hItem = options[i].hItem; tvi_tmp.iImage = tvi_tmp.iSelectedImage = IMG_NORCHECK; TreeView_SetItem(lpnmhdr->hwndFrom, &tvi_tmp); } } tvi.iImage = tvi.iSelectedImage = IMG_RCHECK; SendMessage(GetParent(hwnd), PSM_CHANGED, 0, 0); break; } } TreeView_SetItem(lpnmhdr->hwndFrom,&tvi); } } break; } case TVN_ITEMEXPANDEDW: { LPNMTREEVIEWW lpnmtv = (LPNMTREEVIEWW)lparam; TVITEM tvi; tvi.mask=TVIF_HANDLE|TVIF_IMAGE|TVIF_SELECTEDIMAGE; tvi.hItem = lpnmtv->itemNew.hItem; tvi.iImage = tvi.iSelectedImage = (lpnmtv->itemNew.state & TVIS_EXPANDED) ? IMG_GRPOPEN : IMG_GRPCLOSED; SendMessageW(lpnmhdr->hwndFrom, TVM_SETITEMW, 0, (LPARAM)&tvi); break; } case TVN_ITEMEXPANDEDA: { LPNMTREEVIEWA lpnmtv = (LPNMTREEVIEWA)lparam; TVITEM tvi; tvi.mask=TVIF_HANDLE|TVIF_IMAGE|TVIF_SELECTEDIMAGE; tvi.hItem = lpnmtv->itemNew.hItem; tvi.iImage = tvi.iSelectedImage = (lpnmtv->itemNew.state & TVIS_EXPANDED) ? IMG_GRPOPEN : IMG_GRPCLOSED; SendMessageA(lpnmhdr->hwndFrom, TVM_SETITEMA, 0, (LPARAM)&tvi); break; } } break; } } return FALSE; }
BOOL CALLBACK FCLDialogProc(HWND wnd,UINT msg,WPARAM wp,LPARAM lp) { switch(msg) { case WM_INITDIALOG: { if (m_import) SetWindowText(wnd, _T("Select settings to import")); HWND wnd_tree = GetDlgItem(wnd, IDC_TREE); HWND wnd_combo = m_import ? NULL : GetDlgItem(wnd, IDC_DEST); SetWindowLongPtr(wnd_tree, GWL_STYLE, GetWindowLongPtr(wnd_tree, GWL_STYLE)|TVS_CHECKBOXES); uih::SetTreeViewWindowExplorerTheme(wnd_tree); if (wnd_combo) { ComboBox_AddString(wnd_combo, L"Any foobar2000 installation"); ComboBox_AddString(wnd_combo, L"This foobar2000 installation"); ComboBox_SetCurSel(wnd_combo, 0); } SendMessage(wnd_tree, WM_SETREDRAW, FALSE, 0); TreeView_SetItemHeight(wnd_tree, TreeView_GetItemHeight(wnd_tree)+2); cui::fcl::group_list m_groups; if (m_import) { cui::fcl::dataset_list datasets; pfc::list_t<GUID> groupslist; t_size j, count = datasets.get_count(); for (j=0; j<count; j++) { if (m_filter.have_item(datasets[j]->get_guid())) { GUID guid = datasets[j]->get_group(); if (!groupslist.have_item(guid)) groupslist.add_item(guid); cui::fcl::group_ptr ptr; while (m_groups.find_by_guid(guid, ptr)) { guid = ptr->get_parent_guid(); if (guid != pfc::guid_null) if (!groupslist.have_item(guid)) groupslist.add_item(guid); else break; } } } t_size i = m_groups.get_count(); for (; i; i--) if (!groupslist.have_item(m_groups[i-1]->get_guid())) m_groups.remove_by_idx(i-1); } m_groups.sort_by_name(); cui::fcl::group_list_filtered filtered(m_groups, pfc::guid_null); g_populate_tree(wnd_tree, m_groups, filtered); SendMessage(wnd_tree, WM_SETREDRAW, TRUE, 0); RedrawWindow(wnd_tree,NULL,NULL,RDW_INVALIDATE|RDW_UPDATENOW); } return TRUE; case WM_COMMAND: switch (wp) { case IDOK: { HWND wnd_tree = GetDlgItem(wnd, IDC_TREE); t_size i, count = m_nodes.get_count(); for (i=0; i<count; i++) { m_nodes[i].checked = 0 != TreeView_GetCheckState(wnd_tree, m_nodes[i].item); } HWND wnd_combo = m_import ? NULL : GetDlgItem(wnd, IDC_DEST); if (wnd_combo) { m_mode = ComboBox_GetCurSel(wnd_combo); } } EndDialog(wnd, 1); return FALSE; case IDCANCEL: EndDialog(wnd, 0); return FALSE; } break; case WM_CLOSE: EndDialog(wnd, 0); return 0; case WM_DESTROY: { HWND wnd_tree = GetDlgItem(wnd, IDC_TREE); HIMAGELIST il = TreeView_GetImageList(wnd_tree, TVSIL_STATE); TreeView_SetImageList(wnd_tree, NULL, TVSIL_STATE); ImageList_Destroy(il); DestroyWindow(wnd_tree); } break; case WM_NCDESTROY: break; } return FALSE; }
INT_PTR CALLBACK DlgProcNudgeOpt(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam) { static bool iInitDone = true; switch(msg) { case WM_INITDIALOG: iInitDone = false; TranslateDialogDefault(hwnd); CreateImageList(hwnd); PopulateProtocolList(hwnd); UpdateControls(hwnd); iInitDone = true; break; case WM_DESTROY: { HIMAGELIST hImList = TreeView_GetImageList(GetDlgItem(hwnd, IDC_PROTOLIST), TVSIL_NORMAL); if (hImList) { TreeView_SetImageList(GetDlgItem(hwnd, IDC_PROTOLIST), NULL, TVSIL_NORMAL); // Avoiding Access Violation in CommonControls DLL ImageList_Destroy(hImList); } break; } case WM_COMMAND: { WORD wNotifyCode = HIWORD(wParam); switch(LOWORD(wParam)) { case IDC_PREVIEW: Preview(); break; case IDC_USEBYPROTOCOL: GlobalNudge.useByProtocol = (IsDlgButtonChecked(hwnd,IDC_USEBYPROTOCOL)==BST_CHECKED); PopulateProtocolList(hwnd); UpdateControls(hwnd); SendMessage(GetParent(hwnd),PSM_CHANGED,0,0); break; case IDC_AUTORESEND: if (ActualNudge)// fix NULL pointer then no nudge support protocols { ActualNudge->autoResend = (IsDlgButtonChecked(hwnd,IDC_AUTORESEND)==BST_CHECKED); EnableWindow(GetDlgItem(hwnd,IDC_RESENDDELAY),ActualNudge->autoResend); } SendMessage(GetParent(hwnd),PSM_CHANGED,0,0); break; case IDC_CHECKST0: case IDC_CHECKST1: case IDC_CHECKST2: case IDC_CHECKST3: case IDC_CHECKST4: case IDC_CHECKST5: case IDC_CHECKST6: case IDC_CHECKST7: case IDC_CHECKST8: case IDC_CHECKST9: case IDC_CHECKPOP: case IDC_OPENMESSAGE: case IDC_CHECKCLIST: case IDC_CHECKCHAT: case IDC_CHECKSTATUS: case IDC_IGNORE: case IDC_OPENCONTACTLIST: SendMessage(GetParent(hwnd),PSM_CHANGED,0,0); break; case IDC_RESENDDELAY: case IDC_SENDTEXT: case IDC_RECVTEXT: case IDC_SENDTIME: case IDC_RECVTIME: if(iInitDone && (wNotifyCode == EN_CHANGE)) SendMessage(GetParent(hwnd),PSM_CHANGED,0,0); break; } break; } case WM_SHOWWINDOW: break; case WM_NOTIFY: switch(((LPNMHDR)lParam)->idFrom) { case 0: switch(((LPNMHDR)lParam)->code) { case PSN_APPLY: { BOOL Translated; GlobalNudge.sendTimeSec = GetDlgItemInt(hwnd,IDC_SENDTIME,&Translated,FALSE); GlobalNudge.recvTimeSec = GetDlgItemInt(hwnd,IDC_RECVTIME,&Translated,FALSE); GlobalNudge.resendDelaySec = GetDlgItemInt(hwnd,IDC_RESENDDELAY,&Translated,FALSE); if(GlobalNudge.resendDelaySec > 10 ) GlobalNudge.resendDelaySec = 10; if(GlobalNudge.resendDelaySec < 1 ) GlobalNudge.resendDelaySec = 1; if (ActualNudge)// fix NULL pointer then no nudge support protocols { ActualNudge->shakeClist = (IsDlgButtonChecked(hwnd,IDC_CHECKCLIST)==BST_CHECKED); ActualNudge->shakeChat = (IsDlgButtonChecked(hwnd,IDC_CHECKCHAT)==BST_CHECKED); ActualNudge->openMessageWindow = (IsDlgButtonChecked(hwnd,IDC_OPENMESSAGE)==BST_CHECKED); ActualNudge->openContactList = (IsDlgButtonChecked(hwnd,IDC_OPENCONTACTLIST)==BST_CHECKED); ActualNudge->useIgnoreSettings = (IsDlgButtonChecked(hwnd,IDC_IGNORE)==BST_CHECKED); ActualNudge->showStatus = (IsDlgButtonChecked(hwnd,IDC_CHECKSTATUS)==BST_CHECKED); ActualNudge->showPopup = (IsDlgButtonChecked(hwnd,IDC_CHECKPOP)==BST_CHECKED); ActualNudge->statusFlags = ((IsDlgButtonChecked(hwnd,IDC_CHECKST0)==BST_CHECKED) ? NUDGE_ACC_ST0 : 0) | ((IsDlgButtonChecked(hwnd,IDC_CHECKST1)==BST_CHECKED) ? NUDGE_ACC_ST1 : 0) | ((IsDlgButtonChecked(hwnd,IDC_CHECKST2)==BST_CHECKED) ? NUDGE_ACC_ST2 : 0) | ((IsDlgButtonChecked(hwnd,IDC_CHECKST3)==BST_CHECKED) ? NUDGE_ACC_ST3 : 0) | ((IsDlgButtonChecked(hwnd,IDC_CHECKST4)==BST_CHECKED) ? NUDGE_ACC_ST4 : 0) | ((IsDlgButtonChecked(hwnd,IDC_CHECKST5)==BST_CHECKED) ? NUDGE_ACC_ST5 : 0) | ((IsDlgButtonChecked(hwnd,IDC_CHECKST6)==BST_CHECKED) ? NUDGE_ACC_ST6 : 0) | ((IsDlgButtonChecked(hwnd,IDC_CHECKST7)==BST_CHECKED) ? NUDGE_ACC_ST7 : 0) | ((IsDlgButtonChecked(hwnd,IDC_CHECKST8)==BST_CHECKED) ? NUDGE_ACC_ST8 : 0) | ((IsDlgButtonChecked(hwnd,IDC_CHECKST9)==BST_CHECKED) ? NUDGE_ACC_ST9 : 0) ; GetDlgItemText(hwnd,IDC_SENDTEXT,ActualNudge->senText,TEXT_LEN); GetDlgItemText(hwnd,IDC_RECVTEXT,ActualNudge->recText,TEXT_LEN); ActualNudge->Save(); } GlobalNudge.Save(); } } case IDC_PROTOLIST: switch (((LPNMHDR)lParam)->code) { case NM_CLICK: { TVHITTESTINFO ht = {0}; DWORD dwpos = GetMessagePos(); POINTSTOPOINT(ht.pt, MAKEPOINTS(dwpos)); MapWindowPoints(HWND_DESKTOP, ((LPNMHDR)lParam)->hwndFrom, &ht.pt, 1); TreeView_HitTest(((LPNMHDR)lParam)->hwndFrom, &ht); /*if (TVHT_ONITEM & ht.flags) CheckChange(hwnd,ht.hItem);*/ if (TVHT_ONITEMSTATEICON & ht.flags) CheckChange(hwnd,ht.hItem); } case TVN_KEYDOWN: if (((LPNMTVKEYDOWN) lParam)->wVKey == VK_SPACE) CheckChange(hwnd, TreeView_GetSelection(((LPNMHDR)lParam)->hwndFrom)); break; case TVN_SELCHANGED: { LPNMTREEVIEW pnmtv = (LPNMTREEVIEW) lParam; if (pnmtv->itemNew.state & TVIS_SELECTED) UpdateControls(hwnd); } break; } break; } break; } return FALSE; }
ImageList TreeView::images () const { return (ImageList(ImageList::proxy( TreeView_GetImageList(handle(), TVSIL_NORMAL)))); }
INT_PTR CALLBACK DlgProcToolBar(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { HTREEITEM hti; switch (uMsg) { case WM_INITDIALOG: hToolBarTree = GetDlgItem(hwndDlg, IDC_TOOLBARTREE); { LONG_PTR style = GetWindowLongPtr(hToolBarTree, GWL_STYLE); style ^= TVS_CHECKBOXES; SetWindowLongPtr(hToolBarTree, GWL_STYLE, style); style |= TVS_CHECKBOXES; style |= TVS_NOHSCROLL; SetWindowLongPtr(hToolBarTree, GWL_STYLE, style); } { mir_cslock lck(ToolBarCS); BuildMenuObjectsTree(hToolBarTree); } Utils::enableDlgControl(hwndDlg, IDC_IMCHECK, FALSE); Utils::enableDlgControl(hwndDlg, IDC_CHATCHECK, FALSE); Utils::enableDlgControl(hwndDlg, IDC_CANBEHIDDEN, FALSE); SendDlgItemMessage(hwndDlg, IDC_SPIN1, UDM_SETRANGE, 0, MAKELONG(10, 0)); SendDlgItemMessage(hwndDlg, IDC_SPIN1, UDM_SETPOS, 0, MAKELONG(PluginConfig.g_iButtonsBarGap, 0)); TranslateDialogDefault(hwndDlg); bOptionsInit = FALSE; break; case WM_LBUTTONUP: if (drag) { TreeView_SetInsertMark(hToolBarTree, NULL, 0); drag = 0; ReleaseCapture(); TVHITTESTINFO hti; hti.pt.x = (short)LOWORD(lParam); hti.pt.y = (short)HIWORD(lParam); ClientToScreen(hwndDlg, &hti.pt); ScreenToClient(hToolBarTree, &hti.pt); hti.pt.y -= TreeView_GetItemHeight(hToolBarTree) / 2; TreeView_HitTest(hToolBarTree, &hti); if (hDragItem == hti.hItem) break; if (hti.flags & TVHT_ABOVE) hti.hItem = TVI_FIRST; TVITEM tvi; tvi.mask = TVIF_HANDLE | TVIF_PARAM; tvi.hItem = (HTREEITEM)hDragItem; TreeView_GetItem(hToolBarTree, &tvi); if (hti.flags & (TVHT_ONITEM | TVHT_ONITEMRIGHT) || (hti.hItem == TVI_FIRST)) { TVINSERTSTRUCT tvis; TCHAR strbuf[128]; tvis.item.mask = TVIF_HANDLE | TVIF_PARAM | TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_STATE; tvis.item.stateMask = 0xFFFFFFFF; tvis.item.pszText = strbuf; tvis.item.cchTextMax = sizeof(strbuf); tvis.item.hItem = (HTREEITEM)hDragItem; TreeView_GetItem(hToolBarTree, &tvis.item); TreeView_DeleteItem(hToolBarTree, hDragItem); tvis.hParent = NULL; tvis.hInsertAfter = hti.hItem; TreeView_SelectItem(hToolBarTree, TreeView_InsertItem(hToolBarTree, &tvis)); SendMessage((GetParent(hwndDlg)), PSM_CHANGED, 0, 0); } } break; case WM_MOUSEMOVE: if (drag) { TVHITTESTINFO hti; hti.pt.x = (short)LOWORD(lParam); hti.pt.y = (short)HIWORD(lParam); ClientToScreen(hwndDlg, &hti.pt); ScreenToClient(hToolBarTree, &hti.pt); TreeView_HitTest(hToolBarTree, &hti); if (hti.flags & (TVHT_ONITEM | TVHT_ONITEMRIGHT)) { HTREEITEM it = hti.hItem; hti.pt.y -= TreeView_GetItemHeight(hToolBarTree) / 2; TreeView_HitTest(hToolBarTree, &hti); if (!(hti.flags & TVHT_ABOVE)) TreeView_SetInsertMark(hToolBarTree, hti.hItem, 1); else TreeView_SetInsertMark(hToolBarTree, it, 0); } else { if (hti.flags & TVHT_ABOVE) SendMessage(hToolBarTree, WM_VSCROLL, MAKEWPARAM(SB_LINEUP, 0), 0); if (hti.flags & TVHT_BELOW) SendMessage(hToolBarTree, WM_VSCROLL, MAKEWPARAM(SB_LINEDOWN, 0), 0); TreeView_SetInsertMark(hToolBarTree, NULL, 0); } } break; case WM_COMMAND: if (HIWORD(wParam) == BN_CLICKED && GetFocus() == (HWND)lParam && (HWND)lParam != hToolBarTree) SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); if ((HIWORD(wParam) == EN_CHANGE) && ((HWND)lParam == GetFocus())) if (!bOptionsInit) SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); switch (LOWORD(wParam)) { case IDC_BBRESET: CallService(MS_DB_MODULE_DELETE, NULL, LPARAM("TabSRMM_Toolbar")); CB_HardReInit(); BuildMenuObjectsTree(hToolBarTree); break; case IDC_SEPARATOR: hti = TreeView_GetSelection(hToolBarTree); if (!hti) hti = TVI_FIRST; CustomButtonData *cbd = new CustomButtonData(); cbd->bSeparator = cbd->bHidden = cbd->bIMButton = cbd->bLSided = true; cbd->dwButtonOrigID = ++dwSepCount; cbd->pszModuleName = "Tabsrmm_sep"; cbd->iButtonWidth = 22; cbd->opFlags = BBSF_NTBDESTRUCT; LButtonsList.insert(cbd); TVINSERTSTRUCT tvis; tvis.hParent = NULL; tvis.hInsertAfter = hti; tvis.item.mask = TVIF_PARAM | TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE; tvis.item.pszText = TranslateT("<Separator>"); tvis.item.iImage = tvis.item.iSelectedImage = -1; tvis.item.lParam = (LPARAM)cbd; hti = TreeView_InsertItem(hToolBarTree, &tvis); TreeView_SetCheckState(hToolBarTree, hti, (cbd->bIMButton || cbd->bChatButton)); } break; case WM_NOTIFY: switch (((LPNMHDR)lParam)->idFrom) { case 0: switch (((LPNMHDR)lParam)->code) { case PSN_RESET: CB_ReInitCustomButtons(); dwSepCount = M.GetDword("TabSRMM_Toolbar", "SeparatorsCount", 0); return 1; case PSN_APPLY: hti = TreeView_GetSelection(hToolBarTree); if (hti) { TVITEM tvi; tvi.mask = TVIF_HANDLE | TVIF_PARAM; tvi.hItem = hti; TreeView_GetItem(hToolBarTree, &tvi); if (tvi.lParam) { CustomButtonData *cbd = (CustomButtonData*)tvi.lParam; if (cbd) { cbd->bIMButton = IsDlgButtonChecked(hwndDlg, IDC_IMCHECK) != 0; cbd->bChatButton = IsDlgButtonChecked(hwndDlg, IDC_CHATCHECK) != 0; cbd->bCanBeHidden = IsDlgButtonChecked(hwndDlg, IDC_CANBEHIDDEN) != 0; } } } SaveTree(hToolBarTree); CB_ReInitCustomButtons(); PluginConfig.g_iButtonsBarGap = (BYTE)SendDlgItemMessage(hwndDlg, IDC_SPIN1, UDM_GETPOS, 0, 0); if (PluginConfig.g_iButtonsBarGap != M.GetByte("ButtonsBarGap", 1)) M.BroadcastMessageAsync(WM_SIZE, 0, 0); db_set_b(0, SRMSGMOD_T, "ButtonsBarGap", PluginConfig.g_iButtonsBarGap); BuildMenuObjectsTree((HWND)hToolBarTree); Utils::enableDlgControl(hwndDlg, IDC_IMCHECK, FALSE); Utils::enableDlgControl(hwndDlg, IDC_CHATCHECK, FALSE); Utils::enableDlgControl(hwndDlg, IDC_CANBEHIDDEN, FALSE); return 1; } break; case IDC_TOOLBARTREE: switch (((LPNMHDR)lParam)->code) { case TVN_BEGINDRAGA: case TVN_BEGINDRAGW: SetCapture(hwndDlg); drag = 1; hDragItem = ((LPNMTREEVIEW)lParam)->itemNew.hItem; TreeView_SelectItem(hToolBarTree, hDragItem); break; case TVN_SELCHANGINGA: case TVN_SELCHANGINGW: hti = TreeView_GetSelection(hToolBarTree); if (hti != NULL) { TCHAR strbuf[128]; TVITEM tvi; tvi.hItem = hti; tvi.pszText = strbuf; tvi.cchTextMax = sizeof(strbuf); tvi.mask = TVIF_TEXT | TVIF_HANDLE | TVIF_PARAM; TreeView_GetItem(hToolBarTree, &tvi); if (tvi.lParam == 0 || !TreeView_GetCheckState(hToolBarTree, tvi.hItem) || !_tcscmp(tvi.pszText, MIDDLE_SEPARATOR)) break; CustomButtonData *cbd = (CustomButtonData*)tvi.lParam; if (cbd) { cbd->opFlags = (IsDlgButtonChecked(hwndDlg, IDC_IMCHECK)) ? BBSF_IMBUTTON : 0; cbd->opFlags |= (IsDlgButtonChecked(hwndDlg, IDC_CHATCHECK)) ? BBSF_CHATBUTTON : 0; cbd->opFlags |= (IsDlgButtonChecked(hwndDlg, IDC_CANBEHIDDEN)) ? BBSF_CANBEHIDDEN : 0; cbd->bIMButton = (IsDlgButtonChecked(hwndDlg, IDC_IMCHECK) ? TRUE : FALSE); cbd->bChatButton = (IsDlgButtonChecked(hwndDlg, IDC_CHATCHECK) ? TRUE : FALSE); cbd->bCanBeHidden = (IsDlgButtonChecked(hwndDlg, IDC_CANBEHIDDEN) ? TRUE : FALSE); } } break; case TVN_SELCHANGEDW: case TVN_SELCHANGEDA: hti = TreeView_GetSelection(hToolBarTree); if (hti != NULL) { TCHAR strbuf[128]; TVITEM tvi; tvi.pszText = strbuf; tvi.cchTextMax = sizeof(strbuf); tvi.mask = TVIF_TEXT | TVIF_HANDLE | TVIF_PARAM; tvi.hItem = hti; TreeView_GetItem(hToolBarTree, &tvi); if (!TreeView_GetCheckState(hToolBarTree, tvi.hItem) || !_tcscmp(tvi.pszText, MIDDLE_SEPARATOR)) { Utils::enableDlgControl(hwndDlg, IDC_IMCHECK, FALSE); Utils::enableDlgControl(hwndDlg, IDC_CHATCHECK, FALSE); Utils::enableDlgControl(hwndDlg, IDC_CANBEHIDDEN, FALSE); break; } if (tvi.lParam == 0) break; CustomButtonData *cbd = (CustomButtonData*)tvi.lParam; if (cbd) { Utils::enableDlgControl(hwndDlg, IDC_IMCHECK, TRUE); Utils::enableDlgControl(hwndDlg, IDC_CHATCHECK, TRUE); Utils::enableDlgControl(hwndDlg, IDC_CANBEHIDDEN, TRUE); CheckDlgButton(hwndDlg, IDC_IMCHECK, (cbd->bIMButton) ? 1 : 0); CheckDlgButton(hwndDlg, IDC_CHATCHECK, (cbd->bChatButton) ? 1 : 0); CheckDlgButton(hwndDlg, IDC_CANBEHIDDEN, (cbd->bCanBeHidden) ? 1 : 0); } } break; case NM_CLICK: TVHITTESTINFO hti = { 0 }; GetCursorPos(&hti.pt); ScreenToClient(hToolBarTree, &hti.pt); if (TreeView_HitTest(hToolBarTree, &hti)) { if (hti.flags&TVHT_ONITEMSTATEICON) { SendMessage(GetParent(hwndDlg), PSM_CHANGED, (WPARAM)hwndDlg, 0); if (TreeView_GetCheckState(hToolBarTree, hti.hItem)) { Utils::enableDlgControl(hwndDlg, IDC_IMCHECK, FALSE); Utils::enableDlgControl(hwndDlg, IDC_CHATCHECK, FALSE); Utils::enableDlgControl(hwndDlg, IDC_CANBEHIDDEN, FALSE); CheckDlgButton(hwndDlg, IDC_IMCHECK, 1); } else { Utils::enableDlgControl(hwndDlg, IDC_IMCHECK, TRUE); Utils::enableDlgControl(hwndDlg, IDC_CHATCHECK, TRUE); Utils::enableDlgControl(hwndDlg, IDC_CANBEHIDDEN, TRUE); } TreeView_SelectItem(hToolBarTree, hti.hItem); } } } } break; case WM_DESTROY: HIMAGELIST hIml = TreeView_GetImageList(GetDlgItem(hwndDlg, IDC_TOOLBARTREE), TVSIL_NORMAL); ImageList_Destroy(hIml); hIml = TreeView_GetImageList(GetDlgItem(hwndDlg, IDC_TOOLBARTREE), TVSIL_STATE); ImageList_Destroy(hIml); break; } return FALSE; }
static int BuildMenuObjectsTree(HWND hToolBarTree) { HTREEITEM hti; int iImage = 0; TVINSERTSTRUCT tvis; tvis.hParent = NULL; tvis.hInsertAfter = TVI_LAST; tvis.item.mask = TVIF_PARAM | TVIF_TEXT | TVIF_SELECTEDIMAGE | TVIF_IMAGE; TreeView_DeleteAllItems(hToolBarTree); himgl = ImageList_Create(GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON), ILC_COLOR32 | ILC_MASK, 2, 2); ImageList_AddIcon(himgl, LoadSkinnedIcon(SKINICON_OTHER_SMALLDOT)); ImageList_Destroy(TreeView_GetImageList(hToolBarTree, TVSIL_NORMAL)); TreeView_SetImageList(hToolBarTree, himgl, TVSIL_NORMAL); if ((RButtonsList.getCount() + LButtonsList.getCount()) == 0) return FALSE; mir_cslock lck(ToolBarCS); for (int i = 0; i < LButtonsList.getCount(); i++) { CustomButtonData *cbd = LButtonsList[i]; tvis.item.lParam = (LPARAM)cbd; if (cbd->bSeparator) { tvis.item.pszText = TranslateT("<Separator>"); tvis.item.iImage = tvis.item.iSelectedImage = 0; } else { tvis.item.pszText = TranslateTS(cbd->ptszTooltip); iImage = ImageList_AddIcon(himgl, Skin_GetIconByHandle(cbd->hIcon)); tvis.item.iImage = tvis.item.iSelectedImage = iImage; } cbd->opFlags = 0; hti = TreeView_InsertItem(hToolBarTree, &tvis); TreeView_SetCheckState(hToolBarTree, hti, (cbd->bIMButton || cbd->bChatButton)); } tvis.item.lParam = 0; tvis.item.mask |= TVIF_STATE; tvis.item.pszText = MIDDLE_SEPARATOR; tvis.item.stateMask = TVIS_BOLD; tvis.item.state = TVIS_BOLD; tvis.item.iImage = tvis.item.iSelectedImage = -1; hti = TreeView_InsertItem(hToolBarTree, &tvis); TreeView_SetCheckState(hToolBarTree, hti, 1); for (int i = RButtonsList.getCount()-1; i >= 0; i--) { CustomButtonData *cbd = RButtonsList[i]; tvis.item.lParam = (LPARAM)cbd; if (cbd->bSeparator) { tvis.item.pszText = TranslateT("<Separator>"); tvis.item.iImage = tvis.item.iSelectedImage = -1; } else { tvis.item.pszText = TranslateTS(cbd->ptszTooltip); iImage = ImageList_AddIcon(himgl, Skin_GetIconByHandle(cbd->hIcon)); tvis.item.iImage = tvis.item.iSelectedImage = iImage; } tvis.item.state = 0; cbd->opFlags = 0; hti = TreeView_InsertItem(hToolBarTree, &tvis); TreeView_SetCheckState(hToolBarTree, hti, (cbd->bIMButton || cbd->bChatButton)); } return 1; }