返回首页

简介我怀疑这可能是有史以来最琐碎的类在CodeProject上提出。
在MFC应用程序,我写我想在左侧的树控件,并在右侧的视图类的一个资源管理器风格的界面。但我想防止用户能够抓住分压器和调整的意见。
使用应用程序向导创建应用程序,选择MFC,资源管理器风格和分配器。该项目包含的标准类人们期望的那样,CMainFrame中,CDocument的衍生,从CTreeView派生的CLeftView和另一视图类的应用程序的右侧。
这两种观点都是管理一个CSplitterWnd的嵌入在CMainFrame对象的实例。所有这一切都是MFC 101材料。
鉴于我想通过分离器,这是有意义的看MSDN文档为CSplitterWnd的意见,以防止调整大小。有一堆在这个类中的职能,但没有一个让分离器上禁用鼠标操作。嗯...下一个在CodeProject上的快速检查]主题提供什么明显。然后一分钱下降。一个CSplitterWnd是一个CWnd的一些额外的功能。
自CSplitterWnd的是从CWnd派生的,很容易拦截Windows消息。在这种情况下Windows的消息,我很感兴趣在WM_NCHITTEST这是Windows的方式,要求一个窗口,是对一些特殊的鼠标?在拆分窗口的情况下,答案是是的,如果鼠标是在分配器。如果我们改变这个问题的答案,没有额外的逻辑,在CSplitterWnd的,不会一命呜呼CSplitOverride类这里的宣言。这是一个非常简单的类,包含只有一个构造函数,消息映射和一个单一的消息映射条目。


class CSplitOverride : public CSplitterWnd

{

    DECLARE_DYNAMIC(CSplitOverride)

public:

                    CSplitOverride() { }



protected:

    DECLARE_MESSAGE_MAP()

    afx_msg UINT    OnNcHitTest(CPoint point);

}
而这里的实施。{C}嘿,我说这是一个简单的类!它告诉覆盖WM_NCHITTEST消息处理程序简单的返回HTNOWHEREWindows,有没有什么特别的鼠标指针的位置。使用代码要使用的类添加两个文件下载到您的项目,然后,在您的CMainFrame类的头改变CSplitterWnd的变量的类型CSplitOverride。宾果!现在你的应用程序将忽略拆分窗口的鼠标操作。不要忘了禁用任何菜单或键盘访问分配器调整大小。历史
2月25日,2004年 - 初始版本(可能是最后)。

回答

评论会员:WCT 时间:2011/12/01
,当分离器被锁定,分配器颜色提示用户

UsefulSplitterWnd.h添加:
虚拟无效OnDrawSplitter(CDC * PDC,ESplitType nType,const的CRECT RECT);

UsefulSplitterWnd.cpp添加:
无效CUsefulSplitterWnd:OnDrawSplitter中心(CDC * PDC,ESplitType nType,const的CRECT RECT)
{
(此- GT; m_bBarLocked PDC nType == splitBar)
{
COLORREF颜色= RGB(93,27,27);
CRECT R = RECT; r.InflateRect(-2,-2,-2,-2);PDC - GT; FillSolidRect(R,颜色);
返回
}
CSplitterWnd的:OnDrawSplitter(PDC,nType,RECT)
}

评论会员:nightbat2007 时间:2011/12/01
感谢很多
评论会员:neilsolent 时间:2011/12/01
简单的代码。你知道任何隐藏分离器本身的简单的方法吗?
欢呼声中,
尼尔
评论会员:Aryana 时间:2011/12/01
。Greate,专业,最小的,创意和优秀的

感谢了很多,节省很多程序员时间和精力。
评论会员:PunkFloyd 时间:2011/12/01
主题说这一切。无类所必需的。

- PF
评论会员:darkbrat 时间:2011/12/01
如果你的意见,将无法访问不仅是调整大小酒吧....
评论会员:jtorjo 时间:2011/12/01
MFC是完全错误的,使得它如此难以制定方案
是没有意义的,在这种情况下,使用一个分配器(你概述的情况下)。
你应该使用的是一个可调整大小的对话框,在左侧的树控件,无论你在正确的 - 没有分离器
。而更重要的是,分配器应该只是太微不足道使用。我会希望在一至两个星期后一个例子。

同时,也许你想检查到MFC / ATL / WTL的替代品 - http://www.torjo.com/win32gui/(在"Win32 GUI的泛型"CUJ列并行开发)



约翰Torjo
自由职业者
- john@torjo.com

专业记录解决方案,免费
- http://www.torjo.com/code/logging.zip(记录 - C)
- http://www.torjo.com/logview/(查看/过滤 - WIN32)
- http://www.torjo.com/logbreak/(调试 - Win32的)
(源代码)
评论会员:PriyankBolia 时间:2011/12/01
我有我的子窗口劈裂成2行,我想,应该有下面的行总是100的大小,上排需要休息的空间,当调整大小。任何人都可以有一些解决方案?


评论会员:Qibono 时间:2011/12/01
很久以前,我没有像这样的搜索。
我作为该计划的唯一用户,我放弃了(继续喊,当我想拖动的对象,但命中分配器)。
我爱thoose短期和容易理解的"5分钟"的文章,可以节省很多人一段时间。

非常感谢。
评论会员:罗布曼德尔森 时间:2011/12/01
很高兴能服务! {S0}

罗布曼德尔森

科林戴维斯写道:"我敢肯定,美国人可以使用它,从而更快地减少全球供应。当然,这将是一件好事,因为我们更快地运行全球,污染少的机会还会有。 (浅谈汽油价格)肥皂盒,2004年3月5日
评论会员:AntMan 时间:2011/12/01
一旦你有眼花缭乱最低限度的措施,曼德尔森{S1}

虽然认真,良好的工作提供一些简单的代码,MFC应该做。

干杯
蚂蚁
评论会员:Jubjub 时间:2011/12/01
嘿,有没有MFC的AntMan外放
哎呀,你听起来像一个太监程序员。

Sheesh!!

{S2}
评论会员:艾司科Lakso 时间:2011/12/01
您好!

可以发现这funtionallity http://www.codeproject.com/splitter/usefulsplitter.asp
我用我的项目之一,它在一定条件下,我禁用分配器。
继续发布
欢呼声/艾司科
评论会员:Jubjub 时间:2011/12/01
嘿上校,

是不是很有趣,可能是由很多程序员需要的东西,是不是在CodeProject上。这是我喜欢这个网站。像这样的帮助信息花絮其余的编程社区的程序员
Thanx为伟大的工作上校。
Jubjub