Dynamic spin controls on tree ctrl label editing?
Deepak Saxena -- Deepak_Saxena@ccm.ch.intel.com Tuesday, February 20, 1996 Environment: VC++ 4.0 / Win NT 3.51 I have a treeview in which I am allowing label editing for certain tree items, and I want to create a spin control dynamically when the user begins editing an item that contains an integer only value. Here is my current code snipet that tries to do this(Taken from CMyTreeView::OnBeginLabelEdit()): // Have already validated that item is editable, etc, etc //Get edit ctrl CEdit *pEdit = GetTreeCtrl().GetEditControl(); // Subclass it...CIntEdit accepts only digits m_wndIntEdit.SubclassWindow(pEdit->m_hWnd); // Get edit rectangle, find spin ctrl rectangle CRect rectEdit; pEdit->GetWindowRect(&rectEdit); ScreenToClient(&rectEdit); rectEdit.left = rectEdit.right; rectEdit.right = rectEdit.left + 16; //Create spin control m_wndSpin.Create(UDS_SETBUDDYINT | UDS_WRAP | UDS_ARROWKEYS, rectEdit, &GetTreeCtrl(), IDC_SPIN_INTPROP ); // Set buddy window m_wndSpin.SetBuddy(pEdit); // Show spin control m_wndSpin.ShowWindow(SW_SHOW); Now...the above does not work. The spin control never shows up. I've also tried to change the &GetTreeCtrl() parameter to this, so that the view is the parent of the ctrl instead of the treectrl. Still no luck. My current option I am looking at if this is not possible is to just dump the standard edit box that CTreeCtrl creates and create my own edit box and spin control by overiding OnSelChange(). Is there an easier way? Tnx, Deepak
Mike Blaszczak -- mikeblas@interserv.com Thursday, February 22, 1996 On Tue, 20 Feb 1996, Deepak Saxenawrote: >Environment: VC++ 4.0 / Win NT 3.51 Thanks. >// Get edit rectangle, find spin ctrl rectangle >CRect rectEdit; >pEdit->GetWindowRect(&rectEdit); >ScreenToClient(&rectEdit); >rectEdit.left = rectEdit.right; >rectEdit.right = rectEdit.left + 16; >//Create spin control >m_wndSpin.Create(UDS_SETBUDDYINT | UDS_WRAP | UDS_ARROWKEYS, > rectEdit, &GetTreeCtrl(), IDC_SPIN_INTPROP ); Does Create() return TRUE or FALSE? You should check return codes, you know. You're making the new up/down control a child of the edit control without using the WS_CHILD style. You're also positioning the control in client coordinates relative to the list view rather than the edit control, though you've made it a child of the edit control. If its a child window, it should be positioned relative to the parent, not relative to the parent's parent. Even if you positioned the control correctly, it wouldn't show up because, as a child window, it would be clipped--it's being created outside of the area of the edit control. >// Set buddy window >m_wndSpin.SetBuddy(pEdit); > >// Show spin control >m_wndSpin.ShowWindow(SW_SHOW); Why not just use the WS_VISIBLE style? >Now...the above does not work. The spin control never shows up. >I've also tried to change the &GetTreeCtrl() parameter to this, >so that the view is the parent of the ctrl instead of the >treectrl. Still no luck. My current option I am looking at if >this is not possible is to just dump the standard edit box that >CTreeCtrl creates and create my own edit box and spin control by >overiding OnSelChange(). Is there an easier way? I think that if you get your window positioning and child-parent relationship in order, you'll have less trouble. I don't have time to research it for you, but I suppose it is possible that this edit control is similar to the drop-down box of a combo box. That is, Windows might create the control as a top-level window so that it can appear anywhere, over anything, across any window border. You might neeed to use a similar technique for your up-down control. .B ekiM -- TCHAR szDisc[] = _T("These words are my own; I do not speak for Microsoft.");
| Вернуться в корень Архива |