简介我怀疑这可能是有史以来最琐碎的类在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类这里的宣言。这是一个非常简单的类,包含只有一个构造函数,消息映射和一个单一的消息映射条目。
而这里的实施。{C}嘿,我说这是一个简单的类!它告诉覆盖WM_NCHITTEST消息处理程序简单的返回HTNOWHEREWindows,有没有什么特别的鼠标指针的位置。使用代码要使用的类添加两个文件下载到您的项目,然后,在您的CMainFrame类的头改变CSplitterWnd的变量的类型CSplitOverride。宾果!现在你的应用程序将忽略拆分窗口的鼠标操作。不要忘了禁用任何菜单或键盘访问分配器调整大小。历史
class CSplitOverride : public CSplitterWnd
{
DECLARE_DYNAMIC(CSplitOverride)
public:
CSplitOverride() { }
protected:
DECLARE_MESSAGE_MAP()
afx_msg UINT OnNcHitTest(CPoint point);
}
2月25日,2004年 - 初始版本(可能是最后)。