工控编程吧
标题:
88上位机VC MFC树状视图作为提示框使用
[打印本页]
作者:
qq263946146
时间:
2015-12-14 21:16
标题:
88上位机VC MFC树状视图作为提示框使用
(, 下载次数: 3)
上传
点击文件名下载附件
88上位机VC MFC树状视图作为提示框使用
功能展示
有时候在编辑框中显示的字符串具有多层的层次关系,我们想在提示框中有层次的显示出这些字符串,我们就得用上树状类型的提示窗口。我们当前例程就实现了树状视图作为提示框显示,效果如图;
要点提示
我们实现树状视图提示框的原理是:用户鼠标在编辑框上点击左键或右键,我们就动态创建一个新的树状视图窗口,而后读取编辑框中文字,根据预先设置的分隔符作为树状视图的节点,层层添加树状视图的子节点,最后显示出树状视图窗口;
在用户点击右键或左键时销毁树状窗口;
实现功能
1.新建基于对话框的应用程序
2.从CTreeCtrl派生一新类class CTipTree : public CTreeCtrl;添加一个自定义函数
void CTipTree::ShowTip(CString strtip,CString strsepar,CWnd* pParent,CPoint ptmouse)
{
CRect rctWnd;
CWnd* pMain = CWnd::GetDesktopWindow();
pParent->GetWindowRect( &rctWnd );
pMain->ScreenToClient( &rctWnd );
CPoint ptParent( ptmouse.x + rctWnd.left -3, ptmouse.y+ rctWnd.top -3 );
CRect rct( ptParent.x, ptParent.y, ptParent.x + 500, ptParent.y+ 300);
if ( ::IsWindow( m_hWnd ) )
{
SetWindowPos( &wndTopMost ,rct.left,rct.top, 0, 0, SWP_NOSIZE );
return;
}
Create( WS_BORDER|TVS_HASLINES|TVS_NOTOOLTIPS|TVS_HASBUTTONS|TVS_LINESATROOT ,rct, pMain,-1 );
HTREEITEM parent=TVI_ROOT;
CString strleft;
int pos=strtip.Find(strsepar);
if(pos<=0)return;
while(pos>0)
{
strleft=strtip.Left(pos);
strtip=strtip.Right(strtip.GetLength()-pos-strsepar.GetLength());
parent=InsertItem(strleft,parent);
复制代码
pos=strtip.Find(strsepar);
if(pos<0)
{
parent=InsertItem(strtip,parent);
}
}
Expand(TVI_ROOT,TVE_EXPAND);
SetItemState(parent,TVIS_SELECTED ,0);
Select(parent,TVGN_CARET);
MoveWindow(rct.left,rct.top,200,100,FALSE);
SetFocus();
SetWindowPos( &wndTopMost ,0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE );
DWORD style = GetWindowLong( m_hWnd, GWL_EXSTYLE );
SetWindowLong( m_hWnd, GWL_EXSTYLE, style | WS_EX_TOPMOST );
ShowWindow(SW_SHOW);
}
复制代码
3从Cedit派生一新类classCTreeEdit : public Cedit,添加变量CTipTree m_TipWnd; CStringm_sSeparator;并在构造函数中初始化m_sSeparator = "\\";
添加鼠标左键右键放开消息
void CTreeEdit::OnLButtonDown(UINT nFlags, CPoint point)
{
m_TipWnd.DestroyWindow();
CEdit::OnLButtonDown(nFlags, point);
}
void CTreeEdit::OnRButtonUp(UINT nFlags, CPoint point)
{
CString edittext;
GetWindowText(edittext);
m_TipWnd.ShowTip(edittext,m_sSeparator,this,point);
// CEdit::OnRButtonUp(nFlags, point);
}
复制代码
4.最后是自定义类的使用,在主对话框中添加编辑框控件,关联变量CTreeEdit m_Edit;
给此变量添加些文本进行效果演示
m_Edit.SetWindowText("工控编程\\PLC编程\\欧姆龙PLC编程\\CP1H编程\\MOVE指令学习");
我们来看下效果实现过程
[iqiyi]http://player.video.qiyi.com/06c8bbf2ec4cca67de58573aef43d635/0/0/w_19rt6k09x5.swf-albumId=5021780309-tvId=5021780309-isPurchase=0-cnId=12[/iqiyi]
(, 下载次数: 0)
上传
点击文件名下载附件
[note]1[/note]
欢迎光临 工控编程吧 (https://www.gkbc8.com/)
Powered by Discuz! X3.4