📄 mainfrm.cpp
字号:
// mainfrm.cpp : implementation of the DMainFrame class
//
#include "stdafx.h"
#include "dialogs.h"
#include "extendlg.h"
#include "progress.h"
#include "mainfrm.h"
#ifdef _DEBUG
#undef THIS_FILE
static char BASED_CODE THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// DMainFrame
IMPLEMENT_DYNCREATE(DMainFrame, CFrameWnd)
BEGIN_MESSAGE_MAP(DMainFrame, CFrameWnd)
//{{AFX_MSG_MAP(DMainFrame)
ON_WM_CREATE()
ON_COMMAND(ID_FILE_OPEN, OnFileOpen)
ON_COMMAND(ID_FILE_TYPE, OnFileType)
ON_COMMAND(ID_VIEW_SEARCHBAR, CmdViewSearchbar)
ON_UPDATE_COMMAND_UI(ID_VIEW_SEARCHBAR, UpdViewSearchbar)
ON_COMMAND(ID_VIEW_PROGRESS, CmdProgress)
ON_WM_TIMER()
//}}AFX_MSG_MAP
ON_COMMAND_EX(IDC_FORWARD, CmdSearchForward)
ON_COMMAND_EX(IDC_BACK, CmdSearchBackward)
ON_MESSAGE(PM_PROGRESS_CLOSING, MsgProgressClosing)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// arrays of IDs used to initialize control bars
// toolbar buttons - IDs are command buttons
static UINT BASED_CODE buttons[] =
{
// same order as in the bitmap 'toolbar.bmp'
ID_FILE_OPEN,
ID_FILE_TYPE,
ID_SEPARATOR,
ID_VIEW_PROGRESS,
ID_SEPARATOR,
ID_APP_ABOUT,
};
static UINT BASED_CODE indicators[] =
{
ID_SEPARATOR, // status line indicator
ID_INDICATOR_CAPS,
ID_INDICATOR_NUM,
ID_INDICATOR_SCRL,
};
/////////////////////////////////////////////////////////////////////////////
// DMainFrame construction/destruction
DMainFrame::DMainFrame()
{
d_pOpenFile = 0;
d_pExtDlg = 0;
d_pDialogBar = 0;
d_bSearchBarVisible = TRUE;
d_pdlgProgress = 0;
}
DMainFrame::~DMainFrame()
{
// Delete file open object.
if (d_pOpenFile)
delete d_pOpenFile;
// Delete file extensions object.
if (d_pExtDlg)
delete d_pExtDlg;
// Delete dialog bar object.
if (d_pDialogBar)
delete d_pDialogBar;
// Delete progress dialog box.
if (d_pdlgProgress)
delete d_pdlgProgress;
}
//-------------------------------------------------------------------
// WM_CREATE message handler.
int DMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;
// Create dialog bar object.
d_pDialogBar = new CDialogBar();
if (!d_pDialogBar)
return -1;
// Initialize dialog bar.
d_pDialogBar->Create(this, IDD_SEARCHBAR, WS_CHILD | CBRS_TOP |
CBRS_TOOLTIPS | CBRS_FLYBY, ID_SEARCH_BAR);
// Make dialog bar visible.
d_pDialogBar->ShowWindow(SW_SHOWNORMAL);
// Initialize tool bar.
if (!m_wndToolBar.Create(this) ||
!m_wndToolBar.LoadBitmap(IDR_MAINFRAME) ||
!m_wndToolBar.SetButtons(buttons,
sizeof(buttons)/sizeof(UINT)))
{
TRACE0("Failed to create toolbar\n");
return -1; // fail to create
}
// Set bitmap button size.
SIZE szButton = {42,38};
SIZE szBitmap = {32,30};
m_wndToolBar.SetSizes(szButton, szBitmap);
// Initialize status bar.
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
}
// TODO: Delete these three lines if you don't
// want the toolbar to be dockable.
m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
EnableDocking(CBRS_ALIGN_ANY);
DockControlBar(&m_wndToolBar);
// TODO: Remove this if you don't want tool tips
m_wndToolBar.SetBarStyle(m_wndToolBar.GetBarStyle() |
CBRS_TOOLTIPS | CBRS_FLYBY);
// Create File|Open... dialog object.
d_pOpenFile = new CFileDialog (TRUE);
if (!d_pOpenFile)
return -1;
// Create File|Type... dialog object.
d_pExtDlg = new DExtensionDlg();
if (!d_pExtDlg)
return -1;
return 0;
}
/////////////////////////////////////////////////////////////////////////////
// DMainFrame diagnostics
#ifdef _DEBUG
void DMainFrame::AssertValid() const
{
CFrameWnd::AssertValid();
}
void DMainFrame::Dump(CDumpContext& dc) const
{
CFrameWnd::Dump(dc);
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// DMainFrame message handlers
//-------------------------------------------------------------------
// WM_COMMAND handler for File|Open... menu item.
void DMainFrame::OnFileOpen()
{
// Build list of file extensions.
CStringList * psl = &d_pExtDlg->d_cslFileType;
int nCount = psl->GetCount();
ASSERT(((nCount/2)*2) == nCount); // Must be even.
CString csFilter;
POSITION pos = psl->GetHeadPosition();
while (pos != NULL)
{
csFilter += psl->GetNext(pos);
csFilter += (TCHAR)'\0';
csFilter += psl->GetNext(pos);
csFilter += (TCHAR)'\0';
}
// Add all files selection.
csFilter += _T("All Files (*.*)");
csFilter += (TCHAR)'\0';
csFilter += _T("*.*");
csFilter += (TCHAR)'\0';
// Assign string to OPENFILENAME member.
d_pOpenFile->m_ofn.lpstrFilter = csFilter;
// Display File.Open... dialog box.
int iRet = d_pOpenFile->DoModal();
// Ignore when user clicks [Cancel] button.
if (iRet != IDOK)
return;
// Fetch fully-qualified file name.
CString csFile = d_pOpenFile->GetPathName();
AfxMessageBox(csFile);
}
//-------------------------------------------------------------------
// WM_COMMAND handler for File|Type... menu item.
void DMainFrame::OnFileType()
{
d_pExtDlg->DoModal();
}
//-------------------------------------------------------------------
// WM_COMMAND handler for View|Search Bar menu item.
void DMainFrame::CmdViewSearchbar()
{
// Toggle visibility flag.
d_bSearchBarVisible = (d_pDialogBar->GetStyle() & WS_VISIBLE);
d_bSearchBarVisible = !d_bSearchBarVisible;
// Show or hide dialog bar window.
int nShow = (d_bSearchBarVisible) ? SW_SHOWNORMAL : SW_HIDE;
d_pDialogBar->ShowWindow(nShow);
// Reorganize all toolbars.
RecalcLayout();
}
//-------------------------------------------------------------------
// CN_UPDATE_COMMAND_UI handler for View|Search Bar menu item.
void DMainFrame::UpdViewSearchbar(CCmdUI* pCmdUI)
{
int nCheck = (d_bSearchBarVisible) ? 1 : 0;
pCmdUI->SetCheck(nCheck);
}
//-------------------------------------------------------------------
// WM_COMMAND handler for Clicking >> button on button bar.
BOOL DMainFrame::CmdSearchForward(UINT nID)
{
// Fetch string from edit control.
CEdit * pedSearch =
(CEdit *)d_pDialogBar->GetDlgItem(IDC_SEARCHTEXT);
TCHAR ach[MAX_LEN];
pedSearch->GetWindowText(ach, MAX_LEN);
// Format string and display in a message box.
CString cs;
cs.Format(_T("Searching forward for [%s]..."), ach);
AfxMessageBox(cs);
return TRUE;
}
//-------------------------------------------------------------------
// WM_COMMAND handler for Clicking << button on button bar.
BOOL DMainFrame::CmdSearchBackward(UINT nID)
{
// Fetch string from edit control.
CEdit * pedSearch =
(CEdit *)d_pDialogBar->GetDlgItem(IDC_SEARCHTEXT);
TCHAR ach[MAX_LEN];
pedSearch->GetWindowText(ach, MAX_LEN);
// Format string and display in a message box.
CString cs;
cs.Format(_T("Searching backward for [%s]..."), ach);
AfxMessageBox(cs);
return TRUE;
}
//-------------------------------------------------------------------
// Handle WM_COMMAND message for View|Test Progress Bar...
void DMainFrame::CmdProgress()
{
// Start progress bar demo.
if (!d_pdlgProgress)
{
d_pdlgProgress = new DProgress();
d_pdlgProgress->Create(IDD_PROGRESS, this);
SetTimer(1, 100, 0);
}
else
{
// Complain if user tries to start another demo.
MessageBeep(MB_OK);
}
}
//-------------------------------------------------------------------
// Handle WM_TIMER message for advancing progress bar.
void DMainFrame::OnTimer(UINT nIDEvent)
{
// Check for a valid object & valid window.
if (d_pdlgProgress && ::IsWindow(d_pdlgProgress->m_hWnd))
{
// Increment by 5 percent each time.
int nCount = d_pdlgProgress->GetPercent();
nCount+=2;
d_pdlgProgress->SetPercent(nCount);
// When at or over 100%, we're done.
if (nCount >= 100)
{
d_pdlgProgress->PostMessage(WM_KEYDOWN, VK_ESCAPE);
}
}
else // Destroy timer when valid object is gone.
{
KillTimer(1);
}
}
//-------------------------------------------------------------------
// Handle PM_PROGRESS_CLOSING message.
LRESULT DMainFrame::MsgProgressClosing(WPARAM wParam, LPARAM lParam)
{
// Clear our pointer to progress bar.
if (d_pdlgProgress)
{
delete d_pdlgProgress;
d_pdlgProgress = 0;
}
return (LRESULT)0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -