Can't create a CFrameWnd without a caption bar.
Dmitry Zinchenko -- zidi@ipii.donetsk.ua Sunday, April 14, 1996 Environment: Windows 95. [Version 4.00.950] MSVC++ 2.2 with MFC I'm unsuccessfully trying to create a main application's window (derived from CFrameWnd) WITHOUT a caption bar. class CMathWnd : public CFrameWnd { public: CMathWnd(); //{{AFX_MSG( CMathWnd ) //}}AFX_MSG DECLARE_MESSAGE_MAP() }; CMathWnd::CMathWnd() { // do create a frame window ASSERT( Create(NULL, NULL, WS_OVERLAPPED, CRect(30,30,300,300) ); } The window is created fine but WITH a CAPTION BAR even though I specify dwStyle = WS_OVERLAPPED !!! I know about Frame Window Style attribute FWS_ADDTOTITLE, but as you see, I neither use it nor call CFrameWnd::LoadFrame() which uses the window style WS_OVERLAPPEDWINDOW|FWS_ADDTOTITLE by default. So what do I wrong or what have I to do to create a main window without a caption bar ? Any idea will be appreciated. Please make a carbon copy (CC:) when you will answer. Thanks. -- When a man has no longer any conception of excellence above his own, his voyage is done, he is dead. Henry Ward Beecher (USA, 1813-1887)
Tommy Hui -- thui@slip.net Tuesday, April 16, 1996 [Mini-digest: 7 responses] Hi Dmitry, WS_OVERLAPPED implies a WS_CAPTION. Try creating the window with WS_POPUP style ORed with any additional styles such as WS_MINIMIZEBOX. Tommy -----From: "Grant Shirreffs (Great Elk)"Try overriding PreCreateWindow(CREATESTRUCT& cs) and modifying the cs.style member. I've always found this a good place to remove the FWS_ADDTOTITLE attribute, as any changes MFC makes to the window style are made before this call. Grant Shirreffs grant.s@greatelk.co.nz -----From: "michael" Try overriding PreCreateWindow instead of using Create. Also, use WS_POPUPWINDOW instead of WS_OVERLAPPED. Sample code follows: ---------------------------------------------------------------------------- -------------------------- // size app window to full screen without caption bar BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs) { cs.style = WS_POPUPWINDOW & ~WS_CAPTION; cs.cx = GetSystemMetrics(SM_CXSCREEN); cs.cy = GetSystemMetrics(SM_CYSCREEN); return CFrameWnd::PreCreateWindow(cs); } ---------------------------------------------------------------------------- -------------------------- -----From: "John Elsbree" Dmitry - I'm not sure how WS_CAPTION is getting added in (I don't have a copy of MSVC 2.2 handy, and I'm not sure what might have changed since then). But I can suggest a way to get rid of it: override PreCreateWindow. BOOL CMath::PreCreateWindow(CREATESTRUCT& cs) { if (!CFrameWnd::PreCreateWindow(cs)) return FALSE; cs.style &= ~WS_CAPTION; return TRUE; } Hope this helps... John (not speaking for Microsoft) -----From: "Mike Blaszczak" From: owner-mfc-l@netcom.com on behalf of Dmitry Zinchenko Sent: Sunday, April 14, 1996 05:49 > Environment: Windows 95. [Version 4.00.950] > MSVC++ 2.2 with MFC Thanks. > I'm unsuccessfully trying to create a main application's window (derived > from CFrameWnd) WITHOUT a caption bar. > CMathWnd::CMathWnd() > { > // do create a frame window > ASSERT( Create(NULL, NULL, WS_OVERLAPPED, CRect(30,30,300,300) ); > } This code will break badly when compiled for release mode. You should fix it if you intend to build it for release mode. The default style for a CFrameWnd-derived class will have a caption. You've done nothing to change that. You need to override PreCreateWindow() in your CFrameWnd-derived class and set the style bits the way you want them. > The window is created fine but WITH a CAPTION BAR even though > I specify dwStyle = WS_OVERLAPPED !!! If you trace in to the Create() call you're making, you'll see how MFC tweaks the style bits. .B ekiM TCHAR szSpringtime[] = _T("Check twice and save a life: motorcycles are everywehere!"); -----From: B Apps The documentation is unclear what WS_OVERLAPPED actually means. The MFC help files say it usually has a title bar and border. winuser.h defines this as 0L I guess it's the default style and depends on whether the window is a child, an owner window or a top level one. Use CMathWnd::CMathWnd() { Create(NULL, NULL, WS_POPUPWINDOW | WS_THICKFRAME, CRect(30, 30, 300, 300)); } or something similiar with WS_POPUP Bri -----From: "David W. Gillett" And the help file entry for WS_OVERLAPPED consists of one line: "Creates an overlapped window. An overlapped window has a caption and a border." It seems to me that that's exactly what you're seeing. Hint: If you want a top-level window without a caption, try WS_POPUP instead of WS_OVERLAPPED. [This is not an MFC issue.] Bonus hint: Don't put code you want executed inside ASSERT(). At very least, change it to VERIFY(), or your release build will mysteriously fail. Dave
| Вернуться в корень Архива |