mainfrm.cpp

来自「一个俄罗斯方块的vc源代码」· C++ 代码 · 共 283 行

CPP
283 行
字号
// MainFrm.cpp : implementation of the CMainFrame class
//

#include "stdafx.h"
#include "Russia.h"
#include "MainFrm.h"
#include "RussiaView.h"
#include "mmsystem.h"
#pragma comment(lib,"winmm.lib")


#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)
	ON_WM_INITMENU()
	//{{AFX_MSG_MAP(CMainFrame)
	ON_WM_CREATE()
	ON_COMMAND(ID_MENU_HIDE, OnMenuHide)
	ON_WM_SIZE()
	ON_WM_ACTIVATE()
	ON_WM_DESTROY()
	ON_WM_TIMER()
	//}}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 (CFrameWnd::OnCreate(lpCreateStruct) == -1)
		return -1;
	
/*	if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
		| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC)||!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: 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);
*/
	
		//Make sure system menu item is in the right range.
//在系统菜单中增加一个菜单项
	ASSERT((ID_APP_ABOUT&0xFFF0)==ID_APP_ABOUT);
	ASSERT (ID_APP_ABOUT<0xF000);
	//Get pointer to system menu.
	CMenu* pSysMenu=GetSystemMenu(FALSE);
	ASSERT_VALID(pSysMenu);
	//Add a separator and our menu item to system menu.
	CString StrMenuItem(_T ("夏天-EMail:kiler@cmmail.com"));
	pSysMenu->AppendMenu(MF_SEPARATOR);
	pSysMenu->AppendMenu(MF_STRING, ID_APP_ABOUT, StrMenuItem);


	m_AnimateIcon.SetImageList(IDB_BITMAP1,4,RGB(0,0,0));
	// set the timer to fire every .5 seconds
	m_timerID = this->SetTimer(99,100,NULL);
	
	return 0;
}

BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
	if( !CFrameWnd::PreCreateWindow(cs) )
		return FALSE;
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs
	//cs.style=WS_SYSMENU;//!WS_MINIMIZEBOX|!WS_MAXIMIZEBOX|WS_SYSMENU;
	cs.dwExStyle=cs.dwExStyle|WS_EX_TOPMOST;	//窗口置于最前	

	CWinApp* pApp = AfxGetApp();
	int dx=pApp->GetProfileInt("Settings","方块大小",20);
	int m1=111+dx*10;
	int m2=85+dx*24;

	cs.cx=m1;
	cs.cy=m2;
	return TRUE;
}

/////////////////////////////////////////////////////////////////////////////
// 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::OnMenuHide() 
{
	// TODO: Add your command handler code here

	CRussiaView *pView=(CRussiaView *)GetActiveView();
	pView->m_bPause=true;
	sndPlaySound (NULL,0);

	CMainFrame::ShowWindow(SW_MINIMIZE);
	HICON hIcon;
	hIcon=AfxGetApp()->LoadIcon(IDI_ICON2);
	SetIcon(hIcon,true);
	SetWindowText("回收站");

}

void CMainFrame::OnSize(UINT nType, int cx, int cy) 
{
	CFrameWnd::OnSize(nType, cx, cy);
	
	// TODO: Add your message handler code here

	HICON hIcon;
	//如果最小话,则变为一个回收站驱动器的样子
	if(nType==SIZE_MINIMIZED)
	{
	    if(m_timerID != 0)			//如果最小化时,则显示回收站的图标,把Timer终止掉
		{
			KillTimer(m_timerID);
			m_timerID=0;
		}

		OnMenuHide();
		/*hIcon=AfxGetApp()->LoadIcon(IDI_ICON2);
		SetWindowText("回收站");	
		SetIcon(hIcon,true);//图标变为回收站的图标

		//此时应让游戏暂停。但是怎样才能获得视图的指针?*/
		return;
	}

	if(m_timerID==0)
		m_timerID = this->SetTimer(99,100,NULL);
	
	hIcon=AfxGetApp()->LoadIcon(IDI_ICON1);
	SetIcon(hIcon,true);
	SetWindowText("俄罗斯方块");
}

void CMainFrame::OnInitMenu(CMenu* pMenu)
{
   CFrameWnd::OnInitMenu(pMenu);
  
	// CG: This block added by 'Tip of the Day' component.
	{
		// TODO: This code adds the "Tip of the Day" menu item
		// on the fly.  It may be removed after adding the menu
		// item to all applicable menu items using the resource
		// editor.

		// Add Tip of the Day menu item on the fly!
		static CMenu* pSubMenu = NULL;

		CString strHelp; strHelp.LoadString(CG_IDS_TIPOFTHEDAYHELP);
		CString strMenu;
		int nMenuCount = pMenu->GetMenuItemCount();
		BOOL bFound = FALSE;
		for (int i=0; i < nMenuCount; i++) 
		{
			pMenu->GetMenuString(i, strMenu, MF_BYPOSITION);
			if (strMenu == strHelp)
			{ 
				pSubMenu = pMenu->GetSubMenu(i);
				bFound = TRUE;
				ASSERT(pSubMenu != NULL);
			}
		}

		CString strTipMenu;
		strTipMenu.LoadString(CG_IDS_TIPOFTHEDAYMENU);
		if (!bFound)
		{
			// Help menu is not available. Please add it!
			if (pSubMenu == NULL) 
			{
				// The same pop-up menu is shared between mainfrm and frame 
				// with the doc.
				static CMenu popUpMenu;
				pSubMenu = &popUpMenu;
				pSubMenu->CreatePopupMenu();
				pSubMenu->InsertMenu(0, MF_STRING|MF_BYPOSITION, 
					CG_IDS_TIPOFTHEDAY, strTipMenu);
			} 
			pMenu->AppendMenu(MF_STRING|MF_BYPOSITION|MF_ENABLED|MF_POPUP, 
				(UINT)pSubMenu->m_hMenu, strHelp);
			DrawMenuBar();
		} 
		else
		{      
			// Check to see if the Tip of the Day menu has already been added.
			pSubMenu->GetMenuString(0, strMenu, MF_BYPOSITION);

			if (strMenu != strTipMenu) 
			{
				// Tip of the Day submenu has not been added to the 
				// first position, so add it.
				pSubMenu->InsertMenu(0, MF_BYPOSITION);  // Separator
				pSubMenu->InsertMenu(0, MF_STRING|MF_BYPOSITION, 
					CG_IDS_TIPOFTHEDAY, strTipMenu);
			}
		}
	}

}

void CMainFrame::OnActivate(UINT nState, CWnd* pWndOther, BOOL bMinimized) 
{
	CFrameWnd::OnActivate(nState, pWndOther, bMinimized);
	
	// TODO: Add your message handler code here
	
}

void CMainFrame::OnDestroy() 
{
	CFrameWnd::OnDestroy();
	
	// TODO: Add your message handler code here
    if(m_timerID != 0)
        KillTimer(m_timerID);

	
}

void CMainFrame::OnTimer(UINT nIDEvent) 
{
	// TODO: Add your message handler code here and/or call default
	m_AnimateIcon.ShowNextImage();

	CFrameWnd::OnTimer(nIDEvent);
}

⌨️ 快捷键说明

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