返回首页

{A}{S0}简介
我是学生,在VC很感兴趣。我经常进入本网站获得 免费的源代码。我需要在一个对话框,拆分。 我下载了一个,但它是非常复杂的,我觉得这是很难用控制(虽然 它是非常强大的),所以我做了一个为自己。也许,这对你没有用处, 但是,如果有 只有一个人,谁认为它是非常有用的的,我会很高兴。有时 你不需要好技能,只是一个好主意,这个简单的方法有用的会产生一段代码。我的分路控制这种。如何使用CSplitterControl类
首先,添加两个文件SplitterControl.h和SplitterControl.cpp 项目。请记住,添加#include"splittercontrol.h"头 使用它的类文件。
对话框类添加成员varible

 protected: 

    CSplitterControl     m_wndSplitter1; 

现在,我们通过调用它的创建函数创建的控制。此代码将 出现在OnInitDialog或OnCreate函数。 {C}
有一个提示这里。计算分离器的矩形,而是我们添加 在对话框中的一个静态控制(资源编辑器),给它一个ID(IDC_SPLITTER1) &# 160;并使其无形。其尺寸和定位在资源编辑器,然后调用 &# 160;函数GetWindowRect(RC)的m_wndSplitter1移动的矩形。
&# 160;

这里是对话框上的调整大小控件的代码,当用户移动 分路控制。
//

// LRESULT CSPDemoDlg::DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam) 

{

	if (message == WM_NOTIFY)

	{

		if (wParam == IDC_SPLITTER1)

		{	

			SPC_NMHDR* pHdr = (SPC_NMHDR*) lParam;

			DoResize1(pHdr->delta);

		}

	}

	

	return CDialog::DefWindowProc(message, wParam, lParam);

}

//

void CSPDemoDlg::DoResize1(int delta)

{

	// Change the width for m_wndType, m_lstItem, m_txtContent	

	CSplitterControl::ChangeWidth(&m_wndType, delta);

	CSplitterControl::ChangeWidth(&m_lstItem, -delta, CW_RIGHTALIGN);

	CSplitterControl::ChangeWidth(&m_txtContent, -delta, CW_RIGHTALIGN);

	Invalidate();

	UpdateWindow();

}
关于类CSplitterControl和它的功能这里的类CSplitterControl的接口结论
好了,这是对我所有的代码。也许,解释不是很清楚,但 我希望你会发现它易于使用。无特殊技能,你看。很简单。谢谢 阅读我的文章。请给你的想法,不管你喜欢或讨厌它。

回答

评论会员:Xiangism 时间:2011/11/29
完美
评论会员:helloworldbomb 时间:2011/11/29

评论会员:jacksp 时间:2011/11/29
修改的东西后,我用我的工作是
评论会员:jcleung 时间:2011/11/29
这是非常对我很有用,感谢4 UR股
评论会员:lan_6373836 时间:2011/11/29
我要显示一个位图上分器,我应该怎么做THX
评论会员:?mxs810 时间:2011/11/29
这是一个很好的的工作,但我发现一个问题,当我使用它。
一个对话是最大限度地提高之前,我点击分路器和移动在这段时间,是restored.If
将移动到dialog.And底部,我不能动弹。
你能告诉我如何处理这个问题呢?
非常感谢您。
评论会员:yusc1986 时间:2011/11/29


评论会员:ziguowen 时间:2011/11/29
!感谢您的源代码,它是那么好
评论会员:!immetoz 时间:2011/11/29
垃圾邮件删除
评论会员:MaryVeranis 时间:2011/11/29
遗憾,但我是一个asp.net程序员 - 你可以直接我尽量去这样做呢?我不知道关于C#的事情。我需要它工作在一个asp.net项目,所以我不能放入我的项目未编译的。
感谢任何帮助。
评论会员:timyin 时间:2011/11/29
大家好,

我的问题是:
有两个子在父对话框​​对话框,我用分离器分裂子对话框,
但是当我动态创建分离器,这个分离器的ID是在字符串表中创建的,当我拖动拆分,父对话框退出和分隔栏显示在屏幕上。

我的环境:Windows XP和虚拟C + + 6.0

解决方案:
注释行/ /的CStatic::OnLButtonDown(nFlags,点),在函数void CSplitterControl::OnLButtonDown(UINT nFlags,口岸系统点)。
现在我可以正确地分裂子对话框。

希望它给别人的Userful公司。

谢谢!

BR,


我对我的方式!
评论会员:安德烈Cacciarru 时间:2011/11/29
简单的用法相当小片的代码添加到我的应用程序。感谢。


评论会员:广协 时间:2011/11/29
土井VOI对话框THI GI phai宋分配器
智能已经CAC控制LA GIAI quyet duoc ROI
评论会员:ChrisHowe 时间:2011/11/29
这里是什么,我觉得这是一个补丁修复SetRange方法...

无效CSplitterControl::SetRange(nSubtraction INT,INT nAddition,INT nRoot)
{
(nRoot ScreenToClient(rcWnd);

原代码是调用GetWindowRect,获得窗口在屏幕空间的坐标。虽然你想要的,是在父窗口的客户端空间的坐标。
评论会员:kiranin 时间:2011/11/29
我怎样才能让splitterbar将不允许移动

评论会员:Nvng遐 时间:2011/11/29
是的,我觉得你可以用下面的代码,
m_wndSplitter1.SetRange(0,0,-1);
或不处理这些消息:
ChangePos(的CWnd * pWnd,INT,INT DX DY); ChangeWidth(的CWnd * pWnd,INT,DWORD dwFlag = CW_LEFTALIGN DX);ChangeHeight(的CWnd * pWnd,INT,DWORD dwFlag = CW_TOPALIGN DY)
评论会员:sharki1987 时间:2011/11/29
你为什么要做到这一点,分配器,设计
或者你可以删除这些行如下:无效CSplitterControl::OnLButtonUp(UINT nFlags,口岸系统点)
{
(pOwner放大器;放大器; IsWindow(pOwner - GT; m_hWnd))
{
/ / pOwner - GT; SendMessage消息(WM_NOTIFY,nmsp.hdr.idFrom,(LPARAM)放大器; NMSP);}
}
无效CSplitterControl::OnLButtonUp(UINT nFlags,口岸系统点)
{
无效CSplitterControl:MoveWindowTo(连接点PT)
{
/ /的MoveWindow(RC); }
评论会员:Bhushan1980 时间:2011/11/29
您好,
在SDI应用程序,有多种意见,我想用这个代码?正如你在OnInitDialog处理程序中的所有更改,处理程序需要在SDI应用程序的情况下访问?这可能吗?
谢谢。


Bhushan
评论会员:。灭蚁灵 时间:2011/11/29
首先,我不得不说,它的一个很大的控制,我一直在寻找像这样... ...但我有一个问题..控制可移动的对话框... ...以某种方式处理这里面的代码,我已经检查出新的分离器的位置?
评论会员:atripathi 时间:2011/11/29
我也运行到同样的问题。下面的代码工作对我来说
>>>>>{ BR}无效CSplitterControl:的OnMouseMove(UINT nFlags,口岸系统点)
{
(m_bIsPressed)
{
CWindowDC DC(NULL)的DrawLine(DC,m_nX,m_nY);口岸系统PT =点;
ClientToScreen(PT);
/ / GetParent() - > ScreenToClient(PT);

(pt.x m_nMax)
pt.x = m_nMax;
(pt.y> m_nMax)
pt.y = m_nMax;

/ / GetParent() - > ClientToScreen(PT);
m_nX = pt.x;
m_nY = pt.y; 的DrawLine(DC,m_nX,m_nY);}
CStatic的:的OnMouseMove(nFlags,点);
}
>>>>{ BR}

评论会员:BM 时间:2011/11/29
一个更好的修复,以防止外父:
无效CSplitterControl:的OnMouseMove(UINT nFlags,口岸系统点)
{
(m_bIsPressed)
{
CWindowDC DC(NULL)的DrawLine(DC,m_nX,m_nY);
口岸系统PT =点;
ClientToScreen(PT);
GetParent() - > ScreenToClient(PT);

(pt.x m_nMax)
pt.x = m_nMax;
(pt.y> m_nMax)
pt.y = m_nMax;

//>>> BM / BEGIN:防止外父
CRECT rParent;
GetParent() - > GetClientRect(rParent)
INT minBorder = 10;
iHeight = rParent.bottom - rParent.top - minBorder;
iWidth = rParent.right - rParent.left - minBorder;

(pt.x iWidth)
pt.x = iWidth;
(pt.y> iHeight)
pt.y = iHeight;
//>>> BM / END

GetParent() - > ClientToScreen(PT);
m_nX = pt.x;
m_nY = pt.y; 的DrawLine(DC,m_nX,m_nY);}
CStatic的:的OnMouseMove(nFlags,点);
}


b.minet
评论会员:盛宴 时间:2011/11/29
如果您添加两个按钮下的树控制,我希望两个按钮似乎独立的,事实上,他们有overlappeded
每个other.can你帮我感谢很多
评论会员:AleemSheikh 时间:2011/11/29
您好,

您可以设置在图像控制虚假可见属性(Visible属性中删除默认的选中标记)


评论会员:nanev 时间:2011/11/29
{七}我在那里有一个对话框上的多个控件的日历应用程序中使用它,对我的作品是伟大的。我使用MFC 7.1。非常感谢。

M. Aleem谢赫
Abacusoft