mainfrm.cpp

来自「windows ce开发技巧与实例光盘代码」· C++ 代码 · 共 182 行

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

#include "stdafx.h"
#include "Sprite.h"

#include "MainFrm.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

const DWORD dwAdornmentFlags = 0; // exit button

/////////////////////////////////////////////////////////////////////////////
// CMainFrame

IMPLEMENT_DYNAMIC(CMainFrame, CFrameWnd)

BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
	//{{AFX_MSG_MAP(CMainFrame)
	ON_WM_CREATE()
	ON_WM_SETFOCUS()
	ON_WM_DESTROY()
	ON_WM_KEYDOWN()
	ON_WM_KILLFOCUS()
	ON_WM_SETCURSOR()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CMainFrame construction/destruction

CMainFrame::CMainFrame()
{
	m_pThread = new CGenericThread();
}

CMainFrame::~CMainFrame()
{
	delete m_pThread;
}

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
	if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
		return -1;

	// Remove and destroy the menu
	if (m_hMenuDefault)
	{
		::DestroyMenu(m_hMenuDefault);
	}
	SetMenu(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
#ifndef _WIN32_WCE
	if (GAMEPARAM_FULLSCREEN)
	{
		cs.style = WS_POPUP;
	}
	else
	{
		cs.style = WS_OVERLAPPED | WS_CAPTION | FWS_ADDTOTITLE
			 | WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_SYSMENU;
	}
#endif

	cs.dwExStyle &= ~WS_EX_CLIENTEDGE;
	cs.lpszClass = AfxRegisterWndClass( CS_VREDRAW | CS_HREDRAW,
		AfxGetApp()->LoadCursor(IDC_ARROW),  NULL,
		AfxGetApp()->LoadIcon(MAKEINTRESOURCE(IDR_MAINFRAME)));

	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::OnSetFocus(CWnd* pOldWnd)
{
	m_pThread->ResumeThread();
}

BOOL CMainFrame::OnCmdMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDLERINFO* pHandlerInfo)
{
	// otherwise, do default handling
	return CFrameWnd::OnCmdMsg(nID, nCode, pExtra, pHandlerInfo);
}

void CMainFrame::StartThread()
{
	// Start graphics thread
	m_pThread->StartThread(GetSafeHwnd());
}


void CMainFrame::OnDestroy() 
{
	m_pThread->KillThread();
#ifdef _WIN32_WCE
	// Restore all adornments if we are running Windows CE
	::CommandBar_Show(this->m_hCommandBar, TRUE);
	::SHFullScreen(m_hWnd, 
		SHFS_SHOWSTARTICON |
		SHFS_SHOWTASKBAR | 
		SHFS_SHOWSIPBUTTON);
#endif
	
	CFrameWnd::OnDestroy();
}

void CMainFrame::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) 
{
		GDKEYLIST gxkl;
	m_input.GetKeyList(&gxkl);

	if (nChar == gxkl.vkA)
	{
		// Key "1" pressed
		m_pThread->KillThread();
		PostMessage(WM_CLOSE, 0, 0);
	}
	else if (nChar == gxkl.vkB)
	{
		// Key "2" pressed
		m_pThread->ChangeScreenOrientation();
	}
	else if (nChar == gxkl.vkC)
	{
		// Key "3" pressed
		m_pThread->SaveScreenshot();
	}

	CFrameWnd::OnKeyDown(nChar, nRepCnt, nFlags);
}

void CMainFrame::OnKillFocus(CWnd* pNewWnd) 
{
	m_pThread->SuspendThread();
	CFrameWnd::OnKillFocus(pNewWnd);
}

BOOL CMainFrame::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
{
	if (GAMEPARAM_FULLSCREEN)
	{
		// Hide mouse cursor in full screen mode
	    SetCursor(NULL);
		return TRUE;
	}
	else
	{
		return CFrameWnd::OnSetCursor(pWnd, nHitTest, message);
	}
}

⌨️ 快捷键说明

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