📄 picturedlg.cpp
字号:
m_Image[num].SetWindowPos(NULL,xnum+x,ynum,0,0,SWP_NOSIZE);
m_Image[level].SetWindowPos(NULL,xnum,ynum,0,0,SWP_NOSIZE);
}
if(wpnum.rcNormalPosition.top==wp15.rcNormalPosition.top
&& wpnum.rcNormalPosition.left==wp15.rcNormalPosition.left+x)
{
m_Image[num].SetWindowPos(NULL,xnum-x,ynum,0,0,SWP_NOSIZE);
m_Image[level].SetWindowPos(NULL,xnum,ynum,0,0,SWP_NOSIZE);
}
if(wpnum.rcNormalPosition.left==wp15.rcNormalPosition.left
&& wpnum.rcNormalPosition.top==wp15.rcNormalPosition.top+y)
{
m_Image[num].SetWindowPos(NULL,xnum,ynum-y,0,0,SWP_NOSIZE);
m_Image[level].SetWindowPos(NULL,xnum,ynum,0,0,SWP_NOSIZE);
}
if(wpnum.rcNormalPosition.left==wp15.rcNormalPosition.left
&& wpnum.rcNormalPosition.top==wp15.rcNormalPosition.top-y)
{
m_Image[num].SetWindowPos(NULL,xnum,ynum+y,0,0,SWP_NOSIZE);
m_Image[level].SetWindowPos(NULL,xnum,ynum,0,0,SWP_NOSIZE);
}
}
void CPictureDlg::OnEasy()
//菜单函数,Easy的话,就是9格,Hard 就是16格
{
pSubMenu=pMainMenu->GetSubMenu(0);
pSubMenu->CheckMenuItem(ID_HARD,MF_UNCHECKED);
pSubMenu->CheckMenuItem(ID_EASY,MF_CHECKED);
Easy=TRUE;IsRnd=FALSE;
count=0;
CanCount=FALSE;
SetPos();
IsWin();
m_wndStatusBar.SetText("加油!",0,0);
}
void CPictureDlg::OnHard()
//菜单函数,Easy的话,就是9格,Hard 就是16格
{
pSubMenu=pMainMenu->GetSubMenu(0);
pSubMenu->CheckMenuItem(ID_EASY,MF_UNCHECKED);
pSubMenu->CheckMenuItem(ID_HARD,MF_CHECKED);
Easy=FALSE;IsRnd=FALSE;
count=0;
CanCount=FALSE;
SetPos();
IsWin();
m_wndStatusBar.SetText("这个可是有点难度的!",0,0);
}
void CPictureDlg::OnAdvan()
//菜单函数,自定义图片
{
CFileDialog dlg(TRUE,NULL,NULL,NULL,"位图文件(*.bmp)|*.bmp");
INT Result=dlg.DoModal();
if(Result==IDOK)
{
CString name="(自定义): "+dlg.GetFileName();
count=0; CanCount=FALSE; IsRnd=FALSE; Advan=TRUE;
hbitmap=(HBITMAP)::LoadImage(NULL,dlg.GetFileName(),IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
BITMAP bm;
::GetObject(hbitmap,sizeof(BITMAP),&bm);
//横向的图片
if(bm.bmWidth>=bm.bmHeight)
{
hbitmap=(HBITMAP)::LoadImage(NULL,dlg.GetFileName(),IMAGE_BITMAP,350,280,LR_LOADFROMFILE);
Width=350; Height=280;
IsLong=FALSE;
}
//竖向的图片
else if(bm.bmWidth<bm.bmHeight)
{
hbitmap=(HBITMAP)::LoadImage(NULL,dlg.GetFileName(),IMAGE_BITMAP,200,310,LR_LOADFROMFILE);
Width=200; Height=280;
IsLong=TRUE;
}
SetPos();
IsWin();
m_wndStatusBar.SetText(name,0,0);
}
else if(Result==IDCANCEL) return;
}
void CPictureDlg::OnPic1()
//显示图片
{
OnRun(IDB_BITMAP1,ID_PICTURE1);
m_wndStatusBar.SetText("Duck(小鸭)",0,0);
}
void CPictureDlg::OnPic2()
//显示图片
{
OnRun(IDB_BITMAP2,ID_PICTURE2);
m_wndStatusBar.SetText("HelloKitty(My Love!)",0,0);
}
void CPictureDlg::OnPic3()
//显示图片
{
OnRun(IDB_BITMAP3,ID_PICTURE3);
m_wndStatusBar.SetText("咖啡猫",0,0);
}
void CPictureDlg::OnPic4()
//显示图片
{
OnRun(IDB_BITMAP4,ID_PICTURE4);
m_wndStatusBar.SetText("美丽的女孩(I Love)",0,0);
}
void CPictureDlg::On3D()
//菜单函数,3D风格
{
pSubMenu=pMainMenu->GetSubMenu(2);
pSubMenu->CheckMenuItem(ID_FLAT,MF_UNCHECKED);
pSubMenu->CheckMenuItem(ID_3D,MF_CHECKED);
Style3d=TRUE;
SetImage();
}
void CPictureDlg::OnFlat()
//平面风格
{
pSubMenu=pMainMenu->GetSubMenu(2);
pSubMenu->CheckMenuItem(ID_FLAT,MF_CHECKED);
pSubMenu->CheckMenuItem(ID_3D,MF_UNCHECKED);
Style3d=FALSE;
SetImage();
}
void CPictureDlg::OnAbout()
//菜单函数
{
AboutDlg dlg;
dlg.DoModal();
}
void CPictureDlg::OnBegin()
//菜单函数
{
IsRnd=FALSE;
CanCount=FALSE;
count=0;
SetPos();
IsWin();
m_wndStatusBar.SetText("加油!",0,0);
}
void CPictureDlg::OnForHelp()
//菜单函数,得到略缩图
{
ShowItem();
if(!pkDC) pkDC=new CDC;
if(pkDC) pkDC->DeleteDC();
SetPre();
}
UINT CPictureDlg::MapRand(UINT nMax)
//随机函数
{
int nRand=rand();
float fMap=(float)nMax/RAND_MAX;
float fRetVal=(float)nRand*fMap+0.5f;
return (UINT)fRetVal;
}
void CPictureDlg::Rnd()
//随机图格的位置
{
int xnum,ynum,level;
UINT rand;
if(Easy) level=8; //如果是9格
else if(!Easy) level=15; //如果是16格
WINDOWPLACEMENT wpnum,wp15;
for(int a=0;a<=600;a++)
{
rand=MapRand(4);
if(rand==1)
for(int b=0;b<=level-1;b++)
{
m_Image[level].GetWindowPlacement(&wp15);
m_Image[b].GetWindowPlacement(&wpnum);
xnum=wpnum.rcNormalPosition.left; ynum=wpnum.rcNormalPosition.top;
if(wpnum.rcNormalPosition.top==wp15.rcNormalPosition.top
&& wpnum.rcNormalPosition.left==wp15.rcNormalPosition.left-x)
{ m_Image[b].SetWindowPos(NULL,xnum+x,ynum,0,0,SWP_NOSIZE);
m_Image[level].SetWindowPos(NULL,xnum,ynum,0,0,SWP_NOSIZE);
}
}
if(rand==2)
for(int c=0;c<=level-1;c++)
{
m_Image[level].GetWindowPlacement(&wp15);
m_Image[c].GetWindowPlacement(&wpnum);
xnum=wpnum.rcNormalPosition.left; ynum=wpnum.rcNormalPosition.top;
if(wpnum.rcNormalPosition.top==wp15.rcNormalPosition.top
&& wpnum.rcNormalPosition.left==wp15.rcNormalPosition.left+x)
{ m_Image[c].SetWindowPos(NULL,xnum-x,ynum,0,0,SWP_NOSIZE);
m_Image[level].SetWindowPos(NULL,xnum,ynum,0,0,SWP_NOSIZE);
}
}
if(rand==3)
for(int d=0;d<=level-1;d++)
{
m_Image[level].GetWindowPlacement(&wp15);
m_Image[d].GetWindowPlacement(&wpnum);
xnum=wpnum.rcNormalPosition.left; ynum=wpnum.rcNormalPosition.top;
if(wpnum.rcNormalPosition.left==wp15.rcNormalPosition.left
&& wpnum.rcNormalPosition.top==wp15.rcNormalPosition.top+y)
{ m_Image[d].SetWindowPos(NULL,xnum,ynum-y,0,0,SWP_NOSIZE);
m_Image[level].SetWindowPos(NULL,xnum,ynum,0,0,SWP_NOSIZE);
}
}
if(rand==4)
for(int e=0;e<=level-1;e++)
{
m_Image[level].GetWindowPlacement(&wp15);
m_Image[e].GetWindowPlacement(&wpnum);
xnum=wpnum.rcNormalPosition.left; ynum=wpnum.rcNormalPosition.top;
if(wpnum.rcNormalPosition.left==wp15.rcNormalPosition.left
&& wpnum.rcNormalPosition.top==wp15.rcNormalPosition.top-y)
{ m_Image[e].SetWindowPos(NULL,xnum,ynum+y,0,0,SWP_NOSIZE);
m_Image[level].SetWindowPos(NULL,xnum,ynum,0,0,SWP_NOSIZE);
}
}
}
if(Easy) m_Image[8].ShowWindow(SW_HIDE);
else if(!Easy)
{
m_Image[8].ShowWindow(SW_SHOW);
m_Image[15].ShowWindow(SW_HIDE);
}
pSubMenu=pMainMenu->GetSubMenu(0);
pSubMenu->EnableMenuItem(ID_FORHELP,MF_ENABLED);
IsRnd=TRUE;
CanCount=TRUE;
}
BOOL CPictureDlg::IsWin()
//判断是否完成的函数
{
WINDOWPLACEMENT wp;
INT con,move;
INT win=0;
if(IsLong) move=70;
else move=0;
if(Easy==TRUE) con=2;
else if(!Easy) con=3;
for(int a=0;a<=con;a++)
{
m_Image[a].GetWindowPlacement(&wp);
if(wp.rcNormalPosition.top==0 && wp.rcNormalPosition.left
==a*x+move)
win+=1;
}
for(int b=0;b<=con;b++)
{
m_Image[con+1+b].GetWindowPlacement(&wp);
if(wp.rcNormalPosition.top==y && wp.rcNormalPosition.left
==x*b+move)
win+=1;
}
if(win<3) return FALSE;
for(int c=0;c<=con;c++)
{
m_Image[2*(con+1)+c].GetWindowPlacement(&wp);
if(wp.rcNormalPosition.top==2*y && wp.rcNormalPosition.left
==x*c+move)
win+=1;
}
if(win<5) return FALSE;
if(!Easy)
for(int d=0;d<=3;d++)
{
m_Image[12+d].GetWindowPlacement(&wp);
if(wp.rcNormalPosition.top==3*y && wp.rcNormalPosition.left
==x*d+move)
win+=1;
}
if(Easy==TRUE && win==9) //判断是否完成
{
m_Image[8].ShowWindow(SW_SHOW);
m_wndStatusBar.SetText("祝贺你,拼出来了!",0,0);
return TRUE;
}
else if(!Easy && win==16) //判断是否完成
{
m_Image[8].ShowWindow(SW_SHOW);
m_Image[15].ShowWindow(SW_SHOW);
m_wndStatusBar.SetText("祝贺你,拼出来了!",0,0);
return TRUE;
}
else return FALSE;
}
void CPictureDlg::OnEndHelp()
//重新显示图格
{
ShowItem();
::DeleteObject(pkDC);
}
void CPictureDlg::OnDlgAbout()
{
OnAbout();
}
void CPictureDlg::OnWin()
//快速完成
{
OnEndHelp();
SetPos();
IsWin();
MessageBox("马上完成!!!","Hi~ ~!",MB_OK|MB_ICONINFORMATION);
}
void CPictureDlg::SetPre()
//生成略缩图
{
BITMAP bm;
CClientDC dc(&m_Preview);
pkDC->CreateCompatibleDC(&dc);
if(!Advan)
{
m_Preview.SetWindowPos(NULL,0,0,136,112,SWP_NOMOVE);
pkDC->SelectObject(bitmap);
bitmap.GetObject(sizeof(BITMAP),&bm);
dc.StretchBlt(0,0,136,112,pkDC,0,0,
bm.bmWidth,bm.bmHeight,SRCCOPY);
}
else if(Advan)
{
INT wei,hei;
if(IsLong)
{
m_Preview.SetWindowPos(NULL,0,0,85,120,SWP_NOMOVE);
wei=85; hei=120;
}
else
{
wei=136; hei=112;
m_Preview.SetWindowPos(NULL,0,0,136,112,SWP_NOMOVE);
}
::GetObject(hbitmap,sizeof(BITMAP),&bm);
pkDC->SelectObject(hbitmap);
dc.StretchBlt(0,0,wei,hei,pkDC,0,0,
bm.bmWidth,bm.bmHeight,SRCCOPY);
}
}
void CPictureDlg::OnHide()
//出现秘密图画
{
OnEndHelp();
OnRun(IDB_BITMAP5,NULL);
m_wndStatusBar.SetText("秘密图画!!",0,0);
}
void CPictureDlg::ShowItem()
//显示帮助对话框
{
INT count;
if(Easy) count=7;
else count=14;
if(!IsHelp)
{
GetDlgItem(IDC_ENDHELP)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_DLGABOUT)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_PREVIEW)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_WIN)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_HIDE)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_RECT)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_VERSION)->ShowWindow(SW_SHOW);
for(int i=0;i<=count;i++)
m_Image[i].ShowWindow(SW_HIDE);
pSubMenu=pMainMenu->GetSubMenu(0);
pSubMenu->EnableMenuItem(ID_BEGIN,MF_DISABLED|MF_GRAYED);
pSubMenu->EnableMenuItem(ID_EASY,MF_DISABLED|MF_GRAYED);
pSubMenu->EnableMenuItem(ID_HARD,MF_DISABLED|MF_GRAYED);
pSubMenu->EnableMenuItem(ID_FORHELP,MF_DISABLED|MF_GRAYED);
pSubMenu=pMainMenu->GetSubMenu(1);
pSubMenu->EnableMenuItem(ID_PICTURE1,MF_DISABLED|MF_GRAYED);
pSubMenu->EnableMenuItem(ID_PICTURE2,MF_DISABLED|MF_GRAYED);
pSubMenu->EnableMenuItem(ID_PICTURE3,MF_DISABLED|MF_GRAYED);
pSubMenu->EnableMenuItem(ID_PICTURE4,MF_DISABLED|MF_GRAYED);
pSubMenu->EnableMenuItem(ID_ADVAN,MF_DISABLED|MF_GRAYED);
IsHelp=TRUE;
}
else if(IsHelp)
{
GetDlgItem(IDC_ENDHELP)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_DLGABOUT)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_PREVIEW)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_WIN)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_HIDE)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_RECT)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_VERSION)->ShowWindow(SW_HIDE);
for(int i=0;i<=count;i++)
m_Image[i].ShowWindow(SW_SHOW);
pSubMenu=pMainMenu->GetSubMenu(0);
pSubMenu->EnableMenuItem(ID_BEGIN,MF_ENABLED);
pSubMenu->EnableMenuItem(ID_EASY,MF_ENABLED);
pSubMenu->EnableMenuItem(ID_HARD,MF_ENABLED);
pSubMenu->EnableMenuItem(ID_FORHELP,MF_ENABLED);
pSubMenu=pMainMenu->GetSubMenu(1);
pSubMenu->EnableMenuItem(ID_PICTURE1,MF_ENABLED);
pSubMenu->EnableMenuItem(ID_PICTURE2,MF_ENABLED);
pSubMenu->EnableMenuItem(ID_PICTURE3,MF_ENABLED);
pSubMenu->EnableMenuItem(ID_PICTURE4,MF_ENABLED);
pSubMenu->EnableMenuItem(ID_ADVAN,MF_ENABLED);
IsHelp=FALSE;
}
}
void CPictureDlg::OnRun(UINT nBitmapID,UINT nMenuID)
//改变菜单、初始化的函数
{
pSubMenu=pMainMenu->GetSubMenu(1);
pSubMenu->CheckMenuItem(ID_PICTURE1,MF_UNCHECKED);
pSubMenu->CheckMenuItem(ID_PICTURE2,MF_UNCHECKED);
pSubMenu->CheckMenuItem(ID_PICTURE3,MF_UNCHECKED);
pSubMenu->CheckMenuItem(ID_PICTURE4,MF_UNCHECKED);
pSubMenu->CheckMenuItem(ID_ADVAN,MF_UNCHECKED);
pSubMenu->CheckMenuItem(nMenuID,MF_CHECKED);
count=0;
IsLong=FALSE;
CanCount=FALSE;
IsRnd=FALSE;
Advan=FALSE;
bitmap.DeleteObject();
bitmap.LoadBitmap(nBitmapID);
SetPos();
SetImage();
IsWin();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -