ListView in Splitter Windows with MFC v3.2
Daniel Keller dkeller@psln1.psln.com -- dkeller@psln.com
Wednesday, May 29, 1996
[Watcom C/C++ 10.6 - Win95 - MFC v3.2]
Hi,
I have created a splitter window and 2 panes, It works fine but when I
move the splitter bar It doesn't erase the old abr. I guess I have to
override the OnDraw function of something similar but I don't know how
to.
Also how do I access the classes in the individual panes?
I have attached my main code file to this message.
All help is greatly appreciated.
Daniel.
--
|"Despite all my rage I am still just a rat in a cage."|
| Billy Corgan of The Smaphing Pumpkins |
|------------------------------------------------------|
|dkeller@psln.com |
|------------------------------------------------------|
#include
#include
#include
#include
#include "splitter.h"
/////////////////////////////////////////////////////////////////////////=
//
class CListView: public CWnd
{
public:
DECLARE_DYNCREATE(CListView);
CListView();
HWND m_hwnd;
// Create(CWnd* pParentWnd);
};
class CMainWindow: public CFrameWnd
{
public:
DECLARE_DYNCREATE(CMainWindow);
CSplitterWnd SplitterWnd; =20
CMainWindow();
virtual BOOL OnCreateClient(LPCREATESTRUCT lpcs,
CCreateContext* pContext);
afx_msg void OnOpen();
afx_msg void OnExit();
DECLARE_MESSAGE_MAP()
};
class CTheApp: public CWinApp
{
public:
virtual BOOL InitInstance();
};
/////////////////////////////////////////////////////////////////////////=
//
BEGIN_MESSAGE_MAP(CMainWindow,CFrameWnd)
ON_COMMAND(FILE_OPEN,OnOpen)
ON_COMMAND(FILE_EXIT,OnExit)
END_MESSAGE_MAP();
/////////////////////////////////////////////////////////////////////////=
//
CTheApp TheApp;
/////////////////////////////////////////////////////////////////////////=
//
IMPLEMENT_DYNCREATE(CListView,CWnd);
CListView::CListView()
{
}
IMPLEMENT_DYNCREATE(CMainWindow,CFrameWnd);
CMainWindow::CMainWindow()
{
LoadFrame(MAIN_RESOURCES);
}
BOOL CMainWindow::OnCreateClient(LPCREATESTRUCT lpcs,
CCreateContext* pContext)
{
SplitterWnd.CreateStatic(this,1,2);
SplitterWnd.CreateView(0,0,RUNTIME_CLASS(CListView),
CSize(0,0),pContext);
SplitterWnd.CreateView(0,1,RUNTIME_CLASS(CListView),
CSize(130,50),pContext);
=20
return TRUE; =20
} =20
=20
void CMainWindow::OnOpen()
{
CFileDialog cDlg(TRUE);
char FileName[256];
char Filter[256];
int i;
lstrcpy(Filter,"All files (*.*)|*.*|C Files (*.c)|*.c||");
for(i=3D0;Filter[i]!=3D0;i++)
{
if(Filter[i]=3D=3D'|') Filter[i]=3D0;
}
FileName[0]=3D0;
cDlg.m_ofn.lStructSize=3Dsizeof(OPENFILENAME);
cDlg.m_ofn.hwndOwner=3DNULL;
cDlg.m_ofn.hInstance=3DAfxGetInstanceHandle();
cDlg.m_ofn.lpstrFilter=3DFilter;
cDlg.m_ofn.lpstrFile=3D(LPSTR)FileName;
cDlg.m_ofn.nMaxFile=3Dsizeof(FileName);
=
cDlg.m_ofn.Flags=3DcDlg.m_ofn.Flags|OFN_FILEMUSTEXIST|OFN_PATHMUSTEXIST|
OFN_HIDEREADONLY|OFN_EXPLORER;
if(cDlg.DoModal()!=3DIDOK) return;
}
void CMainWindow::OnExit()
{
TheApp.m_pMainWnd->SendMessage(WM_CLOSE,0,0L);
}
BOOL CTheApp::InitInstance()
{
Enable3dControls();
m_pMainWnd=3Dnew CMainWindow;
m_pMainWnd->ShowWindow(m_nCmdShow);
m_pMainWnd->UpdateWindow();
return TRUE;
}
Gordon Weakliem -- gweakl@metronet.com
Sunday, June 02, 1996
At 02:51 PM 5/29/96 -0700, you wrote:
>[Watcom C/C++ 10.6 - Win95 - MFC v3.2]
>
>Hi,
>I have created a splitter window and 2 panes, It works fine but when I
>move the splitter bar It doesn't erase the old abr. I guess I have to
>override the OnDraw function of something similar but I don't know how
>to.
I suspect that you're correct, CListView isn't drawing itself for some
reason. Initially, I had some problems with CFormView derived classes not
redrawing themselves. Try creating a class derived from CListView and using
it instead of the raw CListView.
>Also how do I access the classes in the individual panes?
The view in the top left pane is accessed like this:
CView *pView = (CView*) SplitterWnd.GetPane(0,0);
Also, you can set which pane of the splitter has focus from your CFrameWnd
derived class with this code:
SetActiveView((CView*)SplitterWnd.GetPane(0,1));
>
>I have attached my main code file to this message.
>
>All help is greatly appreciated.
>Daniel.
>
Gordon Weakliem
gweakl@metronet.com
Paul Pettigrew -- chilli@iinet.net.au
Friday, June 07, 1996
>I have created a splitter window and 2 panes, It works fine but when I
>move the splitter bar It doesn't erase the old abr. I guess I have to
>override the OnDraw function of something similar but I don't know how
>to.
Place a call to RecalcLayout() in your frames OnDraw.
I have just gone throught the ropes of CListCrtl's in multiple splitter panes in a single frame.
Email me for code if your still stuck.
--
Paul Pettigrew
chilli@iinet.net.au || pmpet2@mugc.cc.monash.edu.au
http://www.iinet.net.au/~chilli/
| Вернуться в корень Архива
|