dfs_service_青島理工大學(xué)_第1頁
dfs_service_青島理工大學(xué)_第2頁
dfs_service_青島理工大學(xué)_第3頁
dfs_service_青島理工大學(xué)_第4頁
dfs_service_青島理工大學(xué)_第5頁
已閱讀5頁,還剩55頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、青島理工大學(xué)設(shè)計名稱: C+面向?qū)ο蟪绦蛟O(shè)計 設(shè)計題目: MFC開發(fā)拼圖游戲項目設(shè)計 學(xué)生學(xué)號: 201107171 專業(yè)班級: 2012級網(wǎng)絡(luò)工程二班 學(xué)生姓名: 熊峰 指導(dǎo)教師: 任鳳華 課題工作時間: 2014年6月 目 錄目 錄I摘 要IIAbstractIII第一章 緒論- -1.1引言- -1.1.1課題背景- -1.1.2課題意義- -1.1.3主要要求- -1.1.4理論依據(jù)與工作內(nèi)容- -第二章 設(shè)計方案論述-2.1項目方案論述- -第三章 詳細(xì)設(shè)計- -3.1 詳細(xì)設(shè)計過程(包含關(guān)鍵代碼及截圖)- -3.1.1 創(chuàng)建初始界面- -3.1.2 位圖的讀入和顯示- -3.1.3

2、 用(Picture)Static控件顯示位圖- -第四章 設(shè)計結(jié)果及分析- -4.1 程序測試- -總 結(jié)- -致 謝- - 摘 要 拼圖游戲是一種有趣好玩的益智游戲,其核心規(guī)則是將一張整圖分成N小塊,隨機(jī)打亂,讓用戶拼回原圖,根據(jù)用戶所花費的時間和步數(shù)的多少來評價其玩游戲的水平?,F(xiàn)在通過已學(xué)的MFC Windows應(yīng)用程序設(shè)計知識,開發(fā)一個MFC應(yīng)用程序,該程序提供兩種游戲模式:簡單和困難。在程序中已經(jīng)加入幾副圖片供用戶娛樂。此外,它還允許用戶自行添加圖片。 運用的知識點主要包括對話框和控件的應(yīng)用、文檔串行化和打印技術(shù)、Visual C+位圖操作以及綜合應(yīng)用各種可視化元素和交互技術(shù)。整個項

3、目完成時將得到一個具有把圖片隨機(jī)分割再由用戶拼接的游戲程序。當(dāng)拼圖成功,程序?qū)⒃跔顟B(tài)欄給出提示信息和所花費的時間,用戶可以選擇另外一幅圖片重新開始游戲或者選擇退出。 第一章 緒論1.1引言1.1.1課題背景隨著IT行業(yè)的迅猛發(fā)展,計算機(jī)應(yīng)用開始由數(shù)據(jù)、事物處理轉(zhuǎn)向娛樂,這樣就為電腦游戲的產(chǎn)生提供一個良好的基礎(chǔ)。例如現(xiàn)在有不少的網(wǎng)絡(luò)游戲,但更多的是單機(jī)小游戲。拼圖游戲就是其中一種。所謂拼圖游戲是指將一張完整的圖分成N小塊,隨機(jī)打亂,讓用戶拼回原圖,根據(jù)用戶所花費的時間和步數(shù)的多少來評價其玩游戲的水平的一種游戲。這樣一個益智游戲可以放松用戶繃緊的神經(jīng),鍛煉用戶的思維能力與邏輯能力。1.1.2課題意

4、義通過開發(fā)該拼圖游戲,熟練掌握對話框和常用控件的應(yīng)用,掌握綜合應(yīng)用各種可視化元素和交互技術(shù)實現(xiàn)一個典型的Windows 應(yīng)用程序。希望通過本次開發(fā)過程,進(jìn)一步的掌握調(diào)試程序的技能,尋找錯誤,豐富編程經(jīng)驗,提升編寫MFC程序的能力。1.1.3主要要求運行程序后,開始游戲。1.用戶可以選擇應(yīng)用程序提供的位圖資源或自定義的位圖作為游戲使用的圖片。2.用戶可以選擇游戲的難度,若選擇“簡單”,程序?qū)D片分成9塊;若選擇“困難”則分成16塊。3.單擊“重置”菜單項會重新游戲。單擊任一圖格,圖像將隨機(jī)排列;用戶可單擊空格周圍的圖格來改變其位置。4.用戶在游戲時可以通過單擊“提示”菜單項來查看當(dāng)前圖片的縮略圖

5、。5.拼圖成功,程序?qū)⒃跔顟B(tài)欄給出提示信息和所花費的時間,用戶可以選擇另外一幅圖片重新開始游戲或者退出程序。1.1.4理論依據(jù)與工作內(nèi)容理論依據(jù):該程序基于對話框程序組成(包括一個菜單欄,狀態(tài)欄和顯示游戲圖片的游戲區(qū)),主要利用對話框文檔上的菜單項來執(zhí)行各個功能,如:重置、更換位圖、自行加載位圖。在CPictureDlg類里面添加成員函數(shù)和變量來實現(xiàn)各個功能。工作內(nèi)容:在基于對話框的工程中加入菜單操作、用代碼操縱菜單、Windows位圖文件的基本結(jié)構(gòu)、Visual C+中對位圖資源的操作、Visual C+中對自定義位圖文件的操作、設(shè)備相關(guān)位圖(DDB)的概念、用Static 控件顯示位圖以及

6、用Status Bar顯示提示信息和Visual C+隨機(jī)函數(shù)該程序。第二章 設(shè)計方案論述2.1.1具體論述1.CMenu* GetSubMenu(int nPos) 若彈出菜單位于指定的位置,則返回CMenu 對象的指針,其中CMenu對象要包含彈出菜單的句柄;否則返回NULL。如果CMenu 對象不存在,那么將創(chuàng)建臨時CMenu對象,但返回的CMenu指針不應(yīng)被存儲。nPos指定包含在菜單中的彈出菜單的位置。對于第一個菜單項,開始位置值為0。2.BOOL AppendMenu(UINT nFlags, UINT nIDNewItem=0, LPCTSTR lpszNewItem= NULL

7、) 在末尾添加一項,若nFlags為MF_SEPARATOR表示增加一個分隔條,這樣其他兩個參數(shù)將會被忽略;若nFlag為MF_STRING表示添加一個菜單項。nIDNewItem為該菜單的ID命令值;若nIDNewItem為MF_POPUP表示添加一個彈出菜單項,這時nIDNewItem為另一菜單的句柄HMENU。lpszNewItem為菜單文字說明。3.BOOL InsertMenu(UINT nPosition,UINT nFlags ,UINT nIDNewItem = 0,LPCTSTR lpszNewItem = NULL) 用于在指定位置插入一菜單,變量nPosition指定插入

8、位置。如果nFlags 包含MF_BYPOSITION 則表明插入在nPosition 位置, 如果包含MF_BYCOMMAND表示插入在ID為nPosition的菜單處。4.BOOL ModifyMenu(UINT nPosition, UINT nFlags, UINT nIDNewItem=0 ,LPCTSTR lpszNewItem = NULL) 用于修改某一位置的菜單,如果nFlags包含MF_BYPOSITION,則表明修改nPosition位置的菜單,如果包含MF_BYCOMMAND表示修改ID為nPosition處的菜單。5.BOOL RemoveMenu(UINT nPos

9、ition, UINT nFlags) 用于刪除某一位置的菜單。如 果 nFlags 包含MF_BYPOSITION 則表明刪除nPosition 位置的菜單, 如果包含MF_BYCOMMAND表示刪除ID為nPosition處的菜單。6.BOOL AppendMenu(UINT nFlags, UINT nIDNewItem, const CBitmap* pBmp) 和BOOL InsertMenu(UINT nPosition, UINT nFlags, UINT nIDNewItem, const CBitmap* pBmp)可以添加位圖菜單,但這樣的菜單在選中時是反色顯示,并不美觀。

10、7.UINT CheckMenuItem(UINT nIDCheckItem, UINT nCheck) 返回菜單項以前的狀態(tài): MF_CHECKED 或MF_UNCHECKED 。如果該菜單項不存在, 那么將返回0xFFFFFFFF。nIDCheckItem指定由nCheck確定的將要選擇的菜單項。nCheck指定是否選中菜單項, 并決定菜單中各菜單項的位置。參數(shù)nCheck可以是MF_CHECKED或MF_UNCHECKED與MF_BYPOSITION或MF_BYCOM MAND的組合。這些標(biāo)志可通過使用位與運算進(jìn)行組合。其中MF_CHECKED與MF_UNCHECKED用來進(jìn)行狀態(tài)轉(zhuǎn)換,

