gusucode.com > 基于VC++编程war3连连看源码程序 > war3连连看/源代码/link.cpp

    // link.cpp : Defines the class behaviors for the application.
//

#include "stdafx.h"
#include "link.h"

#include "MainFrm.h"
#include "linkDoc.h"
#include "linkView.h"
#include <windows.h>


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

/////////////////////////////////////////////////////////////////////////////
// CLinkApp

BEGIN_MESSAGE_MAP(CLinkApp, CWinApp)
	//{{AFX_MSG_MAP(CLinkApp)
	ON_COMMAND(ID_APP_ABOUT, OnAppAbout)
		// NOTE - the ClassWizard will add and remove mapping macros here.
		//    DO NOT EDIT what you see in these blocks of generated code!
	//}}AFX_MSG_MAP
	// Standard file based document commands
	ON_COMMAND(ID_FILE_NEW, CWinApp::OnFileNew)
	ON_COMMAND(ID_FILE_OPEN, CWinApp::OnFileOpen)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CLinkApp construction

CLinkApp::CLinkApp()
{
}


CLinkApp theApp;

#include "mmsystem.h"
#pragma comment(lib,"winmm.lib") 


DWORD WINAPI Play_Sound( LPVOID lpParameter )
{
	char   buf[128];   

    MCI_OPEN_PARMS   mciOpen;   
    MCIERROR   mciError;     
    mciOpen.lpstrDeviceType  =  "mpegvideo";   
	
	//mciOpen.lpstrElementName 是const char *类型的指针,这样赋值很麻烦!!
	char temp[50] ;
	strcpy( temp , theApp.file_path ) ;
	mciOpen.lpstrElementName  = temp ;   
 
    mciError   =   mciSendCommand(0,MCI_OPEN,MCI_OPEN_TYPE   |   MCI_OPEN_ELEMENT,(DWORD)&mciOpen);   
    if(mciError)   
    {   
        mciGetErrorString(mciError,buf,128);     
        return 0;   
    }   
    UINT   DeviceID   =   mciOpen.wDeviceID   ;   
    MCI_PLAY_PARMS   mciPlay;   

	mciError   =   mciSendCommand(DeviceID, MCI_PLAY, MCI_WAIT , (DWORD)   (LPMCI_PLAY_PARMS)&mciPlay);
	
	if(mciError)   
    { 
        mciGetErrorString(mciError,buf,128);    
        return 0;   
    }  
	return 0 ;
}


BOOL CLinkApp::InitInstance()
{
	AfxEnableControlContainer();

	//记录前一次点击的坐标
	PreClick.x = -1 ;  
	PreClick.y = -1 ;
	margin = 50 ; 

	remain_num = lenx * leny ;
	score = 0 ;
	stage = 1 ;

	strcpy(file_path, "sound\\welcome.mp3");  //背景音乐的路径


#ifdef _AFXDLL
	Enable3dControls();			// Call this when using MFC in a shared DLL
#else
	Enable3dControlsStatic();	// Call this when linking to MFC statically
#endif

	// Change the registry key under which our settings are stored.
	// TODO: You should modify this string to be something appropriate
	// such as the name of your company or organization.
	SetRegistryKey(_T("Local AppWizard-Generated Applications"));

	LoadStdProfileSettings();  // Load standard INI file options (including MRU)

	// Register the application's document templates.  Document templates
	//  serve as the connection between documents, frame windows and views.

	CSingleDocTemplate* pDocTemplate;
	pDocTemplate = new CSingleDocTemplate(
		IDR_MAINFRAME,
		RUNTIME_CLASS(CLinkDoc),
		RUNTIME_CLASS(CMainFrame),       // main SDI frame window
		RUNTIME_CLASS(CLinkView));
	AddDocTemplate(pDocTemplate);

	// Parse command line for standard shell commands, DDE, file open
	CCommandLineInfo cmdInfo;
	ParseCommandLine(cmdInfo);

	// Dispatch commands specified on the command line
	if (!ProcessShellCommand(cmdInfo))
		return FALSE;


	// The one and only window has been initialized, so show and update it.
	m_pMainWnd->ShowWindow(SW_SHOW);
	m_pMainWnd->UpdateWindow();

	m_pMainWnd->SetWindowText(_T("war3连连看"));  // 设置标题


	theApp.hThread = ::CreateThread( NULL , 0 , Play_Sound , NULL , 0 ,NULL ) ;

	return TRUE;
}


void CLinkApp::PaintPicture(  CDC * pDC  )
{
	CBitmap bitmap ;
	bitmap.LoadBitmap( 191 + stage ) ;
	CDC dcCompatible ;
	dcCompatible.CreateCompatibleDC( pDC) ;

	dcCompatible.SelectObject( &bitmap ) ;

	HWND hwnd = GetActiveWindow(); 
	CRect rect ;
	GetClientRect( hwnd ,  &rect ) ;


	int i,j ;
	for( i= 0 ; i<leny ; ++i )
		for( j=0 ;j<lenx ; ++j )
		{
			if( PicArray[i][j].visible == true ) 
				pDC->BitBlt( theApp.margin + j*width, theApp.margin + i*width,width,width,&dcCompatible,0,PicArray[i][j].type*width,SRCCOPY ) ;
		}
}


/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About

class CAboutDlg : public CDialog
{
public:
	CAboutDlg();

// Dialog Data
	//{{AFX_DATA(CAboutDlg)
	enum { IDD = IDD_ABOUTBOX };
	//}}AFX_DATA

	// ClassWizard generated virtual function overrides
	//{{AFX_VIRTUAL(CAboutDlg)
	protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
	//}}AFX_VIRTUAL

// Implementation
protected:
	//{{AFX_MSG(CAboutDlg)
		// No message handlers
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
	//{{AFX_DATA_INIT(CAboutDlg)
	//}}AFX_DATA_INIT
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CAboutDlg)
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
	//{{AFX_MSG_MAP(CAboutDlg)
		// No message handlers
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

// App command to run the dialog
void CLinkApp::OnAppAbout()
{
	CAboutDlg aboutDlg;
	aboutDlg.DoModal();
}

/////////////////////////////////////////////////////////////////////////////
// CLinkApp message handlers