本文整理汇总了C++中COptItem_TreeCtrl::hItemToOrder方法的典型用法代码示例。如果您正苦于以下问题:C++ COptItem_TreeCtrl::hItemToOrder方法的具体用法?C++ COptItem_TreeCtrl::hItemToOrder怎么用?C++ COptItem_TreeCtrl::hItemToOrder使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类COptItem_TreeCtrl
的用法示例。
在下文中一共展示了COptItem_TreeCtrl::hItemToOrder方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: GetNextItem
CBaseTreeItem* CMsgTree::GetNextItem(int Flags, CBaseTreeItem* Item) // Item is 'int ID' if MTGN_BYID flag is set; returns CBaseTreeItem* or NULL
{
COptItem_TreeCtrl *TreeCtrl = GetTreeCtrl();
CBaseTreeItem* TreeItem = Item;
if (Flags & MTGN_BYID) {
int Order = TreeCtrl->IDToOrder((int)Item);
_ASSERT(Order != -1);
TreeItem = (Order <= TREECTRL_ROOTORDEROFFS) ? (CBaseTreeItem*)&TreeCtrl->RootItems[ROOT_ORDER_TO_INDEX(Order)] : (CBaseTreeItem*)&TreeCtrl->Value[Order];
}
int TVFlag = 0;
switch (Flags & ~MTGN_BYID) {
case MTGN_ROOT: TVFlag = TVGN_ROOT; break;
case MTGN_CHILD: TVFlag = TVGN_CHILD; break;
case MTGN_PARENT: TVFlag = TVGN_PARENT; break;
case MTGN_NEXT: TVFlag = TVGN_NEXT; break;
case MTGN_PREV: TVFlag = TVGN_PREVIOUS; break;
default: _ASSERT(0);
}
int Order = TreeCtrl->hItemToOrder(TreeView_GetNextItem(hTreeView, TreeItem ? TreeItem->hItem : NULL, TVFlag));
if (Order == -1)
return NULL;
return (Order <= TREECTRL_ROOTORDEROFFS) ? (CBaseTreeItem*)&TreeCtrl->RootItems[ROOT_ORDER_TO_INDEX(Order)] : (CBaseTreeItem*)&TreeCtrl->Value[Order];
}
示例2: CallWindowProc
static LRESULT CALLBACK ParentSubclassProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
{
CMsgTree *dat = CWndUserData(hWnd).GetMsgTree();
switch (Msg) {
case WM_NOTIFY:
if (((LPNMHDR)lParam)->hwndFrom == dat->hTreeView) {
switch (((LPNMHDR)lParam)->code) {
case TVN_BEGINDRAG:
{
LPNMTREEVIEW pnmtv = (LPNMTREEVIEW)lParam;
NMMSGTREE nm = { 0 };
COptItem_TreeCtrl *TreeCtrl = dat->GetTreeCtrl();
int Order = TreeCtrl->hItemToOrder(pnmtv->itemNew.hItem);
_ASSERT(Order != -1);
if (Order != -1) {
nm.ItemOld = (Order <= TREECTRL_ROOTORDEROFFS) ? (CBaseTreeItem*)&TreeCtrl->RootItems[ROOT_ORDER_TO_INDEX(Order)] : (CBaseTreeItem*)&TreeCtrl->Value[Order];
nm.hdr.code = MTN_BEGINDRAG;
nm.hdr.hwndFrom = dat->hTreeView;
nm.hdr.idFrom = GetDlgCtrlID(dat->hTreeView);
if (!SendMessage(hWnd, WM_NOTIFY, 0, (LPARAM)&nm)) {
SetCapture(hWnd);
dat->hPrevDropTarget = dat->hDragItem = pnmtv->itemNew.hItem;
SetFocus(dat->hTreeView);
TreeView_SelectItem(dat->hTreeView, dat->hDragItem);
}
}
}
break;
case TVN_SELCHANGED:
if (dat->UpdateLock)
return 0;
else {
LPNMTREEVIEW pnmtv = (LPNMTREEVIEW)lParam;
NMMSGTREE nm = { 0 };
COptItem_TreeCtrl *TreeCtrl = dat->GetTreeCtrl();
if (pnmtv->itemOld.hItem) {
int Order = TreeCtrl->IDToOrder(pnmtv->itemOld.lParam);
if (Order != -1) {
nm.ItemOld = (Order <= TREECTRL_ROOTORDEROFFS) ? (CBaseTreeItem*)&TreeCtrl->RootItems[ROOT_ORDER_TO_INDEX(Order)] : (CBaseTreeItem*)&TreeCtrl->Value[Order];
}
}
if (pnmtv->itemNew.hItem) {
int Order = TreeCtrl->IDToOrder(pnmtv->itemNew.lParam);
if (Order != -1) {
nm.ItemNew = (Order <= TREECTRL_ROOTORDEROFFS) ? (CBaseTreeItem*)&TreeCtrl->RootItems[ROOT_ORDER_TO_INDEX(Order)] : (CBaseTreeItem*)&TreeCtrl->Value[Order];
}
}
nm.hdr.code = MTN_SELCHANGED;
nm.hdr.hwndFrom = dat->hTreeView;
nm.hdr.idFrom = GetDlgCtrlID(dat->hTreeView);
SendMessage(hWnd, WM_NOTIFY, 0, (LPARAM)&nm);
}
break;
case TVN_BEGINLABELEDIT:
if (dat->GetTreeCtrl()->IDToOrder(((LPNMTVDISPINFO)lParam)->item.lParam) < 0)
return true; // cancel editing
g_OrigEditProc = (WNDPROC)SetWindowLongPtr(TreeView_GetEditControl(dat->hTreeView), GWLP_WNDPROC, (LONG_PTR)EditSubclassProc);
break;
case TVN_ENDLABELEDIT:
{
LPNMTVDISPINFO ptvdi = (LPNMTVDISPINFO)lParam;
if (ptvdi->item.pszText) {
COptItem_TreeCtrl *TreeCtrl = dat->GetTreeCtrl();
int Order = TreeCtrl->IDToOrder(ptvdi->item.lParam);
if (Order >= 0) {
TreeCtrl->Value[Order].Title = ptvdi->item.pszText;
TreeCtrl->SetModified(true);
NMMSGTREE nm = { 0 };
nm.ItemNew = &TreeCtrl->Value[Order];
nm.hdr.code = MTN_ITEMRENAMED;
nm.hdr.hwndFrom = dat->hTreeView;
nm.hdr.idFrom = GetDlgCtrlID(dat->hTreeView);
SendMessage(GetParent(dat->hTreeView), WM_NOTIFY, 0, (LPARAM)&nm);
return true; // commit new text
}
}
}
break;
case NM_CLICK:
case NM_RCLICK:
{
TVHITTESTINFO hitTest;
hitTest.pt.x = (short)LOWORD(GetMessagePos());
hitTest.pt.y = (short)HIWORD(GetMessagePos());
ScreenToClient(dat->hTreeView, &hitTest.pt);
TreeView_HitTest(dat->hTreeView, &hitTest);
if (hitTest.hItem) {
if (TreeView_GetSelection(dat->hTreeView) == hitTest.hItem) // make sure TVN_SELCHANGED notification is sent always, even if previous selected item was the same as new
TreeView_SelectItem(dat->hTreeView, NULL);
TreeView_SelectItem(dat->hTreeView, hitTest.hItem);
}
}
break;
case NM_CUSTOMDRAW:
//.........这里部分代码省略.........