15 мая 2023 года "Исходники.РУ" отмечают своё 23-летие!
Поздравляем всех причастных и неравнодушных с этим событием!
И огромное спасибо всем, кто был и остаётся с нами все эти годы!

Главная Форум Журнал Wiki DRKB Discuz!ML Помощь проекту


Disallow resize of CSplitterWnd

Asaf Kashi -- kashi@sr.hp.com
Sunday, March 09, 1997

Environment: NT 4.0, VC 4.2b, VC 5.0

I have a CSplitterWnd in my mainframe.  It has two views and I want the
whole setup to stay the same size.  
Which message do I need to intercept to prevent the user from being able
to use the splitterbar between my panes to resize them and where should
I catch it, or is there an easier way?

Thanks,
Asaf
---
Asaf Kashi
Software Development Engineer
Hewlett Packard - Santa Rosa Systems Division
kashi@ap.net		http://www.ap.net/~kashi
kashi@sr.hp.com        hp:  http://styx.sr.hp.com/kashi




Syed -- sxs296@psu.edu
Wednesday, March 12, 1997

[Mini-digest: 4 responses]

At 04:53 PM 3/9/97 -0800, you wrote:
>Environment: NT 4.0, VC 4.2b, VC 5.0
>
>I have a CSplitterWnd in my mainframe.  It has two views and I want the
>whole setup to stay the same size.  
>Which message do I need to intercept to prevent the user from being able
>to use the splitterbar between my panes to resize them and where should
>I catch it, or is there an easier way?
>
Gosh.. I just did that.
It's is not difficult actually to do that once you understand the
CSplitterWnd's implementation.
First of all, derive a new class from CSplitterWnd.
Add your own WM_SETCURSOR, WM_LBUTTONDOWN & WM_MOUSEMOVE.
In all of the event handler above, merely call CWnd::OnXXXXX where XXXX is
the appropriate base member function.
eg
CMySplitterWnd::OnSetCursor(...)
{
CWnd::OnSetCursor();
}
that's it. you are set.

I believe this is the easiest yet the most efficient method.

-----From: "Cunningham Graham, GD-IT347" 

Hi, I am sure there is a knowledge base or example somewhere that 
shows this but what I do is to override the following 3 functions in 
my CspliterWnd derived class


// The next three handlers will prevent the user from moving the
// scrollbars.

void CSplitter::OnLButtonDown(UINT nFlags, CPoint point)
{
    // prevent the user from dragging the splitter bar
	//rmoved for the first version
	//return;
	CSplitterWnd::OnLButtonDown(nFlags, point);
}

BOOL CSplitter::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
{
	return CSplitterWnd::OnSetCursor(pWnd,  nHitTest, message);
    // Don't allow the cursor to change over splitbar
	//rmoved for the first version
	//return FALSE;
	
}

void CSplitter::OnMouseMove(UINT nFlags, CPoint point)
{
	CSplitterWnd::OnMouseMove(nFlags, point);
    // Don't allow the cursor to change over splitbar
    //CWnd::OnMouseMove(nFlags, point);
}

//----------------------------------------------------------
Email : Graham.Cunningham@contractor.net
Work Tel : 00 41 31 338 0633
Home Tel : 00 41 26 401 4049
//----------------------------------------------------------


-----Original Message-----
From:	Asaf Kashi [SMTP:kashi@sr.hp.com]
Sent:	Monday, March 10, 1997 1:54 AM
To:	'Mfc-L (E-mail)'
Subject:	Disallow resize of CSplitterWnd

Environment: NT 4.0, VC 4.2b, VC 5.0

I have a CSplitterWnd in my mainframe.  It has two views and I want 
the
whole setup to stay the same size.
Which message do I need to intercept to prevent the user from being 
able
to use the splitterbar between my panes to resize them and where 
should
I catch it, or is there an easier way?

Thanks,
Asaf
---
Asaf Kashi
Software Development Engineer
Hewlett Packard - Santa Rosa Systems Division
kashi@ap.net		http://www.ap.net/~kashi
kashi@sr.hp.com        hp:  http://styx.sr.hp.com/kashi


-----From: Mark Lambert 

I woud derive from CSplitterWnd and override HitTest to return noHit
(defined in WinSplit.cpp to be 0).

Mark 
"Remember - it's better to have what you've got, than to get rid of it
and not have it. That's what I reckon." - Berk, The Trap Door.

>----------
>From: 	Asaf Kashi[SMTP:kashi@sr.hp.com]
>Sent: 	Monday, March 10, 1997 12:53 AM
>To: 	'Mfc-L (E-mail)'
>Subject: 	Disallow resize of CSplitterWnd
>
>Environment: NT 4.0, VC 4.2b, VC 5.0
>
>I have a CSplitterWnd in my mainframe.  It has two views and I want the
>whole setup to stay the same size.  
>Which message do I need to intercept to prevent the user from being able
>to use the splitterbar between my panes to resize them and where should
>I catch it, or is there an easier way?
>
>Thanks,
>Asaf
>---
>Asaf Kashi
>Software Development Engineer
>Hewlett Packard - Santa Rosa Systems Division
>kashi@ap.net		http://www.ap.net/~kashi
>kashi@sr.hp.com        hp:  http://styx.sr.hp.com/kashi
>
>
-----From: "Ganpu Ying" 

Override the following three virtual functions and two messages

virtual void StartTracking(int ht);
virtual void StopTracking(BOOL bAccept);
virtual void SetSplitCursor(int ht);

WM_MOUSEMOVE and WM_SETCURSOR

implementation in your derived class will do nothing!

G. Ying



Mike Dile -- mikedile@us.ibm.com
Friday, March 14, 1997

Classification:
Prologue: Mike Dile
IBM Storage Systems Division
ADSM Client Development
Phone: (408)256-3637
Internal: mikedile@ibmusm51
Internet: mikedile@us.ibm.com
Epilogue:

>Environment: NT 4.0, VC 4.2b, VC 5.0

>I have a CSplitterWnd in my mainframe.  It has two views and I want the
>whole setup to stay the same size.
>Which message do I need to intercept to prevent the user from being able
>to use the splitterbar between my panes to resize them and where should
>I catch it, or is there an easier way?

Take a look at the split32 example on your msdn.  Basically you need to trap
WM_SETCURSOR, WM_MOUSEMOVE, and WM_LBUTTONDOWN for your
(derived) CSplitterWnd.

Mike Dile
ADSM Client Development
IBM Corp.






Become an MFC-L member | Вернуться в корень Архива |