📄 subject_45858.htm
字号:
<p>
序号:45858 发表者:shela_lsj 发表日期:2003-07-04 12:05:48
<br>主题:如何锁定分割条?
<br>内容:当我创建好分割窗口后,并不希望通过拖动切分条来调节窗口的大小。因此,必须锁定切分条。<BR>我在网上看到锁定切分条的最简单的方法就是不让CSplitterWnd来处理WM_LBUTTONDOWN,WM_MOUSEMOVE,WM_SETCURSOR消息,而是将这些消息交给CWnd窗口进行处理,从而屏蔽掉这些消息。拿WM_LBUTTONDOWN处理过程来说。修改为如下:<BR> <BR>void CSplitterWnd::OnLButtonDown(UINT nFlags,CPoint point) <BR>{ <BR> CWnd::OnLButtonDown(nFlags,point);<BR>} <BR><BR>我现在的问题是响应不到CSplitterWnd的WM_LBUTTONDOWN,WM_MOUSEMOVE,WM_SETCURSOR消息,我原来想创建一个以CSplitterWnd为基类的新类,但是,在创建新类时,基类下拉框中却没有CSplitterWnd类,实在不知道该怎么解决,请各位高手多多指教!!!!!!!<BR>
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
回复者:lijb 回复日期:2003-07-04 13:46:48
<br>内容:关注。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:angels 回复日期:2003-07-04 22:43:21
<br>内容:他们是虚函数,你直接写出来就可以了。你直接重载就行了。<BR>你可以在mouseMove里做些处理,此时就可控制pane的大小了。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:撒达姆的大表弟 回复日期:2003-07-05 10:29:42
<br>内容:基类下拉框中却没有CSplitterWnd类,那你先随便选个,生成后再改过来不行吗?
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:lijb 回复日期:2003-07-05 10:57:21
<br>内容:我试了,它不响应OnMouseMove.
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:诶飞 回复日期:2003-07-06 09:07:52
<br>内容:在第3楼的基础上,教你一个修改的方法,用替换来把所有的基类(你之前随便选的那个)替换成<BR>CSplitterWnd类
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:angels 回复日期:2003-07-06 17:22:11
<br>内容:好吧,我给你一段我写的程序吧。这个程序在写的时候我没有加入检测分割方向的方法,所以要手工的传入进去。你可以自己加入检测代码。<BR>我的项目只要求最多分割三个pane,要是你的要求多于3个pane你可以修改一下就可以了。<BR><BR>///// splitter class begin file name:<newsplitter.h><BR>#if !defined(AFX_NEWSPLITTER_H__CBA320BB_8FF2_4447_8FBF_EE18CF7B2CD7__INCLUDED_)<BR>#define AFX_NEWSPLITTER_H__CBA320BB_8FF2_4447_8FBF_EE18CF7B2CD7__INCLUDED_<BR><BR>#if _MSC_VER > 1000<BR>#pragma once<BR>#endif // _MSC_VER > 1000<BR>// NewSplitter.h : header file<BR>//<BR><BR>/////////////////////////////////////////////////////////////////////////////<BR>// CNewSplitter frame with splitter<BR><BR>#ifndef __AFXEXT_H__<BR>#include <afxext.h><BR>#endif<BR><BR>class CNewSplitter : public CSplitterWnd<BR>{<BR> DECLARE_DYNCREATE(CNewSplitter)<BR>protected:<BR> int setWhich; // = SETX or SETY;<BR> int pan0Min;<BR> int pan1Min;<BR><BR>// Attributes<BR>protected:<BR> CSplitterWnd m_wndSplitter;<BR>public:<BR> CNewSplitter(); // protected constructor used by dynamic creation<BR> void setPanInfo(int splitterDir , int pan0MinWidth , int pan1MinWidth); //angels 2003-05-01;<BR><BR>// Operations<BR>public:<BR><BR>// Overrides<BR> // ClassWizard generated virtual function overrides<BR> //{{AFX_VIRTUAL(CNewSplitter)<BR> protected:<BR> virtual BOOL OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext);<BR> //}}AFX_VIRTUAL<BR><BR>// Implementation<BR>public:<BR> virtual ~CNewSplitter();<BR><BR> // Generated message map functions<BR> //{{AFX_MSG(CNewSplitter)<BR> afx_msg void OnMouseMove(UINT nFlags, CPoint point);<BR> //}}AFX_MSG<BR> DECLARE_MESSAGE_MAP()<BR>};<BR><BR>/////////////////////////////////////////////////////////////////////////////<BR><BR>//{{AFX_INSERT_LOCATION}}<BR>// Microsoft Visual C++ will insert additional declarations immediately before the previous line.<BR><BR>#endif // !defined(AFX_NEWSPLITTER_H__CBA320BB_8FF2_4447_8FBF_EE18CF7B2CD7__INCLUDED_)<BR><BR>///// splitter class end<BR><BR>///// splitter class code begin, file Name <newsplitter.cpp> 5.1;<BR>// NewSplitter.cpp : implementation file<BR>//<BR><BR>#include "stdafx.h"<BR>#include "NewSplitter.h"<BR><BR>#ifdef _DEBUG<BR>#define new DEBUG_NEW<BR>#undef THIS_FILE<BR>static char THIS_FILE[] = __FILE__;<BR>#endif<BR><BR>/////////////////////////////////////////////////////////////////////////////<BR>// CNewSplitter<BR><BR>IMPLEMENT_DYNCREATE(CNewSplitter, CSplitterWnd)<BR><BR>CNewSplitter::CNewSplitter()<BR>{<BR>}<BR><BR>CNewSplitter::~CNewSplitter()<BR>{<BR>}<BR><BR>void CNewSplitter::setPanInfo(int splitterDir , int pan0MinWidth , int pan1MinWidth) //angels 2003-05-01;<BR>{<BR> pan0Min = pan0MinWidth;<BR> pan1Min = pan1MinWidth;<BR> setWhich = splitterDir;<BR>}<BR><BR>BOOL CNewSplitter::OnCreateClient(LPCREATESTRUCT /*lpcs*/, CCreateContext* pContext)<BR>{<BR> return m_wndSplitter.Create(this,<BR> 2, 2, // TODO: adjust the number of rows, columns<BR> CSize(10, 10), // TODO: adjust the minimum pane size<BR> pContext);<BR>}<BR><BR><BR>BEGIN_MESSAGE_MAP(CNewSplitter, CSplitterWnd)<BR> //{{AFX_MSG_MAP(CNewSplitter)<BR> ON_WM_MOUSEMOVE()<BR> //}}AFX_MSG_MAP<BR>END_MESSAGE_MAP()<BR><BR>/////////////////////////////////////////////////////////////////////////////<BR>// CNewSplitter message handlers<BR><BR>void CNewSplitter::OnMouseMove(UINT nFlags, CPoint point) <BR>{<BR> // TODO: Add your message handler code here and/or call default<BR> CRect rectClient;<BR><BR> GetClientRect(&rectClient);<BR><BR> if(setWhich == SETX)<BR> {<BR> if(point.x < pan0Min) point.x = pan0Min;<BR> if(rectClient.Width() - point.x < pan1Min) point.x = rectClient.Width() - pan1Min;<BR> }<BR><BR> if(setWhich == SETY)<BR> {<BR> if(point.y < pan0Min) point.y = pan0Min;<BR> if(rectClient.Height() - point.y < pan1Min) point.y = rectClient.Height() - pan1Min;<BR> }<BR> <BR> CSplitterWnd::OnMouseMove(nFlags, point);<BR>// m_wndSplitter.RecalcLayout();<BR>}<BR><BR>///// splitter class code end<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:angels 回复日期:2003-07-06 17:24:15
<br>内容:SETX or SETY 你可以自己定义一个。<BR><BR>#define SETX 0<BR>#defien SETY 1<BR>都可以,放在stdafx.h里最好。<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -