2025-11-27 16:46:48 +09:00

129 lines
2.8 KiB
C++

// MainFrm.cpp : implementation of the CMainFrame class
//
#include "stdafx.h"
#include "Communicator.h"
#include "CommunicatorDoc.h"
#include "MainFrm.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CMainFrame
IMPLEMENT_DYNAMIC(CMainFrame, CMDIFrameWnd)
BEGIN_MESSAGE_MAP(CMainFrame, CMDIFrameWnd)
//{{AFX_MSG_MAP(CMainFrame)
ON_WM_CREATE()
ON_WM_CLOSE()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
static UINT indicators[] =
{
ID_SEPARATOR, // status line indicator
ID_INDICATOR_CAPS,
ID_INDICATOR_NUM,
ID_INDICATOR_SCRL,
};
/////////////////////////////////////////////////////////////////////////////
// CMainFrame construction/destruction
CMainFrame::CMainFrame()
{
// TODO: add member initialization code here
}
CMainFrame::~CMainFrame()
{
}
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CMDIFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;
return 0;
}
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
// cs.style &= ~WS_MAXIMIZEBOX;
cs.style |= WS_MAXIMIZE;
cs.style &= ~WS_MINIMIZEBOX;
return CMDIFrameWnd::PreCreateWindow(cs);
}
/////////////////////////////////////////////////////////////////////////////
// CMainFrame diagnostics
#ifdef _DEBUG
void CMainFrame::AssertValid() const
{
CMDIFrameWnd::AssertValid();
}
void CMainFrame::Dump(CDumpContext& dc) const
{
CMDIFrameWnd::Dump(dc);
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CMainFrame message handlers
void CMainFrame::OnClose()
{
// Check whether there are documents that are still blocking
// (and thus have started a second message loop)
BOOL bBlocking = FALSE;
POSITION pos;
CDocTemplate* pDocTemplate;
CCommunicatorDoc* pComDoc;
// Get the one (and only) document template
pos = AfxGetApp()->GetFirstDocTemplatePosition();
// ... Should have at least one template
ASSERT(pos != 0);
pDocTemplate = AfxGetApp()->GetNextDocTemplate(pos);
ASSERT(pDocTemplate != 0);
// ... Should have exactly one template
ASSERT(pos == 0);
// Iterate all the documents
pos = pDocTemplate->GetFirstDocPosition();
while (pos != NULL)
{
pComDoc = (CCommunicatorDoc*)pDocTemplate->GetNextDoc(pos);
ASSERT(pComDoc != 0);
ASSERT(pComDoc->IsKindOf(RUNTIME_CLASS(CCommunicatorDoc)));
if (pComDoc->IsBlocking())
{
bBlocking = TRUE;
pComDoc->CancelBlocking();
}
}
// If blocking abort close and repost message
if (bBlocking)
{
TRACE(_T("CMainFrame::OnClose : Detected communicators that are still blocking, cancelling blocking and reposting WM_CLOSE\n"));
PostMessage(WM_CLOSE);
}
else
CMDIFrameWnd::OnClose();
}