11、在菜單項之前放置默認(rèn)的選中標(biāo)記。簡而言之,調(diào)用一系列函數(shù)將游戲啟動(初始化變量)、選擇位圖、加載位圖、游戲模式選擇(位圖分割)、小塊圖片隨機(jī)排序、靜態(tài)控件顯示位圖等一系列操作連接起來。 第三章 詳細(xì)設(shè)計3.1 詳細(xì)設(shè)計過程(包含關(guān)鍵代碼及截圖)3.1.1 創(chuàng)建初始界面新建一個MFC AppWizard(exe)工程,將其命名為Picture,在第一步選擇Dialog based,如圖3-1所示,接下來直接點Finish。在菜單欄中點擊Insert->Resource->Menu->New,新建菜單項。添加如圖的菜單。添加菜單項各個菜單項的ID、Caption如圖所示。以上完成

12、后,右擊打開對話框的屬性(Properties),將對話框的ID號設(shè)為IDD_PICTURE_DIALOG,Caption設(shè)置為“拼圖游戲”,并為Menu屬性對應(yīng)的下拉框選擇IDR_MENU1,這樣菜單就可以在程序運行時顯示在主對話框的頂部了。在對話框的屬性中選中Minimize box以實現(xiàn)對話框的最小化,如圖。這時運行程序,運行結(jié)果如圖所示。在ClassView標(biāo)簽中為CPictureDlg類添加兩個CMenu類型的成員變量CMenu類為Windows HMENU的封裝類。它提花了成員函數(shù)以用于創(chuàng)建、跟蹤、更新及撤消菜單。另外,視圖中是沒有菜單的,在框架窗口中才有菜單,所以只有用AfxGe

13、tApp()->m_pMain->GetMenu()才能得到菜單指針。3.1.2 位圖的讀入和顯示在程序中,需要由用戶來選擇游戲中使用的圖片,同時還需要將整幅圖片分成不同的小塊。因此,采用(Picture)Static控件作為位圖的載體,分別顯示圖片的不同部分。首先,需要讀入位圖資源。點擊菜單欄Insert->Resource->Bitmap->Import,在文件類型中選中必須所有文件位圖才能顯示出來,在彈出的對話框里面選中所要加的位圖,點擊Import,完成一副位圖添加。添加完成后會彈出對話框。依次添加四個位圖文件(ID默認(rèn))后,在ResourceView欄的

14、Bitmap中將看到為對話框的“圖片”菜單添加五個菜單項所示,ID分別為:ID_PICTURE1,ID_PICTURE2,ID_PICTURE3,ID_PICTURE4,ID_ADVAN。接下來為CPictureDlg類添加一個CBitmap類型的成員變量Bitmap,CBitmap封裝了Windows圖形設(shè)備接口(GDI)中的位圖,并且提供了操縱位圖的成員函數(shù)。為了實現(xiàn)不同位圖資源的加載,我們需要為類CPictureDialog添加一個成員函數(shù)Void OnRun(UINT nBitmapID,UINT nMenuID)。參數(shù)nBitmapID指定位圖資源的ID號,nMenuID指定菜單項的

15、ID號。在函數(shù)中,我們首先用GetSubMenu得到指向彈出菜單對象的指針,然后用CheckMenuItem方法為nMenuID所指定的菜單項放置選中標(biāo)記。接下來用CBitmap對象的LoadBitmap方法將nBitmapID所指定的位圖載入。相應(yīng)代碼見附錄。按 Ctrl + W 快捷鍵打開類向?qū)鐖D3-18,依次為對話框中的“圖片”菜單中的子菜單項添加消息響應(yīng)函數(shù),并調(diào)用OnRun函數(shù)加載位圖。四張圖片對應(yīng)菜單的消息響應(yīng)代碼見附錄?!白远x圖片”菜單項的消息響應(yīng)代碼由于需要打開一個新的位圖文件,所以需要先為CPictureDlg類添加一個HBITMAP類型的成員變量hBitmap,用來表示

16、指向位圖資源的句柄。其次,還需要添加兩個INT型變量Width,Height來表示用戶打開圖片的大小;BOOL型變量IsLong來表示圖片屬于長大于寬型還是寬大于長型,BOOL型變量Advan表示該圖片是否是自定義型,變量定義代碼截圖?!白远x圖片”菜單項的消息響應(yīng)代碼見附錄。在上面的代碼中,用LoadImage方法來加載自定義文件中的位圖資源,然后用GetObject方法得到其BITMAP對象。3.1.3 用(Picture)Static控件顯示位圖 在游戲程序中,采用Static Text即靜態(tài)文本控件來顯示位圖。靜態(tài)文本控件的功能比較簡單,可顯示字符串、圖標(biāo)、位圖。先為對話框的“游戲”中

17、的菜單項“簡單”和“困難”添加消息響應(yīng)。另外還需為CPictureDlg類添加BOOL型變量Easy來標(biāo)識游戲的難度(分為9格或16格),同時添加BOOL型變量IsRnd用來標(biāo)識圖格是否進(jìn)行了隨機(jī)位置的初始化對應(yīng)的簡單、困難菜單項的消息響應(yīng)函數(shù)代碼見附錄。接下來為CPictureDlg對話框添加16個Static控件(可以先設(shè)置好一個控件后,再通過復(fù)制得到其它的控件),如圖3-23所示;并設(shè)置它們的屬性:ID設(shè)為IDC_IMAGE0到IDC_IMAGE15,Tabstop需要選上,Type屬性設(shè)為Bitmap;另外Styles標(biāo)簽里的Notify也要選上在添加完控件后,還需要添加一個CStat

18、ic類型的數(shù)組m_Image16與這16個Static控件相關(guān)聯(lián),通過這個操作這個數(shù)組的下標(biāo)來控制這16個控件對圖像進(jìn)行分格顯示在CPictureDlg類中系統(tǒng)生成的OnInitDialog()函數(shù)體內(nèi),這個函數(shù)是整個對話框程序運行的入口,相當(dāng)于一個main函數(shù),在這個函數(shù)體里,我們也需要為之前聲明的變量提供初始值,即將變量初始化,變量沒有初始化的后果通常會造成內(nèi)存泄露,使程序在運行時出現(xiàn)莫名奇妙的錯誤。設(shè)定了Static控件的初始位置之后,就可以將圖像拷貝到上面,因此需為CPictureDlg類添加一個成員函數(shù)SetImage,如圖所示。SetImage函數(shù)的代碼見附錄。在SetImage函

19、數(shù)中涉及到一個未定義的BOOL型變量Style3d,需要聲明并初始化,聲明見圖。初始化見圖3-29(注:所有變量的初始代均在OnInitDialog()中完成),這個變量的作用是判斷用戶選擇的圖片風(fēng)格是3D風(fēng)格還是平面風(fēng)格。這里我們順便把對話框菜單的“選項”菜單項完善一下。如圖所示: 新增各個菜單項的屬性分別如圖 在類向?qū)е刑砑酉㈨憫?yīng)函數(shù),如圖類似添加其他幾個消息響應(yīng)函數(shù),各函數(shù)代碼見附錄。在游戲正式開始之前,我們首先要對各圖格進(jìn)行隨機(jī)排列。為CPictureDlg添加兩個成員函數(shù)MapRand和Rnd,分別用來作為隨機(jī)函數(shù)和設(shè)定隨機(jī)圖格的位置。如圖所示。相應(yīng)函數(shù)代碼見附錄?,F(xiàn)在就可以依次為

20、那16個Static控件添加鼠標(biāo)響應(yīng)函數(shù)了,如圖。16個函數(shù)代碼相似,只給出OnImage0()的代碼,具體見附錄。單擊Static控件時,程序首先判斷圖格是否進(jìn)行了隨機(jī)數(shù)初始化,若是,則移動圖格,否則的話先進(jìn)行初始化。此外還需用IsWin()函數(shù)判斷游戲是否完成,如果完成則設(shè)置計時器控制變量Cancount為假。在CPictureDlg里面聲明BOOL型變量Cancount和INT型變量count,它們在后面都會用到。如圖3-39.在OnAdvan()函數(shù)中添加如下代碼:count = 0;CanCount = FALSE;IsRnd = FALSE;Advan = TRUE;在OnEasy

21、()、OnHard()中以及OnRnd()函數(shù)的中添加:CanCount=FALSE;添加判斷游戲是否完成的函數(shù)IsWin(),只要所有的Static控件都回到了相應(yīng)的位置,就可以認(rèn)為用戶己完成了拼圖,即游戲完成。函數(shù)代碼見附錄。在CPictureDlg頭文件中定義CStatusBarCtrl類型變量m_wndStatusBar。打開類向?qū)В瑸橹疤砑拥牟藛雾棥伴_始”(ID_BEGIN),“重置”(ID_REPLAY),“提示”(ID_FORHELP),和“退出”(ID_QUIT)添加消息響應(yīng)函數(shù)。如圖3-40。其他幾個函數(shù)類似添加。至此,程序已經(jīng)大致完成,運行,選擇圖片“美少女”,得到如圖結(jié)

22、果。 第四章 設(shè)計結(jié)果及分析4.1 程序測試4.1.1 程序測試結(jié)果游戲開始單擊圖片,開始游戲,如圖4-1。圖4-1游戲開始,如圖4-2。圖 4-2開始游戲更改模式“困難”。圖 4-3困難模式更換圖片“山水圖”。圖4-4 更換圖片查看縮略圖,如圖4-5。圖4-5單擊幫助,顯示縮略圖點擊“確定”,結(jié)果如圖4-6。返回游戲。圖4-6 返回游戲點擊“自定義圖片”,結(jié)果如圖4-7。圖 4-7 自定義圖片圖片默認(rèn)的是“3D效果”,改為“平面”,結(jié)果如圖4-8。圖 4-8 修改為平面效果測試結(jié)束???結(jié) 通過本次項目設(shè)計,我熟練掌握了對話框和常用控件的應(yīng)用,基本學(xué)會了利用各種可視化元素和交互技術(shù)實現(xiàn)一個典

23、型的Windows應(yīng)用程序的思路和方法。另外對MFC中的消息響應(yīng)機(jī)制也進(jìn)一步的加深了理解,而且通過本程序掌握Visual C+位圖操作,例如位圖加載、位圖顯示等。致 謝 在此次項目設(shè)計過程中,我遇到了不少的困難,得到了許多人的幫助。首先我要感謝任鳳華老師,對于這個項目的給了我一個思路,另外還給予我不少技術(shù)上的支持,讓我把程序做的更好,再次感謝任鳳華老師的幫助。其次,我要感謝幫助我的同學(xué),他們也在我的實驗過程中給予了我不少的提醒和講解。最后衷心的祝福老師身體健康、工作順利! / pictureDlg.cpp : implementation file/#include "stdafx.

24、h"#include "picture.h"#include "pictureDlg.h"#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE = _FILE_;#endif/ CAboutDlg dialog used for App Aboutclass CAboutDlg : public CDialogpublic:CAboutDlg();/ Dialog Data/AFX_DATA(CAboutDlg)enum IDD = IDD_ABOUTBO

25、X ;/AFX_DATA/ ClassWizard generated virtual function overrides/AFX_VIRTUAL(CAboutDlg)protected:virtual void DoDataExchange(CDataExchange* pDX); / DDX/DDV support/AFX_VIRTUAL/ Implementationprotected:/AFX_MSG(CAboutDlg)/AFX_MSGDECLARE_MESSAGE_MAP();CAboutDlg:CAboutDlg() : CDialog(CAboutDlg:IDD)/AFX_D

26、ATA_INIT(CAboutDlg)/AFX_DATA_INITvoid CAboutDlg:DoDataExchange(CDataExchange* pDX)CDialog:DoDataExchange(pDX);/AFX_DATA_MAP(CAboutDlg)/AFX_DATA_MAPBEGIN_MESSAGE_MAP(CAboutDlg, CDialog)/AFX_MSG_MAP(CAboutDlg)/ No message handlers/AFX_MSG_MAPEND_MESSAGE_MAP()/ CPictureDlg dialogCPictureDlg:CPictureDlg

27、(CWnd* pParent /*=NULL*/): CDialog(CPictureDlg:IDD, pParent)/AFX_DATA_INIT(CPictureDlg)/ NOTE: the ClassWizard will add member initialization here/AFX_DATA_INIT/ Note that LoadIcon does not require a subsequent DestroyIcon in Win32m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);void CPictureDlg:Do

28、DataExchange(CDataExchange* pDX)CDialog:DoDataExchange(pDX);/AFX_DATA_MAP(CPictureDlg)/ NOTE: the ClassWizard will add DDX and DDV calls here/AFX_DATA_MAPBEGIN_MESSAGE_MAP(CPictureDlg, CDialog)/AFX_MSG_MAP(CPictureDlg)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_COMMAND(ID_PICTURE1, OnPict

29、ure1)ON_COMMAND(ID_PICTURE2, OnPicture2)ON_COMMAND(ID_PICTURE3, OnPicture3)ON_COMMAND(ID_PICTURE4, OnPicture4)ON_COMMAND(ID_ADVAN, OnAdvan)ON_COMMAND(ID_EASY, OnEasy)ON_COMMAND(ID_HARD, OnHard)ON_COMMAND(ID_3D, On3d)ON_COMMAND(ID_FLAT, OnFlat)ON_BN_CLICKED(IDC_IMAGE0, OnImage0)ON_BN_CLICKED(IDC_IMAG

30、E1, OnImage1)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_IMAGE2, OnImage2)ON_BN_CLICKED(IDC_IMAGE3, OnIm

31、age3)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_COMMAND(ID_BEGIN, OnBegin)ON_COMMAND(ID_REPLAY, OnReplay)ON_COMMAND(ID_FORHELP, On

32、Forhelp)ON_COMMAND(ID_OUT, OnOut)ON_WM_TIMER()ON_COMMAND(IDABOUT, OnAbout)ON_BN_CLICKED(IDC_DLGABOUT, OnDlgabout)ON_BN_CLICKED(IDC_ENDHELP, OnEndhelp)/AFX_MSG_MAPEND_MESSAGE_MAP()/ CPictureDlg message handlersBOOL CPictureDlg:OnInitDialog()CDialog:OnInitDialog();/ Set the icon for this dialog. The f

33、ramework does this automatically/ when the application's main window is not a dialogSetIcon(m_hIcon, TRUE); / Set big iconSetIcon(m_hIcon, FALSE); / Set small iconsrand(unsigned)time(NULL);/ TODO: Add extra initialization hereBitmap.LoadBitmap(IDB_BITMAP1);pKDC = new CDC;pMainMenu = GetMenu(); /

34、獲取菜單Style3d = TRUE;Islong = FALSE;Advan = FALSE;Easy = TRUE;SetWindowPos(NULL,0,0,600,600,SWP_NOMOVE); /控制窗口大小SetTimer(10,1000,NULL);m_wndStatusBar.Create(WS_CHILD|WS_VISIBLE|CCS_BOTTOM|CCS_NODIVIDER,CRect(0,0,0,0),this,102);int static strPartDim4 = 160, 260, 350, -1;m_wndStatusBar.SetParts(3,strPar

35、tDim);m_wndStatusBar.SetText(TimeCon,1,0);m_wndStatusBar.SetText("Player",2,0);m_Image0.SubclassDlgItem(IDC_IMAGE0,this);m_Image1.SubclassDlgItem(IDC_IMAGE1,this);m_Image2.SubclassDlgItem(IDC_IMAGE2,this);m_Image3.SubclassDlgItem(IDC_IMAGE3,this);m_Image4.SubclassDlgItem(IDC_IMAGE4,this);m

36、_Image5.SubclassDlgItem(IDC_IMAGE5,this);m_Image6.SubclassDlgItem(IDC_IMAGE6,this);m_Image7.SubclassDlgItem(IDC_IMAGE7,this);m_Image8.SubclassDlgItem(IDC_IMAGE8,this);m_Image9.SubclassDlgItem(IDC_IMAGE9,this);m_Image10.SubclassDlgItem(IDC_IMAGE10,this);m_Image11.SubclassDlgItem(IDC_IMAGE11,this);m_I

37、mage12.SubclassDlgItem(IDC_IMAGE12,this);m_Image13.SubclassDlgItem(IDC_IMAGE13,this);m_Image14.SubclassDlgItem(IDC_IMAGE14,this);m_Image15.SubclassDlgItem(IDC_IMAGE15,this);m_Preview.SubclassDlgItem(IDC_PREVIEW,this);OnBegin();return TRUE; / return TRUE unless you set the focus to a controlvoid CPic

38、tureDlg:OnSysCommand(UINT nID, LPARAM lParam)if (nID & 0xFFF0) = IDM_ABOUTBOX)CAboutDlg dlgAbout;dlgAbout.DoModal();elseCDialog: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 mo

39、del,/ this is automatically done for you by the framework.void CPictureDlg:OnPaint() if (IsIconic()CPaintDC dc(this); / device context for paintingSendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);/ Center icon in client rectangleint cxIcon = GetSystemMetrics(SM_CXICON);int cyIcon = GetSys

40、temMetrics(SM_CYICON);CRect rect;GetClientRect(&rect);int x = (rect.Width() - cxIcon + 1) / 2;int y = (rect.Height() - cyIcon + 1) / 2;/ Draw the icondc.DrawIcon(x, y, m_hIcon);elseCDialog:OnPaint();SetImage();if(pKDC) pKDC->DeleteDC();/ The system calls this to obtain the cursor to display w

41、hile the user drags/ the minimized window.HCURSOR CPictureDlg:OnQueryDragIcon()return (HCURSOR) m_hIcon;void CPictureDlg:OnRun(UINT nBitmapID, UINT nMenuID) pSubMenu = pMainMenu->GetSubMenu(1); pSubMenu->CheckMenuItem(ID_PICTURE1,MF_UNCHECKED); pSubMenu->CheckMenuItem(ID_PICTURE2,MF_UNCHECK

42、ED); 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.DeleteObje

43、ct();Bitmap.LoadBitmap(nBitmapID);SetPos();SetImage();IsWin();void CPictureDlg:OnPicture1() / TODO: Add your command handler code hereOnRun(IDB_BITMAP1, ID_PICTURE1);m_wndStatusBar.SetText("美少女",0,0);void CPictureDlg:OnPicture2() / TODO: Add your command handler code hereOnRun(IDB_BITMAP2,

44、 ID_PICTURE2);m_wndStatusBar.SetText("山水圖",0,0);void CPictureDlg:OnPicture3() / TODO: Add your command handler code hereOnRun(IDB_BITMAP3, ID_PICTURE3);m_wndStatusBar.SetText("花鳥圖",0,0);void CPictureDlg:OnPicture4() / TODO: Add your command handler code hereOnRun(IDB_BITMAP4, ID_

45、PICTURE4);m_wndStatusBar.SetText("冰河時代",0,0);void CPictureDlg:OnAdvan() / TODO: Add your command handler code hereCFileDialog dlg(TRUE, NULL, NULL, NULL, "位圖文件(*.bmp)|*.bmp");INT Result = dlg.DoModal();if(Result = IDOK)count = 0; CanCount = FALSE;IsRnd = FALSE; Advan = TRUE;hBitm

46、ap = (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

47、 = 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;Bitmap.DeleteObject();SetPos();SetImage();IsWin();m_wndStatusBar.SetText(dlg.GetFileTitle(),0,0);else if(Result = IDCANCE

48、L)return;void CPictureDlg:OnEasy() / TODO: Add your command handler code herepSubMenu = pMainMenu->GetSubMenu(0);pSubMenu->CheckMenuItem(ID_HARD, MF_UNCHECKED);pSubMenu->CheckMenuItem(ID_EASY, MF_CHECKED);Easy = TRUE; IsRnd = FALSE;CanCount=FALSE;SetPos();IsWin();m_wndStatusBar.SetText(&quo

49、t;加油!",0,0);void CPictureDlg:OnHard() / TODO: Add your command handler code herepSubMenu = pMainMenu->GetSubMenu(0);pSubMenu->CheckMenuItem(ID_EASY, MF_UNCHECKED);pSubMenu->CheckMenuItem(ID_HARD, MF_CHECKED);Easy = FALSE; IsRnd = FALSE;CanCount=FALSE;SetPos();IsWin();m_wndStatusBar.Set

50、Text("有點難度!",0,0);void CPictureDlg:SetPos()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;els

51、e move = 0;for(int i = 0; i <= con; i+)m_Imagei.SetWindowPos(NULL,x*i+move,0,0,0,SWP_NOSIZE);m_Imagei.SetWindowPos(NULL,0, 0, x, y, SWP_NOMOVE);for(int j = 0; j <= con; j+)m_Imagecon+1+j.SetWindowPos(NULL,x*j+move,y,0,0,SWP_NOSIZE);m_Imagecon+1+j.SetWindowPos(NULL,0, 0, x, y, SWP_NOMOVE);for(i

52、nt 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_Imagel+12.SetWindowPos(NULL,x*l+move,3*y,0,0,SWP_NOSIZE);m_Imagel+12.SetWindowPos(NULL,0,0,x,y,SWP_NOMOVE);CCli

53、entDC dc(&m_Imagel+12);void CPictureDlg:SetImage()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_Imagei);pDC->CreateCompatibleDC(&dc);pDC->SelectObject(picture);dc.BitBlt(0,0,x,y,pDC,x*i,0,SRCCOPY);if(St

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論