Solved

MFC, C++: Preventing a splitter window from being resized

Posted on 2007-11-23
3
1,289 Views
Last Modified: 2013-12-14
Hello,

I am working on an MFC splitter frame application. I want to prevent the user from resizing the splitter window.

I've followed this old article on MSDN, which covers this:

http://msdn.microsoft.com/msdnmag/issues/01/02/c/

I can't even get the demo project to build in visual studio 2005 (I converted the VC 6 project). I get the following errors:

1>c:\documents and settings\user\desktop\msdnsplitter\nosize\mainfrm.cpp(22) : error C2440: 'static_cast' : cannot convert from 'UINT (__thiscall CMainFrame::* )(CPoint)' to 'LRESULT (__thiscall CWnd::* )(CPoint)'
1>        Cast from base to derived requires dynamic_cast or static_cast
1>NoSize.cpp
1>StatLink.cpp
1>c:\documents and settings\user\desktop\msdnsplitter\nosize\statlink.cpp(27) : error C2440: 'static_cast' : cannot convert from 'UINT (__thiscall CStaticLink::* )(CPoint)' to 'LRESULT (__thiscall CWnd::* )(CPoint)'
1>        Cast from base to derived requires dynamic_cast or static_cast
1>c:\documents and settings\user\desktop\msdnsplitter\nosize\statlink.cpp(123) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>View.cpp
1>Generating Code...
1>Build log was saved at "file://c:\Documents and Settings\User\Desktop\msdnsplitter\NoSize\Debug\BuildLog.htm"
1>NoSize - 3 error(s), 0 warning(s)

Could someone help me build the application, so that I can apply the same principle to my own application, or could someone suggest another way that I could prevent splitter resizing?
Regards,
Sternocera

0
Comment
Question by:sternocera
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 2
3 Comments
 
LVL 31

Accepted Solution

by:
Zoppo earned 500 total points
ID: 20339534
Hi sternocera,

in mainfrm.h, mainfrm.cpp, statlink.h and statlink.cpp the UINT return value for OnNcHitTest must be changed to LRESULT

In CStaticLink::OnSetCursor change this line
            static bTriedOnce = FALSE;
to
            static BOOL bTriedOnce = FALSE;

Hope that helps,

ZOPPO
0
 

Author Comment

by:sternocera
ID: 20339567
Zoppo,

That works, thanks. Whats going on here? Why was this necessary?

Regards,
Sternocera
0
 
LVL 31

Expert Comment

by:Zoppo
ID: 20339758
I'm not sure, it seems there's a difference between the implementation and the MSDN description of ON_WM_NCHITTEST and OnNcHitTest

In MSDN for MFC8.0 they're both described to use a function which returns UINT:

MSDN:
ON_WM_NCHITTEST( )  afx_msg UINT OnNcHitTest( CPoint );

afx_msg UINT OnNcHitTest(
   CPoint point
);


In code for MFC this differs:

#define ON_WM_NCHITTEST() \
      { WM_NCHITTEST, 0, 0, 0, AfxSig_l_p, \
            (AFX_PMSG)(AFX_PMSGW) \
            (static_cast< LRESULT (AFX_MSG_CALL CWnd::*)(CPoint) > (&ThisClass :: OnNcHitTest)) },

class CWnd
...
      afx_msg LRESULT OnNcHitTest(CPoint point);



UINT is an 'typedef unsigned int'
LRESULT is 'typedef LONG_PTR' which is a 'typedef _W64 long' (for 32-bit build)

So they differ too ...


I don't know why this is, sorry ...

The missing 'BOOL' even was no problem in VC6

Regards,

ZOPPO
0

Featured Post

Database Solutions Engineer FAQs

In this series, we will discuss common questions received as a database Solutions Engineer at Percona. In this role, we speak with a wide array of MySQL and MongoDB users responsible for both extremely large and complex environments to smaller single-server environments.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Introduction: The undo support, implementing a stack. Continuing from the eigth article about sudoku.   We need a mechanism to keep track of the digits entered so as to implement an undo mechanism.  This should be a ‘Last In First Out’ collec…
Update (December 2011): Since this article was published, the things have changed for good for Android native developers. The Sequoyah Project (http://www.eclipse.org/sequoyah/) automates most of the tasks discussed in this article. You can even fin…
The viewer will learn how to use and create keystrokes in Netbeans IDE 8.0 for Windows.
This is Part 3 in a 3-part series on Experts Exchange to discuss error handling in VBA code written for Excel. Part 1 of this series discussed basic error handling code using VBA. http://www.experts-exchange.com/videos/1478/Excel-Error-Handlin…

631 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question