⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 控制.htm

📁 VC的一些技巧性文档
💻 HTM
📖 第 1 页 / 共 3 页
字号:
&nbsp;&nbsp;&nbsp;&nbsp;*pResult = 0;<Br>}<Br></Br>void CTreeViewExt::OnMouseMove(UINT nFlags, CPoint point)<Br>{<Br>&nbsp;&nbsp;&nbsp;&nbsp;if (m_bDraggingNow)<Br>&nbsp;&nbsp;&nbsp;&nbsp;{<Br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CTreeCtrl& tree = GetTreeCtrl();<Br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_pDragImageList->DragEnter(&tree, point);<Br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_pDragImageList->DragMove(point);<Br>&nbsp;&nbsp;&nbsp;&nbsp;}<Br></Br>&nbsp;&nbsp;&nbsp;&nbsp;CTreeView::OnMouseMove(nFlags, point);<Br>}<Br></Br>void CTreeViewExt::OnLButtonUp(UINT nFlags, CPoint point)<Br>{<Br>&nbsp;&nbsp;&nbsp;&nbsp;if (m_bDraggingNow)<Br>&nbsp;&nbsp;&nbsp;&nbsp;{<Br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ReleaseCapture();<Br></Br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_bDraggingNow = FALSE;<Br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_pDragImageList->EndDrag();<Br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delete m_pDragImageList;<Br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_pDragImageList = NULL;<Br></Br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CTreeCtrl& tree = GetTreeCtrl();<Br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UINT flags;<Br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HTREEITEM hTargetItem = tree.HitTest(point, &flags);//得到目标<Br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (hTargetItem != NULL && IsItemCanBeDroppedOn(m_hDraggedItem, hTargetItem))<Br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{//查询是否可以成功完成,条件是开始时选中的Item和结束使选中的ITEM是否满足你的条件<Br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HTREEITEM hNewItem = tree.InsertItem("Untitled", hTargetItem);<Br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CopyItemProperties(hNewItem, m_hDraggedItem);//进行处理<Br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (nFlags != MK_CONTROL)<Br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tree.DeleteItem(m_hDraggedItem);<Br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<Br></Br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_hDraggedItem = NULL;<Br>&nbsp;&nbsp;&nbsp;&nbsp;}<Br></Br>&nbsp;&nbsp;&nbsp;&nbsp;CTreeView::OnLButtonUp(nFlags, point);<Br>}<Br></Br>BOOL CTreeViewExt::ItemCanBeDragged(HTREEITEM hItem)<Br>{//作用为决定现在是否能开始,可以作为一种运行时的选项<Br>&nbsp;&nbsp;&nbsp;&nbsp;return FALSE;<Br>}<Br></Br>BOOL CTreeViewExt::IsItemCanBeDroppedOn(HTREEITEM hSource, HTREEITEM hTarget)<Br>{//决定现在结束条件是否正常,如不正常则放弃这次操作<Br>&nbsp;&nbsp;&nbsp;&nbsp;return FALSE;<Br>}<Br></Br>void CTreeViewExt::CopyItemProperties(HTREEITEM hNewItem, HTREEITEM hDraggedItem)<Br>{//按照你的需要对两个ITEM进行处理。<Br></Br>}<Br></Br></Br></p></td></tr><tr><td><font color="0000FF"><a name="14">有关属性对话框(property sheet )的几个提示<Br>闻怡洋</a></font></td></tr><tr><td><p></Br>下面的所有例子,都假定你从CPropertySheet中派生了新类。<Br></Br>1、隐藏APPLY按钮<Br></Br>使用 PSH_NOAPPLYNOW 标志.<Br></Br>propsheet.m_psh.dwFlags |= PSH_NOAPPLYNOW;<Br>2、增加新的子窗口<Br>使用成员变量。CEdit m_edit.<Br>BOOL CMyPropSheet::OnInitDialog()<Br>{<Br>&nbsp;&nbsp;&nbsp;&nbsp;BOOL bResult = CPropertySheet::OnInitDialog();<Br></Br>&nbsp;&nbsp;&nbsp;&nbsp;CRect rectWnd;<Br>&nbsp;&nbsp;&nbsp;&nbsp;GetWindowRect(rectWnd);<Br>&nbsp;&nbsp;&nbsp;&nbsp;SetWindowPos(NULL, 0, 0,<Br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rectWnd.Width() + 100,<Br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rectWnd.Height(),<Br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SWP_NOMOVE | SWP_NOZORDER | SWP_NOACTIVATE);<Br></Br>&nbsp;&nbsp;&nbsp;&nbsp;m_edit.CreateEx( WS_EX_CLIENTEDGE, _T("EDIT"), NULL,<Br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_BORDER,<Br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rectWnd.Width(), 20, 80, 24, m_hWnd, 0, 0 );<Br></Br>&nbsp;&nbsp;&nbsp;&nbsp;m_edit.SetFont( GetFont() );<Br></Br>&nbsp;&nbsp;&nbsp;&nbsp;CenterWindow();<Br>&nbsp;&nbsp;&nbsp;&nbsp;return bResult;<Br>}<Br>3、改变页片上的字体<Br>在 OnInitDialog() 中:<Br></Br>// m_fontEdit is a member variable<Br>// Create a bold font<Br>m_fontEdit.CreateFont( -8, 0, 0, 0, 700, 0, 0, 0, 1,<Br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0, 0, 0, 0, _T("MS Sans Serif") );<Br>GetTabControl()->SetFont( &m_fontEdit );<Br>4、使用Image<Br></Br>m_imageTab为成员变量。<Br>BOOL CMyPropSheet::OnInitDialog()<Br>{<Br>BOOL bResult = CPropertySheet::OnInitDialog();<Br></Br>m_imageTab.Create( IDB_TABIMAGES, 13, 1, RGB(255,255,255) );<Br>CTabCtrl *pTab = GetTabControl();<Br>pTab->SetImageList( &m_imageTab );<Br></Br>TC_ITEM tcItem;<Br>tcItem.mask = TCIF_IMAGE;<Br>for( int i = 0; i < 3; i++ )<Br>{<Br>tcItem.iImage = i;<Br>pTab->SetItem( i, &tcItem );<Br>}<Br>return bResult;<Br>}<Br> <Br></p></td></tr><tr><td><font color="0000FF"><a name="15">为TreeCtrl中的项增加ToolTip<Br>文洋译</a></font></td></tr><tr><td><p></Br></Br>要点:通过OnToolHitTest来增加ToolTip,CTreeCtrl::HitTest(...)的使用,TTN_NEEDTEXT消息的处理。<Br></Br>定义一个新类,有CTreeCtrl派生<Br>Step 1:打开ToolTip 功能<Br>void CTreeCtrlX::PreSubclassWindow()<Br>{<Br>&nbsp;&nbsp;&nbsp;&nbsp;CTreeCtrl::PreSubclassWindow();<Br></Br>&nbsp;&nbsp;&nbsp;&nbsp;EnableToolTips(TRUE);<Br>}<Br></Br></Br>Step 2: OnToolHitTest() 的重载<Br>首先通过HitTest决定是否增加ToolTip,如果需要则返回非零。<Br></Br>在本例中ToolTip使用了LPSTR_TEXTCALLBACK,而没有立即设定显示字符串。<Br></Br>在本例只在鼠标指向每项的图片时才显示ToolTip<Br></Br><nFlags & TVHT_ONITEMICON ||nFlags & TVHT_ONITEMSTATEICON><Br></Br>int CTreeCtrlX::OnToolHitTest(CPoint point, TOOLINFO * pTI) const<Br>{<Br>&nbsp;&nbsp;&nbsp;&nbsp;RECT rect;<Br></Br>&nbsp;&nbsp;&nbsp;&nbsp;UINT nFlags;<Br>&nbsp;&nbsp;&nbsp;&nbsp;HTREEITEM hitem = HitTest( point, &nFlags );<Br>&nbsp;&nbsp;&nbsp;&nbsp;if( nFlags & TVHT_ONITEMICON )<Br>&nbsp;&nbsp;&nbsp;&nbsp;{<Br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CImageList *pImg = GetImageList( TVSIL_NORMAL );<Br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IMAGEINFO imageinfo;<Br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pImg->GetImageInfo( 0, &imageinfo );<Br></Br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GetItemRect( hitem, &rect, TRUE );<Br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rect.right = rect.left - 2;<Br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rect.left -= (imageinfo.rcImage.right + 2);<Br></Br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pTI->hwnd = m_hWnd;<Br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pTI->uId = (UINT)hitem;<Br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pTI->lpszText = LPSTR_TEXTCALLBACK;<Br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pTI->rect = rect;<Br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return pTI->uId;<Br>&nbsp;&nbsp;&nbsp;&nbsp;}<Br>&nbsp;&nbsp;&nbsp;&nbsp;else if( nFlags & TVHT_ONITEMSTATEICON )<Br>&nbsp;&nbsp;&nbsp;&nbsp;{<Br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CImageList *pImg = GetImageList( TVSIL_NORMAL );<Br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IMAGEINFO imageinfo;<Br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pImg->GetImageInfo( 0, &imageinfo );<Br></Br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GetItemRect( hitem, &rect, TRUE );<Br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rect.right = rect.left - (imageinfo.rcImage.right + 2);<Br></Br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pImg = GetImageList( TVSIL_STATE );<Br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rect.left = rect.right - imageinfo.rcImage.right ;<Br></Br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pTI->hwnd = m_hWnd;<Br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pTI->uId = (UINT)hitem;<Br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pTI->lpszText = LPSTR_TEXTCALLBACK;<Br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pTI->rect = rect;<Br></Br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// return value should be different from that used for item icon<Br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return pTI->uId*2;<Br>&nbsp;&nbsp;&nbsp;&nbsp;}<Br>&nbsp;&nbsp;&nbsp;&nbsp;return -1;<Br>}<Br>Step 3: ?? TTN_NEEDTEXT<Br>由于在增加ToolTip是使用用了  LPSTR_TEXTCALLBACK,因此ToolTip在显示时会发送该消息来得到显示字符串。<Br></Br>BEGIN_MESSAGE_MAP(CTreeCtrlX, CTreeCtrl)<Br>&nbsp;&nbsp;&nbsp;&nbsp;//{{AFX_MSG_MAP(CTreeCtrlX)<Br>&nbsp;&nbsp;&nbsp;&nbsp;:<Br>&nbsp;&nbsp;&nbsp;&nbsp;:<Br>&nbsp;&nbsp;&nbsp;&nbsp;//}}AFX_MSG_MAP<Br>&nbsp;&nbsp;&nbsp;&nbsp;ON_NOTIFY_EX_RANGE(TTN_NEEDTEXTW, 0, 0xFFFF, OnToolTipText)<Br>&nbsp;&nbsp;&nbsp;&nbsp;ON_NOTIFY_EX_RANGE(TTN_NEEDTEXTA, 0, 0xFFFF, OnToolTipText)<Br>END_MESSAGE_MAP()<Br>protected:<Br>&nbsp;&nbsp;&nbsp;&nbsp;//{{AFX_MSG(CTreeCtrlX)<Br>&nbsp;&nbsp;&nbsp;&nbsp;:<Br>&nbsp;&nbsp;&nbsp;&nbsp;:<Br>&nbsp;&nbsp;&nbsp;&nbsp;//}}AFX_MSG<Br>&nbsp;&nbsp;&nbsp;&nbsp;afx_msg BOOL OnToolTipText( UINT id, NMHDR * pNMHDR, LRESULT * pResult );<Br>&nbsp;&nbsp;&nbsp;&nbsp;DECLARE_MESSAGE_MAP()<Br></Br>BOOL CTreeCtrlX::OnToolTipText( UINT id, NMHDR * pNMHDR, LRESULT * pResult )<Br>{<Br>// need to handle both ANSI and UNICODE versions of the message<Br>TOOLTIPTEXTA* pTTTA = (TOOLTIPTEXTA*)pNMHDR;<Br>TOOLTIPTEXTW* pTTTW = (TOOLTIPTEXTW*)pNMHDR;<Br>CString strTipText;<Br>UINT nID = pNMHDR->idFrom;<Br></Br>// Do not process the message from built in tooltip<Br>if( nID == (UINT)m_hWnd &&<Br>(( pNMHDR->code == TTN_NEEDTEXTA && pTTTA->uFlags & TTF_IDISHWND ) ||<Br>( pNMHDR->code == TTN_NEEDTEXTW && pTTTW->uFlags & TTF_IDISHWND ) ) )<Br>return FALSE;<Br></Br>// Get the mouse position<Br>const MSG* pMessage;<Br>CPoint pt;<Br>pMessage = GetCurrentMessage();<Br>ASSERT ( pMessage );<Br>pt = pMessage->pt;<Br>ScreenToClient( &pt );<Br></Br>UINT nFlags;<Br>HTREEITEM hitem = HitTest( pt, &nFlags );<Br>if( nFlags & TVHT_ONITEMICON )<Br>{<Br>int nImage, nSelImage;<Br>GetItemImage( (HTREEITEM ) nID, nImage, nSelImage );<Br>strTipText.Format( "Image : %d", nImage );<Br>}<Br>else<Br>{<Br>strTipText.Format( "State : %d", GetItemState( (HTREEITEM ) nID,<Br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TVIS_STATEIMAGEMASK ) );<Br>}<Br></Br>#ifndef _UNICODE<Br>if (pNMHDR->code == TTN_NEEDTEXTA)<Br>lstrcpyn(pTTTA->szText, strTipText, 80);<Br>else<Br>_mbstowcsz(pTTTW->szText, strTipText, 80);<Br>#else<Br>if (pNMHDR->code == TTN_NEEDTEXTA)<Br>_wcstombsz(pTTTA->szText, strTipText, 80);<Br>else<Br>lstrcpyn(pTTTW->szText, strTipText, 80);<Br>#endif<Br>*pResult = 0;<Br></Br>return TRUE;    // message was handled<Br>}<Br></Br></Br></Br></p></td></tr></table><p align="center"><img src="/logo.gif" align="center"><a href="/co/index.htm">北京美达美科技有限公司</a> 版权所有: 1998-1999</a></p></body></html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -