?? pictur~1.cpp
字號:
// PictureDlg.cpp : implementation file
//
//拼圖游戲。
//可以用9格或者16格來游戲,也可以自定義圖片,不過,一定要是BMP 文件。
//可以設定圖格的風格,游戲有計時。
#include "stdafx.h"
#include "Picture.h"
#include "PictureDlg.h"
#include "AboutDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CPictureDlg dialog
CPictureDlg::CPictureDlg(CWnd* pParent /*=NULL*/)
: CDialog(CPictureDlg::IDD, pParent)
{
IsLong=FALSE;
IsHelp=FALSE;
CanCount=FALSE;
count=0;
IsRnd=FALSE;
Easy=TRUE;//圖格數量
Advan=FALSE;//是否自定義
Style3d=FALSE;//圖格風格
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
x=y=0;
}
int static strPartDim[4]= {160, 260, 350, -1};//StatusBar
CPictureDlg::~CPictureDlg()
{
::DeleteObject(bitmap);
::DeleteObject(hbitmap);
if(pkDC) ::DeleteObject(pkDC);
::KillTimer(GetSafeHwnd(),10);
}
void CPictureDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CPictureDlg)
DDX_Control(pDX,IDC_IMAGE0,m_Image[0]);
DDX_Control(pDX,IDC_IMAGE1,m_Image[1]);
DDX_Control(pDX,IDC_IMAGE2,m_Image[2]);
DDX_Control(pDX,IDC_IMAGE3,m_Image[3]);
DDX_Control(pDX,IDC_IMAGE4,m_Image[4]);
DDX_Control(pDX,IDC_IMAGE5,m_Image[5]);
DDX_Control(pDX,IDC_IMAGE6,m_Image[6]);
DDX_Control(pDX,IDC_IMAGE7,m_Image[7]);
DDX_Control(pDX,IDC_IMAGE8,m_Image[8]);
DDX_Control(pDX,IDC_IMAGE9,m_Image[9]);
DDX_Control(pDX,IDC_IMAGE10,m_Image[10]);
DDX_Control(pDX,IDC_IMAGE11,m_Image[11]);
DDX_Control(pDX,IDC_IMAGE12,m_Image[12]);
DDX_Control(pDX,IDC_IMAGE13,m_Image[13]);
DDX_Control(pDX,IDC_IMAGE14,m_Image[14]);
DDX_Control(pDX,IDC_IMAGE15,m_Image[15]);
DDX_Control(pDX,IDC_PREVIEW,m_Preview);
DDX_Control(pDX,IDC_HIDE,m_Hide);
// NOTE: the ClassWizard will add DDX and DDV calls here
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CPictureDlg, CDialog)
//{{AFX_MSG_MAP(CPictureDlg)
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_WM_TIMER()
ON_BN_CLICKED(IDC_ENDHELP,OnEndHelp)
ON_BN_CLICKED(IDC_DLGABOUT,OnDlgAbout)
ON_BN_CLICKED(IDC_IMAGE0,OnImage0)
ON_BN_CLICKED(IDC_IMAGE1,OnImage1)
ON_BN_CLICKED(IDC_IMAGE2,OnImage2)
ON_BN_CLICKED(IDC_IMAGE3,OnImage3)
ON_BN_CLICKED(IDC_IMAGE4,OnImage4)
ON_BN_CLICKED(IDC_IMAGE5,OnImage5)
ON_BN_CLICKED(IDC_IMAGE6,OnImage6)
ON_BN_CLICKED(IDC_IMAGE7,OnImage7)
ON_BN_CLICKED(IDC_IMAGE8,OnImage8)
ON_BN_CLICKED(IDC_IMAGE9,OnImage9)
ON_BN_CLICKED(IDC_IMAGE10,OnImage10)
ON_BN_CLICKED(IDC_IMAGE11,OnImage11)
ON_BN_CLICKED(IDC_IMAGE12,OnImage12)
ON_BN_CLICKED(IDC_IMAGE13,OnImage13)
ON_BN_CLICKED(IDC_IMAGE14,OnImage14)
ON_BN_CLICKED(IDC_IMAGE15,OnImage15)
ON_BN_CLICKED(IDC_WIN,OnWin)
ON_BN_CLICKED(IDC_HIDE,OnHide)
ON_COMMAND(ID_EASY,OnEasy)
ON_COMMAND(ID_HARD,OnHard)
ON_COMMAND(ID_ADVAN,OnAdvan)
ON_COMMAND(ID_PICTURE1,OnPic1)
ON_COMMAND(ID_PICTURE2,OnPic2)
ON_COMMAND(ID_PICTURE3,OnPic3)
ON_COMMAND(ID_PICTURE4,OnPic4)
ON_COMMAND(ID_3D,On3D)
ON_COMMAND(ID_FLAT,OnFlat)
ON_COMMAND(ID_ABOUT,OnAbout)
ON_COMMAND(ID_EXIT,OnOK)
ON_COMMAND(ID_FORHELP,OnForHelp)
ON_COMMAND(ID_BEGIN,OnBegin)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CPictureDlg message handlers
BOOL CPictureDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// 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
srand((unsigned)time(NULL));
// TODO: Add extra initialization here
bitmap.LoadBitmap(IDB_BITMAP1);
pkDC=new CDC;
pMainMenu=GetMenu();
SetWindowPos(NULL,0,0,358,346,SWP_NOMOVE);
SetTimer(10,1000,NULL);
// TODO: Add extra initialization here
m_wndStatusBar.Create(WS_CHILD|WS_VISIBLE|CCS_BOTTOM|CCS_NODIVIDER,CRect(0,0,0,0),this,102);
m_wndStatusBar.SetParts(3,strPartDim);
m_wndStatusBar.SetText(TimeCon,1,0);
m_wndStatusBar.SetText("Computer74",2,0);
OnBegin();
return TRUE; // return TRUE unless you set the focus to a control
}
// 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.
CString CPictureDlg::IntToString(INT num)
{
char temp[10];
_itoa(num,temp,10);
return (CString)temp;
}
void CPictureDlg::OnTimer(UINT nIDEvent)
//Statusbar 計時
{
nIDEvent=10;
CString m_temp = "計時:";
if(CanCount==TRUE) count+=1;
TimeCon=IntToString(count);
TimeCon =m_temp+" "+TimeCon+" " "秒";
m_wndStatusBar.SetText(TimeCon,1,0);
}
void CPictureDlg::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();
SetImage();
}
if(pkDC) pkDC->DeleteDC();
}
// The system calls this to obtain the cursor to display while the user drags
// the minimized window.
HCURSOR CPictureDlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}
void CPictureDlg::OnImage0()
//單擊static控件
{
if(IsRnd)
MoveImage(0);
else Rnd();
if(IsWin()) CanCount=FALSE;
}
void CPictureDlg::OnImage1()
{
if(IsRnd)
MoveImage(1);
else Rnd();
if(IsWin()) CanCount=FALSE;
}
void CPictureDlg::OnImage2()
//單擊static控件
{
if(IsRnd)
MoveImage(2);
else Rnd();
IsWin();
}
void CPictureDlg::OnImage3()
{
if(IsRnd)
MoveImage(3);
else Rnd(); IsWin();
}
void CPictureDlg::OnImage4()
//單擊static控件
{
if(IsRnd)
MoveImage(4);
else Rnd();
if(IsWin()) CanCount=FALSE;
}
void CPictureDlg::OnImage5()
{
if(IsRnd)
MoveImage(5);
else Rnd();
if(IsWin()) CanCount=FALSE;
}
void CPictureDlg::OnImage6()
//單擊static控件
{
if(IsRnd)
MoveImage(6);
else Rnd();
if(IsWin()) CanCount=FALSE;
}
void CPictureDlg::OnImage7()
{
if(IsRnd)
MoveImage(7);
else Rnd();
if(IsWin()) CanCount=FALSE;
}
void CPictureDlg::OnImage8()
{
if(IsRnd)
MoveImage(8);
else Rnd();
if(IsWin()) CanCount=FALSE;
}
void CPictureDlg::OnImage9()
//單擊static控件
{
if(IsRnd)
MoveImage(9);
else Rnd();
if(IsWin()) CanCount=FALSE;
}
void CPictureDlg::OnImage10()
{
if(IsRnd)
MoveImage(10);
else Rnd();
if(IsWin()) CanCount=FALSE;
}
void CPictureDlg::OnImage11()
{
if(IsRnd)
MoveImage(11);
else Rnd();
if(IsWin()) CanCount=FALSE;
}
void CPictureDlg::OnImage12()
//單擊static控件
{
if(IsRnd)
MoveImage(12);
else Rnd();
if(IsWin()) CanCount=FALSE;
}
void CPictureDlg::OnImage13()
{
if(IsRnd)
MoveImage(13);
else Rnd();
if(IsWin()) CanCount=FALSE;
}
void CPictureDlg::OnImage14()
//單擊static控件
{
if(IsRnd)
MoveImage(14);
else Rnd();
if(IsWin()) CanCount=FALSE;
}
void CPictureDlg::OnImage15()
{
}
void CPictureDlg::SetPos()
//初始化Staic 控件的位置
{
BITMAP bm;
INT con,move;
if(Advan==FALSE)
{
bitmap.GetObject(sizeof(BITMAP),&bm);
Width=bm.bmWidth; Height=bm.bmHeight;
}
if(Easy)
{x=Width/3; y=Height/3; con=2;}
else if(!Easy)
{x=Width/4; y=Height/4; con=3;}
if(IsLong) move=70;
else
move=0;
for(int i=0;i<=con;i++)
{
m_Image[i].SetWindowPos(NULL,x*i+move,0,0,0,SWP_NOSIZE);
m_Image[i].SetWindowPos(NULL,0,0,x,y,SWP_NOMOVE);
}
for(int j=0;j<=con;j++)
{
m_Image[con+1+j].SetWindowPos(NULL,x*j+move,y,0,0,SWP_NOSIZE);
m_Image[con+1+j].SetWindowPos(NULL,0,0,x,y,SWP_NOMOVE);
}
for(int k=0;k<=con;k++)
{
m_Image[(con+1)*2+k].SetWindowPos(NULL,x*k+move,2*y,0,0,SWP_NOSIZE);
m_Image[(con+1)*2+k].SetWindowPos(NULL,0,0,x,y,SWP_NOMOVE);
}
if(!Easy)
for(int l=0;l<=3;l++)
{
m_Image[l+12].SetWindowPos(NULL,x*l+move,3*y,0,0,SWP_NOSIZE);
m_Image[l+12].SetWindowPos(NULL,0,0,x,y,SWP_NOMOVE);
CClientDC dc(&m_Image[l+12]);
}
}
void CPictureDlg::SetImage()
//把圖像COPY到Static控件
{
INT con;
HANDLE picture;
CRect rect(0,0,x,y);
if(Advan==TRUE) picture=hbitmap;
else if(Advan==FALSE) picture=bitmap;
if(Easy) con=2;
else if(!Easy) con=3;
for(int i=0;i<=con;i++)
{
CDC *pDC=new CDC;
CClientDC dc(&m_Image[i]);
pDC->CreateCompatibleDC(&dc);
pDC->SelectObject(picture);
dc.BitBlt(0,0,x,y,pDC,x*i,0,SRCCOPY);
if(Style3d) dc.DrawEdge(rect,EDGE_RAISED,BF_RECT);
else if(!Style3d) dc.Draw3dRect(rect,RGB(0,0,0,),RGB(0,0,0,));
delete pDC;
UpdateWindow();
}
for(int j=0;j<=con;j++)
{
CClientDC dc(&m_Image[con+1+j]);
CDC *pDC=new CDC;
pDC->CreateCompatibleDC(&dc);
pDC->SelectObject(picture);
dc.BitBlt(0,0,x,y,pDC,x*j,y,SRCCOPY);
if(Style3d) dc.DrawEdge(rect,EDGE_RAISED,BF_RECT);
else if(!Style3d) dc.Draw3dRect(rect,RGB(0,0,0,),RGB(0,0,0,));
delete pDC;
}
for(int k=0;k<=con;k++)
{
CClientDC dc(&m_Image[(con+1)*2+k]);
CDC *pDC=new CDC;
pDC->CreateCompatibleDC(&dc);
pDC->SelectObject(picture);
dc.BitBlt(0,0,x,y,pDC,x*k,2*y,SRCCOPY);
if(Style3d) dc.DrawEdge(rect,EDGE_RAISED,BF_RECT);
else if(!Style3d) dc.Draw3dRect(rect,RGB(0,0,0,),RGB(0,0,0,));
delete pDC;
}
if(!Easy)
for(int l=0;l<=3;l++)
{
CClientDC dc(&m_Image[l+12]);
CDC *pDC=new CDC;
pDC->CreateCompatibleDC(&dc);
pDC->SelectObject(picture);
dc.BitBlt(0,0,x,y,pDC,x*l,3*y,SRCCOPY);
if(Style3d) dc.DrawEdge(rect,EDGE_RAISED,BF_RECT);
else if(!Style3d) dc.Draw3dRect(rect,RGB(0,0,0,),RGB(0,0,0,));
delete pDC;
}
if(!IsRnd)
{
pSubMenu=pMainMenu->GetSubMenu(0);
pSubMenu->EnableMenuItem(ID_FORHELP,MF_DISABLED|MF_GRAYED);
}
}
void CPictureDlg::MoveImage(int num)
//用以移動圖格的函數
{
int xnum,ynum,level;
if(Easy) level=8;
else if(!Easy) level=15;
WINDOWPLACEMENT wpnum,wp15;
m_Image[level].GetWindowPlacement(&wp15);
m_Image[num].GetWindowPlacement(&wpnum);
xnum=wpnum.rcNormalPosition.left; ynum=wpnum.rcNormalPosition.top;
if(num!=level)
if(wpnum.rcNormalPosition.top==wp15.rcNormalPosition.top
&& wpnum.rcNormalPosition.left==wp15.rcNormalPosition.left-x)
{
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -