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

📄 cmajianggamedlg.cpp

📁 一个完整的麻将游戏原代码,可以学到很多东西
💻 CPP
📖 第 1 页 / 共 4 页
字号:
// CMajiangGameDlg.cpp : implementation file
//

#include "stdafx.h"
#include "CMajiangGame.h"
#include "CMajiangGameDlg.h"
#include "Picture.h"
#include "MajiangHufa.h"

#include "ThinkPklang.h"

#include <mmsystem.h>

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

/////////////////////////////////////////////////////////////////////////////
// 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)
	//}}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()

/////////////////////////////////////////////////////////////////////////////
// CCMajiangGameDlg dialog

CCMajiangGameDlg::CCMajiangGameDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CCMajiangGameDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CCMajiangGameDlg)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
	// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
	m_hCursor = AfxGetApp()->LoadCursor (IDC_CURSORHAND);
	m_hCursorDown = AfxGetApp()->LoadCursor (IDC_CURSORHAND_IN);
	m_bHandDown=FALSE;
	m_bTitle=TRUE;
	m_nDelay=0;
	m_nMouseOnTitle=-1;
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CCMajiangGameDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CCMajiangGameDlg)
		// NOTE: the ClassWizard will add DDX and DDV calls here
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CCMajiangGameDlg, CDialog)
	//{{AFX_MSG_MAP(CCMajiangGameDlg)
	ON_WM_SYSCOMMAND()
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	ON_WM_ERASEBKGND()
	ON_BN_CLICKED(IDC_BUTTON1, OnButton1)
	ON_BN_CLICKED(IDC_BUTTON2, OnButton2)
	ON_WM_MOUSEMOVE()
	ON_WM_LBUTTONUP()
	ON_WM_SETCURSOR()
	ON_WM_TIMER()
	ON_WM_LBUTTONDOWN()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CCMajiangGameDlg message handlers

BOOL CCMajiangGameDlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	// Add "About..." menu item to system menu.

	// IDM_ABOUTBOX must be in the system command range.
	ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
	ASSERT(IDM_ABOUTBOX < 0xF000);

	CMenu* pSysMenu = GetSystemMenu(FALSE);
	if (pSysMenu != NULL)
	{
		CString strAboutMenu;
		strAboutMenu.LoadString(IDS_ABOUTBOX);
		if (!strAboutMenu.IsEmpty())
		{
		//	pSysMenu->AppendMenu(MF_SEPARATOR);
			pSysMenu->InsertMenu(0,MF_STRING, IDM_ABOUTBOX, strAboutMenu);
		//	pSysMenu->InsertMenu(0,MF_SEPARATOR);
		}
	}

	// Set the icon for this dialog.  The framework does this automatically
	//  when the application's main window is not a dialog
	SetIcon(m_hIcon, TRUE);			// Set big icon
	SetIcon(m_hIcon, FALSE);		// Set small icon

	CRect rt1,rt2;
	GetWindowRect(rt1);
	GetClientRect(rt2);
	int cx=rt1.bottom-rt1.top-rt2.bottom;
	int cy=rt1.right-rt1.left-rt2.right;
	SetWindowText("PKLANG麻将");
	MoveWindow(0,0,800+cy,600+cx);
	CenterWindow();

	/////////////

	m_dcBuffer.CreateCompatibleDC(GetDC());
	m_dcMj.CreateCompatibleDC(GetDC());
	m_dcState.CreateCompatibleDC(GetDC());
	m_dcBG.CreateCompatibleDC(GetDC());
	m_dcMem.CreateCompatibleDC(GetDC());
	CBitmap bm;
	CPicture pic,pic2,pic3;
	CSize sz;
	pic.Load("images\\Mj.jpg");
	sz=pic.GetImageSize();
	bm.CreateCompatibleBitmap(GetDC(),sz.cx,sz.cy);
	m_dcMj.SelectObject(&bm);
	pic.Render(&m_dcMj);
	bm.DeleteObject();

	bm.CreateCompatibleBitmap(GetDC(),800,600);
	m_dcBG.SelectObject(&bm);
	pic2.Load("images\\bg.jpg");
	pic2.Render(&m_dcBG);

	bm.DeleteObject();

	bm.CreateCompatibleBitmap(GetDC(),800,600);
	m_dcMem.SelectObject(&bm);

	bm.DeleteObject();

	bm.CreateCompatibleBitmap(GetDC(),140,260);
	m_dcState.SelectObject(&bm);
	pic3.Load("images\\state.jpg");
	pic3.Render(&m_dcState);

	//create dc buffer
	bm.DeleteObject();
	bm.CreateCompatibleBitmap(GetDC(),800,600);
	m_dcBuffer.SelectObject(&bm);

	///////////////Title  
	m_rtTitle[0].SetRect(412,210,724,264);
	m_rtTitle[1].SetRect(412,280,724,334);
	m_rtTitle[2].SetRect(412,350,724,404);
	m_rtTitle[3].SetRect(536,422,620,506);
	
	///////////mingan rect
	m_rtMingan[0].SetRect(347,7,480,187);
	m_rtMingan[1].SetRect(280,188,550,270);
	m_rtMingan[2].SetRect(280,271,550,355);

	//restart button
	m_rtBtRestart.SetRect(230,420,230+362,420+90);

	//////////////////////////
	srand(time(NULL));

	

	::sndPlaySound("sound\\g_Title.wav",SND_ASYNC|SND_NODEFAULT);
	// TODO: Add extra initialization here
	return TRUE;  // return TRUE  unless you set the focus to a control
}

void CCMajiangGameDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
	if ((nID & 0xFFF0) == IDM_ABOUTBOX)
	{
		CAboutDlg dlgAbout;
		dlgAbout.DoModal();
	}
	else
	{
		CDialog::OnSysCommand(nID, lParam);
	}
}

// If you add a minimize button to your dialog, you will need the code below
//  to draw the icon.  For MFC applications using the document/view model,
//  this is automatically done for you by the framework.

void CCMajiangGameDlg::OnPaint() 
{
	if (IsIconic())
	{
		CPaintDC dc(this); // device context for painting

		SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

		// Center icon in client rectangle
		int cxIcon = GetSystemMetrics(SM_CXICON);
		int cyIcon = GetSystemMetrics(SM_CYICON);
		CRect rect;
		GetClientRect(&rect);
		int x = (rect.Width() - cxIcon + 1) / 2;
		int y = (rect.Height() - cyIcon + 1) / 2;

		// Draw the icon
		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
		CDialog::OnPaint();
		if( m_bTitle )
		{
			CClientDC dc(this);
			CPicture pic;
			pic.Load("images\\title.jpg");
			pic.Render(&dc);

		}
		else
			UpdateFrame();
	}
}

// The system calls this to obtain the cursor to display while the user drags
//  the minimized window.
HCURSOR CCMajiangGameDlg::OnQueryDragIcon()
{
	return (HCURSOR) m_hIcon;
}

void CCMajiangGameDlg::OnOK() 
{
	// TODO: Add extra validation here
	
//	CDialog::OnOK();
}

void CCMajiangGameDlg::OnCancel() 
{
	// TODO: Add extra cleanup here
	
	CDialog::OnCancel();
}

BOOL CCMajiangGameDlg::OnEraseBkgnd(CDC* pDC) 
{
	// TODO: Add your message handler code here and/or call default
	
//	pDC->BitBlt(0,0,800,600,&m_dcBG,0,0,SRCCOPY);
	return TRUE;
	return CDialog::OnEraseBkgnd(pDC);
}

void CCMajiangGameDlg::UpdateFrame()
{
	CClientDC dc(this);
	dc.BitBlt(0,0,800,600,&m_dcMem,0,0,SRCCOPY);
}
void CCMajiangGameDlg::DrawPai()
{
	int i;

	m_dcMem.BitBlt(95,505,39+17*39,65,&m_dcBG,95,505,SRCCOPY);
	m_dcMem.BitBlt(90,356, 18*31,48,&m_dcBG,90,356,SRCCOPY);

	for( i=0;i<m_nStartPosUser;i++ )//已经固定了的
		m_dcMem.BitBlt(95+i*39,518, 39,65,&m_dcMj,m_nMjUser[i]*39,64,SRCCOPY);

	for( i=m_nStartPosUser;i<16;i++ )//不是经固定了的
	{
		if( m_bOver )
			m_dcMem.BitBlt(95+i*39,505, 39,65,&m_dcMj,m_nMjUser[i]*39,64,SRCCOPY);
		else
			m_dcMem.BitBlt(95+i*39,505, 39,65,&m_dcMj,m_nMjUser[i]*39,1,SRCCOPY);
	}

	if( m_nChupaiUser!=-1 )//是否有出牌位置的
	{
		if( m_bOver )//正常牌
			m_dcMem.BitBlt(725,505, 39,65,&m_dcMj,m_nChupaiUser*39,64,SRCCOPY);
		else//倒牌
			m_dcMem.BitBlt(725,505, 39,65,&m_dcMj,m_nChupaiUser*39,1,SRCCOPY);
	}
	if( m_nChupaiComputer!=-1 )//电脑是否有出牌位置的
	{
		if( m_bOver )//正常牌
			m_dcMem.BitBlt(90,356, 31,48,&m_dcMj,m_nChupaiComputer*31,176,SRCCOPY);
		else//倒牌
			m_dcMem.BitBlt(90,356, 31,48,&m_dcMj,35*31,129,SRCCOPY);
		
	}


	if( m_nChupaiComputer==-1 )
	for( i=0;i<m_nOutPaiComputerNumber;i++ )//画电脑出了牌
		m_dcMem.BitBlt(647-i*31,422, 31,48,&m_dcMj,m_nOutPaiComputer[i]*31,176,SRCCOPY);

	for( i=0;i<18;i++ )     //吃碰杠的牌红色显示
	{
		if( m_bCheckComputer[i] ) 
			SetTrans(i,FALSE);
	}


	for( i=0;i<m_nOutPaiUserNumber;i++ )//画玩家出了牌
		m_dcMem.BitBlt(120+i*31,456, 31,48,&m_dcMj,m_nOutPaiUser[i]*31,129,SRCCOPY);

	for( i=0;i<18;i++ )     //吃碰杠的牌红色显示
	{
		if( m_bCheckUser[i] ) 
			SetTrans(i,TRUE);
	}

	//////////////电脑牌面
	for( i=0;i<m_nStartPosComputer;i++ )//已经固定了的
			m_dcMem.BitBlt(135+(15-i)*31,366, 31,48,&m_dcMj,m_nMjComputer[i]*31,176,SRCCOPY);

	for( i=m_nStartPosComputer;i<16;i++ )//画电脑牌
	{
		if( m_bOver )
			m_dcMem.BitBlt(135+(15-i)*31,356, 31,48,&m_dcMj,m_nMjComputer[i]*31,176,SRCCOPY);
		else
			m_dcMem.BitBlt(135+(15-i)*31,356, 31,48,&m_dcMj,35*31,129,SRCCOPY);
	}

	for( i=0;i<5;i++ )//画有杠的
		if( m_nGangUser[i]!=0 )
		{
			if( m_nGangUser[i]>0 )
			{
				for( int j=0;j<3;j++ )
					m_dcMem.BitBlt(95+(i*3+j)*39,515, 39,65,&m_dcMj,34*39,64,SRCCOPY);
				m_dcMem.BitBlt(95+(i*3+1)*39,500, 39,65,&m_dcMj,m_nMjUser[i*3]*39,64,SRCCOPY);
			}
			else
				m_dcMem.BitBlt(95+(i*3+1)*39,500, 39,65,&m_dcMj,m_nMjUser[i*3]*39,64,SRCCOPY);
		}


}

void CCMajiangGameDlg::ResetMj()
{
	int i,j;
	for( i=0;i<34;i++ )
		for( j=0;j<4;j++ )
		{
			m_nPai[i*4+j]=i;
			m_bSelect[i*4+j]=FALSE;
		}
	int rnd;
	for( i=0;i<16;i++ )
	{
		rnd=GetRndMj();
		m_nMjUser[i]=rnd;
		rnd=GetRndMj();
		m_nMjComputer[i]=rnd;	
	}
	for( i=0;i<5;i++ )
	{
		m_nGangUser[i]=0;
		m_nGangComputer[i]=0;
	}


	if( rand()%10==0 )
		Damanguan(TRUE);
	if( rand()%5==0 )
		Damanguan(FALSE);

/*	int kkk[16]={1,1,1,3,4,5,16,16,29,29,11,12,13,20,21,22};
	for( i=0;i<16;i++ )
		m_nMjComputer[i]=kkk[i];	
	
	
	m_nMjUser[0]=8;
	m_nMjUser[1]=18;
	m_nMjUser[2]=20;
	m_nMjUser[3]=4;
	m_nMjUser[4]=6;//
	m_nMjUser[5]=7;
	m_nMjUser[9]=m_nMjUser[10];
	m_nMjUser[13]=m_nMjUser[14]=m_nMjUser[15];
*/
	m_nChupaiUser=-1;//GetRndMj();
	m_nChupaiComputer=-1;
	m_nMouseOnPai=-1;
	m_nOutPaiUserNumber=0;
	m_nOutPaiComputerNumber=0;


	m_nStartPosUser=0;
	m_nStartPosComputer=0;
	m_bEat=m_bPeng=m_bGang=m_bHu=FALSE;
	m_nEatTeam=0;
	m_bOver=FALSE;
	m_bZimo=FALSE;
	m_bOnBtRestart=FALSE;
	for( i=0;i<18;i++ )
	{
		m_bCheckUser[i]=FALSE; 
		m_bCheckComputer[i]=FALSE; 
	}

	SetTimer(TIME_DELAY,1000,NULL);

	m_arrHupai.RemoveAll();

	CClientDC dc(this);
	m_dcMem.BitBlt(0,0,800,600,&m_dcBG,0,0,SRCCOPY);

	dc.BitBlt(0,0,800,600,&m_dcMem,0,0,SRCCOPY);
	for( i=0;i<4;i++ )
	{
		PlayChessSound(S_MOU,FALSE,FALSE);
		for( j=0;j<4;j++ )
		{
			m_dcMem.BitBlt(95+(i*4+j)*39,505, 39,65,&m_dcMj,m_nMjUser[i*4+j]*39,1,SRCCOPY);
			m_dcMem.BitBlt(135+(i*4+j)*31,356, 31,48,&m_dcMj,35*31,129,SRCCOPY);
		}
		UpdateFrame();
		Sleep(300);
	}

//	DrawPai();
	PlayChessSound(S_DAO,FALSE,FALSE);
	Sleep(500);
	for( i=0;i<16;i++ )
		m_dcMem.BitBlt(95+i*39,505, 39,65,&m_dcMj,42*39,1,SRCCOPY);

	dc.BitBlt(0,0,800,600,&m_dcMem,0,0,SRCCOPY);

	PlayChessSound(S_DAO,FALSE,FALSE);
	Sleep(500);
	SortMj(m_nMjUser);
	SortMj(m_nMjComputer);

	CheckHupai();
	CheckComputerHupai();
	DrawPai();
	dc.BitBlt(0,0,800,600,&m_dcMem,0,0,SRCCOPY);


	//取得电脑最佳分值
	CThinkPklang bb;
	int a[17];
	for(i=0;i<16;i++)
		a[i]=m_nMjComputer[i];
	bb.SetMjPaiArray(a,16);
	bb.Think();
	m_nComputerGoodScore=bb.GetMaxScore();	
		
}

int CCMajiangGameDlg::GetRndMj()
{

	CUIntArray ar;
	for( int i=0;i<136;i++ )
		if( !m_bSelect[i] )
			ar.Add(i);
	if( !ar.GetSize() )return -1;
	int ret=ar.GetAt( rand()%ar.GetSize() );
	m_bSelect[ret]=TRUE;
	return  m_nPai[ret];


}
BOOL CCMajiangGameDlg::GetFixMj(int pai)
{

	CUIntArray ar;
	BOOL bGet=FALSE;
	for( int i=0;i<136;i++ )
		if( !m_bSelect[i] &&  m_nPai[i]==pai )
		{
			m_bSelect[i]=TRUE;
			bGet=TRUE;
			break;
		}
	
	return  bGet;


}

void CCMajiangGameDlg::SortMj(int *who,int start,int end)
{
	int i,j,k,t;
	for( i = start ; i < end-1 ; i++ )
	{
		for( k = i ,j = i+1 ; j <end ; j++ )
            if( who[k] > who[j] )
				k = j;
		if( k != i )
		{
			t =  who[i];
			who[i]=who[k];
			who[k]= t;
		}
	}


}

void CCMajiangGameDlg::OnButton1() 
{
	// TODO: Add your control notification handler code here



	CString str,str1;

	CString s="门清自摸";
	int k=5;
	str.Format("%-20s%d台",s,k);

		AfxMessageBox(str);

/*
//	if( m_nChupaiUser==-1 )return;
	int a[17]={1,2,2,3,3,4,14,16,15,22,23,24,30,30,30,9,9};
//	int a[17]={5,5,6,11,12,15,15,16,16,18,19,20,24,25,30,30,3};
	int i;
	CThinkPklang bb;
	
//	for(i=m_nStartPosUser;i<14;i++)
//		a[i-m_nStartPosUser]=a[i];
//	a[13]=m_nChupaiUser;
	bb.SetMjPaiArray(a,17);


//	DWORD t=timeGetTime();
	bb.Think();

	int aa[15];
	bb.GetHupaiTeam(aa);


	CString str;
	str.Format("%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d",aa[0],aa[1],aa[2],aa[3],aa[4],aa[5],aa[6],aa[7],aa[8],aa[9],aa[10],aa[11],aa[12],aa[13],aa[14]);
	MessageBox(str);
*/
//	dc.BitBlt(0,0,39,65,&m_dcMj,bb.GetMaxScore()*39,64,SRCCOPY);
}

void CCMajiangGameDlg::OnButton2() 
{
	// TODO: Add your control notification handler code here

	ResetMj();
	UpdateFrame();
	
}

void CCMajiangGameDlg::OnMouseMove(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	CDialog::OnMouseMove(nFlags, point);
	
	if( m_bTitle )
	{
		MouseMoveOnTitle(point);
		return;
	}


	if( m_bOver )
	{
		if( m_rtBtRestart.PtInRect(point ) )
		{
			if( !m_bOnBtRestart )
			{
				m_bOnBtRestart=TRUE;
				CPicture pic;
				pic.Load("images\\start2.jpg");
				pic.Render(&m_dcMem,m_rtBtRestart);
				UpdateFrame();
				PlayChessSound(S_STATE,TRUE,FALSE);
			}
		}
		else
		{
			if( m_bOnBtRestart )
			{
				m_bOnBtRestart=FALSE;
				CPicture pic;
				pic.Load("images\\start1.jpg");
				pic.Render(&m_dcMem,m_rtBtRestart);
				UpdateFrame();
			}
		}
		return;
	}
	
	BOOL bFind=FALSE;
	if( m_bEat )
	{
		CRect rt(725,300,725+65,40+300);
		if( rt.PtInRect(point) )
		{
			if( m_nMouseOnPai==BUTTON_EAT )return;
			else
			{
			/*	if( m_nMouseOnPai>=BUTTON_EAT )
				{
					if( m_nMouseOnPai==BUTTON_HU && m_bZimo )
						m_dcMem.BitBlt(725,300+50*(m_nMouseOnPai-100),65,40,&m_dcState,1,53*4+1,SRCCOPY);
					else
						m_dcMem.BitBlt(725,300+50*(m_nMouseOnPai-100),65,40,&m_dcState,1,53*(m_nMouseOnPai-100)+1,SRCCOPY);
					
				}	
			*/		
				m_nMouseOnPai=BUTTON_EAT;
				m_dcMem.BitBlt(725,300,65,40,&m_dcState,68,1,SRCCOPY);
				UpdateFrame();
				bFind=TRUE;
				PlayChessSound(S_STATE,TRUE,FALSE);
			}

		}


	}
	if( m_bPeng )
	{
		CRect rt(725,300+50,725+65,40+300+50);
		if( rt.PtInRect(point) )
		{
			if( m_nMouseOnPai==BUTTON_PENG )return;
			else
			{
			/*	if( m_nMouseOnPai>=BUTTON_EAT )
				{
					if( m_nMouseOnPai==BUTTON_HU && m_bZimo )
						m_dcMem.BitBlt(725,300+50*(m_nMouseOnPai-100),65,40,&m_dcState,1,53*4+1,SRCCOPY);
					else
						m_dcMem.BitBlt(725,300+50*(m_nMouseOnPai-100),65,40,&m_dcState,1,53*(m_nMouseOnPai-100)+1,SRCCOPY);

				}	
			*/		
				m_nMouseOnPai=BUTTON_PENG;
				m_dcMem.BitBlt(725,300+50*1,65,40,&m_dcState,68,1+53*1,SRCCOPY);
				UpdateFrame();
				bFind=TRUE;
				PlayChessSound(S_STATE,TRUE,FALSE);
			}

		}


	}
	if( m_bGang )
	{
		CRect rt(725,300+50*2,725+65,40+300+50*2);
		if( rt.PtInRect(point) )
		{
			if( m_nMouseOnPai==BUTTON_GANG )return;
			else
			{
			/*	if( m_nMouseOnPai>=BUTTON_EAT)
				{
					if( m_nMouseOnPai==BUTTON_HU && m_bZimo )
						m_dcMem.BitBlt(725,300+50*(m_nMouseOnPai-100),65,40,&m_dcState,1,53*4+1,SRCCOPY);
					else
						m_dcMem.BitBlt(725,300+50*(m_nMouseOnPai-100),65,40,&m_dcState,1,53*(m_nMouseOnPai-100)+1,SRCCOPY);

				}	
				*/	
				m_nMouseOnPai=BUTTON_GANG;
				m_dcMem.BitBlt(725,300+50*2,65,40,&m_dcState,68,1+53*2,SRCCOPY);
				UpdateFrame();
				bFind=TRUE;
				PlayChessSound(S_STATE,TRUE,FALSE);
			}
	}


	}
	if( m_bHu )
	{
		CRect rt(725,300+50*3,725+65,40+300+50*3);
		if( rt.PtInRect(point) )
		{
			if( m_nMouseOnPai==BUTTON_HU )return;
			else
			{

⌨️ 快捷键说明

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