📄 mainfrm.cpp
字号:
// Written by JHCC, 1997
// MainFrm.cpp : implementation of the CMainFrame class
//
#include "stdafx.h"
#include "JHHB.h"
#include "MainFrm.h"
#include "JHHBDoc.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CMainFrame
IMPLEMENT_DYNCREATE(CMainFrame, CFrameWnd)
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
//{{AFX_MSG_MAP(CMainFrame)
ON_WM_CREATE()
ON_WM_DESTROY()
ON_WM_NCLBUTTONDBLCLK()
ON_WM_MENUSELECT()
ON_WM_INITMENUPOPUP()
//}}AFX_MSG_MAP
ON_UPDATE_COMMAND_UI(ID_INDICATOR_TIME, OnUpdateTime)
ON_UPDATE_COMMAND_UI(ID_INDICATOR_DATE, OnUpdateDate) // add by SQJ
END_MESSAGE_MAP()
static UINT indicators[] =
{
ID_SEPARATOR, // status line indicator
ID_INDICATOR_OWNERDRAW, // OWNERDRAW
ID_INDICATOR_DATE, // add by SQJ
ID_INDICATOR_TIME,
};
/////////////////////////////////////////////////////////////////////////////
// CMainFrame construction/destruction
CMainFrame::CMainFrame()
{
m_nStatusPane1Width = -1;
m_bMenuSelect = FALSE;
}
CMainFrame::~CMainFrame()
{
}
const int nRefreshPaneTime = 1 * 1000; // 1 seconds
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;
CWinApp * pApp=::AfxGetApp();
POSITION pos;
pos = pApp->GetFirstDocTemplatePosition();
CDocTemplate * pDocTemplate= pApp->GetNextDocTemplate(pos);
pos=pDocTemplate->GetFirstDocPosition();
CJHHBDoc * pDocument;
while (pos != NULL)
{
pDocument =(CJHHBDoc * )pDocTemplate->GetNextDoc(pos);
if (pDocument->IsKindOf(RUNTIME_CLASS(CJHHBDoc)) == TRUE)
break;
}
if (!m_wndStatusBar.Create(this) ||
!m_wndStatusBar.SetIndicators(indicators,
sizeof(indicators) / sizeof(UINT)))
{
TRACE0("Failed to create status bar\n");
return -1; // fail to create
}
m_wndStatusBar.SetPaneInfo(0, m_wndStatusBar.GetItemID(0),
SBPS_STRETCH | SBPS_POPOUT, NULL);
m_strTimePaneFmt = m_wndStatusBar.GetPaneText(m_wndStatusBar.CommandToIndex(ID_INDICATOR_TIME));
m_strDatePaneFmt = m_wndStatusBar.GetPaneText(m_wndStatusBar.CommandToIndex(ID_INDICATOR_DATE));
m_wndStatusBar.InitStatusBar(ID_INDICATOR_OWNERDRAW);
m_nIDTimer = ::SetTimer(NULL, 0, nRefreshPaneTime, TimerProc);
return 0;
}
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
// cs.style &= ~FWS_ADDTOTITLE;
cs.dwExStyle = WS_EX_DLGMODALFRAME;
cs.style = WS_SYSMENU | WS_VISIBLE | WS_CAPTION | WS_THICKFRAME | WS_MAXIMIZEBOX;
// cs.x=cs.y=0;
// cs.cx=GetSystemMetrics(SM_CXSCREEN);
// cs.cy=GetSystemMetrics(SM_CYSCREEN);
// Use the specific class name we established earlier
cs.lpszClass = CJHHBApp::lpszUniqueClass;
return CFrameWnd::PreCreateWindow(cs);
}
/////////////////////////////////////////////////////////////////////////////
// CMainFrame diagnostics
#ifdef _DEBUG
void CMainFrame::AssertValid() const
{
CFrameWnd::AssertValid();
}
void CMainFrame::Dump(CDumpContext& dc) const
{
CFrameWnd::Dump(dc);
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CMainFrame message handlers
// for display the current time at the StatusBar
void CALLBACK CMainFrame::TimerProc(HWND hwnd, UINT uMsg,
UINT uIDEvent, DWORD dwTime)
{
CMainFrame* pMainWnd = (CMainFrame*)::AfxGetApp()->m_pMainWnd;
ASSERT(uIDEvent == pMainWnd->m_nIDTimer);
CCmdUI cui;
cui.m_nID = ID_INDICATOR_TIME;
cui.m_pMenu = NULL;
cui.m_pOther = &pMainWnd->m_wndStatusBar;
pMainWnd->OnUpdateTime(&cui);
}
void CMainFrame::OnDestroy()
{
::KillTimer(NULL, m_nIDTimer);
CFrameWnd::OnDestroy();
}
///////// SQJ Update 1997.3.24 /////////////
void CMainFrame::OnUpdateTime(CCmdUI* pCmdUI)
{
// Get current date and format it
CTime time = CTime::GetCurrentTime();
CString strTime = time.Format(m_strTimePaneFmt);
int nTimePaneNo = m_wndStatusBar.CommandToIndex(ID_INDICATOR_TIME);
{
// BLOCK: compute the width of the time string
CSize size;
HGDIOBJ hOldFont = NULL;
HFONT hFont = (HFONT)m_wndStatusBar.SendMessage(WM_GETFONT);
CClientDC dc(NULL);
if (hFont != NULL)
hOldFont = dc.SelectObject(hFont);
size = dc.GetTextExtent(strTime);
if (hOldFont != NULL)
dc.SelectObject(hOldFont);
UINT nID;
UINT nStyle;
int nWidth;
// Update the pane to reflect the current time
m_wndStatusBar.GetPaneInfo(nTimePaneNo, nID, nStyle, nWidth);
m_wndStatusBar.SetPaneInfo(nTimePaneNo, nID, nStyle, size.cx);
}
m_wndStatusBar.SetPaneText(nTimePaneNo, strTime);
pCmdUI->Enable(TRUE);
// enable static text based on toggled key state
ASSERT(pCmdUI->m_bEnableChanged);
}
void CMainFrame::OnUpdateDate(CCmdUI* pCmdUI)
{
// Get current date and format it
CTime time = CTime::GetCurrentTime();
CString strDate = time.Format(m_strDatePaneFmt);
int nDatePaneNo = m_wndStatusBar.CommandToIndex(ID_INDICATOR_DATE);
{
// BLOCK: compute the width of the date string
CSize size;
HGDIOBJ hOldFont = NULL;
HFONT hFont = (HFONT)m_wndStatusBar.SendMessage(WM_GETFONT);
CClientDC dc(NULL);
if (hFont != NULL)
hOldFont = dc.SelectObject(hFont);
size = dc.GetTextExtent(strDate);
if (hOldFont != NULL)
dc.SelectObject(hOldFont);
// Update the pane to reflect the current date
UINT nID;
UINT nStyle;
int nWidth;
m_wndStatusBar.GetPaneInfo(nDatePaneNo, nID, nStyle, nWidth);
m_wndStatusBar.SetPaneInfo(nDatePaneNo, nID, nStyle, size.cx);
}
m_wndStatusBar.SetPaneText(nDatePaneNo, strDate);
pCmdUI->Enable(TRUE);
// enable static text based on toggled key state
ASSERT(pCmdUI->m_bEnableChanged);
}
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
if (m_wndSplitter.Create(this, pContext))
{
// activate the Data view
SetActiveView((CView*)m_wndSplitter.GetPane(0,0));
m_wndSplitter.ShowWindow(SW_SHOWNORMAL);
m_wndSplitter.UpdateWindow();
return TRUE;
}
return FALSE;
}
void CMainFrame::OnNcLButtonDblClk(UINT nHitTest, CPoint point)
{
if (nHitTest != HTCAPTION)
CFrameWnd::OnNcLButtonDblClk(nHitTest, point);
}
void CMainFrame::OnMenuSelect(UINT nItemID, UINT nFlags, HMENU hSysMenu)
{
CFrameWnd::OnMenuSelect(nItemID, nFlags, hSysMenu);
// Restore first pane of the statusbar ?
if (nFlags == 0xFFFF && hSysMenu == 0 && m_nStatusPane1Width != -1)
{
m_bMenuSelect = FALSE;
m_wndStatusBar.SetPaneInfo(0,
m_nStatusPane1ID, m_nStatusPane1Style, m_nStatusPane1Width);
m_nStatusPane1Width = -1; // Set it to illegal value
}
else
{
m_bMenuSelect = TRUE;
}
}
void CMainFrame::OnInitMenuPopup(CMenu* pPopupMenu, UINT nIndex, BOOL bSysMenu)
{
CFrameWnd::OnInitMenuPopup(pPopupMenu, nIndex, bSysMenu);
// store width of first pane and its style
if (m_nStatusPane1Width == -1 && m_bMenuSelect)
{
m_wndStatusBar.GetPaneInfo(0, m_nStatusPane1ID,
m_nStatusPane1Style, m_nStatusPane1Width);
CRect rtBounds;
GetWindowRect(&rtBounds);
m_wndStatusBar.SetPaneInfo(0, m_nStatusPane1ID,
SBPS_STRETCH, rtBounds.Width());
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -