⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mainfrm.cpp

📁 关于vc++学习应用的很好的书籍!!!!!!!!!! 里面有事例,源码!
💻 CPP
字号:
// MainFrm.cpp : implementation of the CMainFrame class
//

#include "stdafx.h"
#include <afxcview.h>

#include "StatusBar.h"
#include "StatusBarDoc.h"
#include "StatusBarView.h"

#include "StatusControl.h"
#include "StatusStatic.h"
#include "StatusProgress.h"
#include "StatusEdit.h"
#include "StatusCombo.h"
#include "MainFrm.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_EN_CHANGE(ID_INDICATOR_EDIT, OnChangeEdit)
	ON_CBN_SELCHANGE(ID_INDICATOR_COMBO, OnSelchangeCombo)
	ON_COMMAND(ID_STATUS_COMBO, OnStatusCombo)
	ON_COMMAND(ID_STATUS_EDIT, OnStatusEdit)
	ON_COMMAND(ID_STATUS_ICON, OnStatusIcon)
	ON_COMMAND(ID_STATUS_PROGRESS, OnStatusProgress)
	ON_WM_SIZE()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

static UINT indicators[] =
{
	ID_SEPARATOR,           // status line indicator
	ID_INDICATOR_EDIT,
	ID_INDICATOR_PROGRESS,
	ID_INDICATOR_COMBO,
	ID_INDICATOR_ICON,
	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 (CFrameWnd::OnCreate(lpCreateStruct) == -1)
		return -1;
	
	if (!m_wndToolBar.Create(this) ||
		!m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
	{
		TRACE0("Failed to create toolbar\n");
		return -1;      // fail to create
	}

	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: Remove this if you don't want tool tips or a resizeable toolbar
	m_wndToolBar.SetBarStyle(m_wndToolBar.GetBarStyle() |
		CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC);

	// 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);

	return 0;
}

BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs

	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

void CMainFrame::OnStatusCombo() 
{
 if(c_StatusCombo.m_hWnd == NULL)
    {
	 //第一次点击,创建
     c_StatusCombo.Create(&m_wndStatusBar, ID_INDICATOR_COMBO,
			 WS_VISIBLE | WS_BORDER | CBS_DROPDOWNLIST);
			 
     logEvent(IDS_CREATE_COMBO);
     for(int i = IDS_FIRST_VALUE; i <= IDS_LAST_VALUE; i++)
	{ 
	//添加列表项
	 CString s;
	 s.LoadString(i);
	 c_StatusCombo.AddString(s);
	} 
    } 
 else
    { 
	 //第二次点击,销毁
     c_StatusCombo.DestroyWindow();
     logEvent(IDS_DESTROY_COMBO);
    } 
}

void CMainFrame::OnStatusEdit() 
{
 if(c_StatusEdit.m_hWnd == NULL)
    { 
    //第一次点击,创建
	 c_StatusEdit.Create(&m_wndStatusBar, ID_INDICATOR_EDIT, WS_VISIBLE | WS_BORDER);
     logEvent(IDS_CREATE_EDIT);
    } 
 else
	{
	 //第二次点击,销毁
     c_StatusEdit.DestroyWindow();
     logEvent(IDS_DESTROY_EDIT);
    } 
}

void CMainFrame::OnStatusIcon() 
{
 static int icons[] = {IDI_SMILE1, IDI_SMILE2, IDI_SMILE3};
 if(c_StatusIcon.m_hWnd == NULL)
	 //第一次调用,创建Static控件,显示图片
    { 
     c_StatusIcon.Create(&m_wndStatusBar, ID_INDICATOR_ICON, WS_VISIBLE | SS_ICON | SS_CENTERIMAGE);
	 //创建Static控件
     HICON icon = (HICON)::LoadImage(AfxGetInstanceHandle(),
				     MAKEINTRESOURCE(icons[0]),
				     IMAGE_ICON, 16, 16, LR_SHARED);
	 //载入图标
     c_StatusIcon.SetIcon(icon);
	 //设置图标
     logEvent(IDS_CREATE_STATIC);
	 //显示当前状态
     iconstate = 0;
	 //计数器为0
     CString s;
     s.Format(_T("%d"), icons[iconstate]);
     logEvent(IDS_SM_SETICON, s);
    }
 else
    { 
     iconstate++;
     if(iconstate > 2)
	{ 
	//如果已经点击3次,销毁
	 c_StatusIcon.DestroyWindow();
	 logEvent(IDS_DESTROY_STATIC);
	} 
     else
	{ 
	//换至其他的图标
	 CString s;
	 HICON icon = (HICON)::LoadImage(AfxGetInstanceHandle(),
					 MAKEINTRESOURCE(icons[iconstate]),
					 IMAGE_ICON, 16, 16, LR_SHARED);
	 c_StatusIcon.SetIcon(icon);
	 s.Format(_T("%d"), icons[iconstate]);
	 logEvent(IDS_SM_SETICON, s);
	} 
    } 
}

void CMainFrame::OnStatusProgress() 
{
 if(c_StatusProgress.m_hWnd == NULL)
    {
	 //第一次点击,创建
     c_StatusProgress.Create(&m_wndStatusBar, ID_INDICATOR_PROGRESS, WS_VISIBLE | PBS_SMOOTH);
     c_StatusProgress.SetRange(0, 5);
	 //设置进度条的范围
     c_StatusProgress.SetPos(1);
	 //设置进度条的位置
     logEvent(IDS_CREATE_PROGRESS);
     logEvent(IDS_PBM_SETPOS, _T("1"));
     progress = 1;
    } 
 else
    { 
     progress++;
     if(progress > 5)
	{ 
	//如果点击大于5次,需要销毁
	 c_StatusProgress.DestroyWindow();
	 logEvent(IDS_DESTROY_PROGRESS);
	} 
     else
	{ 
	//否则,进度条进度前进
	 c_StatusProgress.SetPos(progress);
	 CString s;
	 s.Format(_T("%d"), progress);
	 logEvent(IDS_PBM_SETPOS, s);
	} 
    } 
}

void CMainFrame::OnSize(UINT nType, int cx, int cy) 
{
	CFrameWnd::OnSize(nType, cx, cy);
	
	c_StatusProgress.Reposition();
	c_StatusEdit.Reposition();
	c_StatusIcon.Reposition();
	c_StatusCombo.Reposition();
	
}

/****************************************************************************
*                        CMainFrame::OnSelchangeCombo
* Result: void
*       
* Effect: 
*       Handles selection change for combo box
****************************************************************************/

void CMainFrame::OnSelchangeCombo()
    {
     int n = c_StatusCombo.GetCurSel();
     if(n == CB_ERR)
	return;
     CString s;
     c_StatusCombo.GetLBText(n, s);
     logEvent(IDS_CBN_SELCHANGE, s);
    } // CMainFrame::OnSelchangeCombo

/****************************************************************************
*                          CMainFrame::OnChangeEdit
* Result: void
*       
* Effect: 
*       Handles a change in the edit control
****************************************************************************/

void CMainFrame::OnChangeEdit()
    {
     CString s;
     c_StatusEdit.GetWindowText(s);
     logEvent(IDS_EN_CHANGE, s);
    } // CMainFrame::OnChangeEdit

/****************************************************************************
*                            CMainFrame::logEvent
* Inputs:
*       UINT id: ID to log
*	CString s: Text to log with it
* Result: void
*       
* Effect: 
*       Logs the event
****************************************************************************/

void CMainFrame::logEvent(UINT id, CString s)
    {
     CStatusBarView * view = (CStatusBarView *)GetActiveView();
     if(view == NULL)
	return;
     view->AddString(id, s);     
    } // CMainFrame::logEvent

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -