How to Hide a Title Bar in a CDockablePane? - mfc

I want to hide a title bar in CDockablePane. I tried calling ModifyStyle(), but it doesn't work.
ModifyStyle(WS_SYSMENU, 0, SWP_FRAMECHANGED);

Don't use the style WS_CAPTION when you create the pane!

you need to call dockablepane's EnableGripper(FALSE) to hide the pane's caption in docking state. Remember to call it when creating tabbedpane as well.

The function CDockablePane::Create() has a parameter called BOOL bHasGripper which is usually set to TRUE while in your case you can set it to FALSE, like below.
class COutputWnd : public CDockablePane {};
COutputWnd m_wndOutput;
if (!m_wndOutput.Create(strOutputWnd, this, CRect(0, 0, 100, 100), FALSE, ID_VIEW_OUTPUTWND, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | CBRS_BOTTOM | CBRS_FLOAT_MULTI))
{
return FALSE; // failed to create
}

Related

Clistbox the is disappeared after clicking the content in drop list

I have a A class was inherited from Clistbox and B class was inherited from CGXGridWind. Then, I created the object to A in member function of B onCreat.As describe in below section:
int B::onCreat(LPCREATESTRUCT s)
{
DWORD attribute = WS_CHILD| WS_VISIBLE | WS_BORDER | LBS_NOTIFY |
LBS_NOINTEGRALHEIGHT | WS_VSCROLL;
BOOL bOk = m_Intellilist->Create(
attribute,
CRect(0, 0, 0, 0),
this, //
IDC_L_INTELLI_LIST);
//...TODO
}
It seems that everything is fine. what means for this matter is that when I type some info in one cell, the Clistbox will appear in correct, and I can select the item in drop list is analogy to picture,
Nonetheless, there is a problem around the corner, This clistbox cannot appear outside this grid. the clistbox will cliped by the edge of grid when the grid have only one cell. the item just can be only displayed one or two items. Hence, I Change something that the clisbox attach to object was be changed to window of grid's parent. As see below code.
int B::onCreat(LPCREATESTRUCT s)
{
DWORD attribute = WS_CHILD| WS_VISIBLE | WS_BORDER | LBS_NOTIFY |
LBS_NOINTEGRALHEIGHT | WS_VSCROLL;
BOOL bOk = m_Intellilist->Create(
attribute,
CRect(0, 0, 0, 0),
this->GetParent(), // Or this->GetSafeOwner()
IDC_L_INTELLI_LIST);
//...TODO
}
There is a problem coming with this change, I cannot click item and select it, this clistbox will be disappeared in this case.
did someone can provide assistance for me?
Thanks guys!

How to make WS_THICKFRAME invisible, but still functional in MFC?

So, I created a dialog that has a style: WS_THICKFRAME.
This WS_THICKFRAME gives the dialog box the functionality to resize the window, but my problems is that I don't won't a border around my window to be visible. How would I make the border invisible, but still have the re-size capability?
An example would be most helpful! Thanks!
Below, are the styles of the template for the dialog box I created:
IDD_GADGETTRANSLUCENTDIALOG DIALOGEX 0, 0, 320, 200
STYLE DS_ABSALIGN | DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | DS_FIXEDSYS | WS_SYSMENU | WS_THICKFRAME
Remove WS_THICKFRAME
Handle WM_NCHITTEST roughly as follows:
UINT CMyClass::OnNcHitTest(CPoint point)
{
CRect rWindow;
GetWindowRect(rWindow);
CRect rInner(rWindow);
rInner.DeflateRect(GetSystemMetrics(SM_CXBORDER), GetSystemMetrics(SM_CYBORDER));
if (rWindow.PtInRect(point) && !rInner.PtInRect(point))
{
// figure out which of the following codes to return: //
// HTBOTTOM, HTTOP, HTLEFT, HTRIGHT //
// HTBOTTOMLEFT, HTBOTTOMRIGHT, HTTOPLEFT, HTTOPRIGHT //
}
else
{
return CMyBaseClass::OnNcHitTest(point);
}
}

How to correctly create a CMFCListCtrl inside another window?

I'm having problems with the follow code
int CMyView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CView::OnCreate(lpCreateStruct) == -1)
{
return -1;
}
DWORD dwStyle = LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP | WS_CLIPSIBLINGS | WS_CHILD;
CMFCListCtrl TempCtrl;
TempCtrl.Create(dwStyle, CRect(0, 0, 0, 0), this, IDC_FILTERLIST);
CMFCHeaderCtrl& HeaderCtrl = TempCtrl.GetHeaderCtrl();
if (!::IsWindow(HeaderCtrl.GetSafeHwnd()))
{
AfxMessageBox("Failed to create CMFCListCtrl properly!");
}
....
The header control part of the CMFCListCtrl is not getting created/initialized correctly. Does anyone have an idea what I'm doing wrong? Any help would be appreciated.
I noticed that you are creating a control inside a CView-derived class. Please note that the id must start from the value AFX_IDW_PANE_FIRST. Otherwise it will fail. Just google AFX_IDW_PANE_FIRST and you'll find the explanation why.
So, just replace your line with:
TempCtrl.Create(dwStyle, CRect(0, 0, 0, 0), this, AFX_IDW_PANE_FIRST);
I solved the above problem by using the WS_VISIBLE style at creation, but I still don't understand why this is so.

how to make title bar less window in mfc by code?

how to make title bar less window in mfc by code?
Use:
ModifyStyle (WS_CAPTION, 0); // to hide
ModifyStyle (0, WS_CAPTION); // to show
To remove it earlier Override PreCreateWindow() and remove WS_SYSMENU
Just to add, calling:
SetWindowPos(nullptr, 0, 0, 0, 0, SWP_FRAMECHANGED | SWP_NOSIZE | SWP_NOMOVE | SWP_NOZORDER);
after ModifyStyle() applies the settings (at least for dialog-based applications).

MFC docking windows and where they dock

I have created (generated) a MDI project with tabbed documents with
VS2008 Pro.
Visual Studio generates an application with the File/Class view
window, properties window, output window and the first MDI document/
view.
I want to control the sides on which the windows dock. I thought this
was done in BOOL CMainFrame::CreateDockingWindows() , i changed the
CBRS_TOP to CBRS_BOTTOM and CBRS_RIGHT to CBRS_LEFT , but the windows
still come out the same in the client area. It makes no difference
what is use for a window style attribute of CBRS_xxxx. Where and how
can i control where in the client area these windows dock ?
I changed then in :
BOOL CMainFrame::CreateDockingWindows()
{
BOOL bNameValid;
// Create class view
CString strClassView;
bNameValid = strClassView.LoadString(IDS_CLASS_VIEW);
ASSERT(bNameValid);
if (!m_wndClassView.Create(strClassView, this, CRect(0, 0, 200, 200), TRUE,ID_VIEW_CLASSVIEW, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS |
WS_CLIPCHILDREN | CBRS_LEFT | CBRS_FLOAT_MULTI))
{
TRACE0("Failed to create Class View window\n");
return FALSE; // failed to create
}
// Create file view
CString strFileView;
bNameValid = strFileView.LoadString(IDS_FILE_VIEW);
ASSERT(bNameValid);
if (!m_wndFileView.Create(strFileView, this, CRect(0, 0, 200, 200),TRUE, ID_VIEW_FILEVIEW, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS |
WS_CLIPCHILDREN | CBRS_LEFT| CBRS_FLOAT_MULTI))
{
TRACE0("Failed to create File View window\n");
return FALSE; // failed to create
}
// Create output window
CString strOutputWnd;
bNameValid = strOutputWnd.LoadString(IDS_OUTPUT_WND);
ASSERT(bNameValid);
if (!m_wndOutput.Create(strOutputWnd, this, CRect(0, 0, 100, 100),
TRUE, ID_VIEW_OUTPUTWND, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS |
WS_CLIPCHILDREN | CBRS_BOTTOM | CBRS_FLOAT_MULTI))
{
TRACE0("Failed to create Output window\n");
return FALSE; // failed to create
}
// Create properties window
CString strPropertiesWnd;
bNameValid = strPropertiesWnd.LoadString(IDS_PROPERTIES_WND);
ASSERT(bNameValid);
if (!m_wndProperties.Create(strPropertiesWnd, this, CRect(0, 0, 200, 200), TRUE, ID_VIEW_PROPERTIESWND, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN |CBRS_RIGHT | CBRS_FLOAT_MULTI))
{
TRACE0("Failed to create Properties window\n");
return FALSE; // failed to create
}
SetDockingWindowIcons(theApp.m_bHiColorIcons);
return TRUE;
}
Could someone please help explain to me how to control the sides where
these windows dock?
Thanks.
IIRC, CBRS_TOP etc. are for where they can dock, not for where they are docked when you start the application. That is saved in the registry, basically it will show up where it was when the application was shut down the last time.
In the past (this was not with the Feature Pack docking framework) if you wanted to dock on startup to a specific side you had to set the side where you wanted the toolbar to be docked as the only one allowed (e.g. on the right), create the toolbar, dock it (there was a SetDocked() or something like that) and then modify the allowed dock sides to the directions you wanted to allow. I'm not sure if that behavior persists in the current version but I think it does, as that was something build on low level docking toolbar functionality which the feature pack stuff just builds on.
Not a real answer but hopefully it'll set you on your way...