亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? move pic.cpp

?? 真是一款用VC++編寫的小游戲
?? CPP
?? 第 1 頁 / 共 2 頁
字號:

				cxScr = GetSystemMetrics (SM_CXSCREEN) ;
				cyScr = GetSystemMetrics (SM_CYSCREEN) ;

				// 計算最合適的顯示尺寸
				fcxDiv = 5 * (float) (bitmap.bmWidth) /	(float) (cxScr) / 2 ;
				fcyDiv = 5 * (float) (bitmap.bmHeight) / (float) (cyScr) / 3 ;

				// 獲得相對于最合適的顯示區域,圖像比較寬的一邊
				if ( (fDiv = (fcxDiv > fcyDiv) ? fcxDiv : fcyDiv) <= 1)
					fDiv = 1 ;

				// 計算出最合適的大小,并保持圖像長寬比例
				cxClient = (int) (bitmap.bmWidth / fDiv) ;
				cyClient = (int) (bitmap.bmHeight / fDiv) ;

				// 重新計算窗口尺寸和坐標
				rcWin.left   -= (cxClient - (rcClient.right - rcClient.left)) / 2 ;
				rcWin.right  += (cxClient - (rcClient.right - rcClient.left)) / 2 ;
				rcWin.top    -= (cyClient - (rcClient.bottom - rcClient.top)) / 2 ;
				rcWin.bottom += (cyClient - (rcClient.bottom - rcClient.top)) / 2 ;

				// 經過多次打開圖像后,窗口位置就不再是屏幕中央了。不知道哪里出了問題

				MoveWindow (hwnd, rcWin.left, rcWin.top, rcWin.right - rcWin.left,
							rcWin.bottom - rcWin.top, TRUE);

				/*==================================================
								讓Static顯示圖像
				==================================================*/
				// Static控件應該調整了位置和大小。下面顯示圖像
				hdc = GetDC (hwnd) ;

				// 把圖像載入內存設備表
				hdcMem = CreateCompatibleDC (hdc) ;
				SelectObject (hdcMem, hBitmap) ;
				
				for (i = 0; i < 4; i++)
					for (j = 0; j < 4; j++)
					{
						// 這里以后應該改進,因為我希望空白地方能夠出現在隨機位置
						if (i * 4 + j == 15)
						{	idStcBlank = 15;
							break ;
						}

						hdcStc = CreateCompatibleDC (hdc) ;
						// 創建新的圖像句柄
						hBmpStc = CreateCompatibleBitmap (hdc,
														  cxClient / 4,
														  cyClient / 4);
						SelectObject (hdcStc, hBmpStc) ;

						// 分割圖像并拷貝到hdcStc內存設備表
						StretchBlt (hdcStc,	0, 0, 
									cxClient / 4,
									cyClient / 4,
									hdcMem,
									bitmap.bmWidth * j / 4,
									bitmap.bmHeight * i / 4,
									bitmap.bmWidth / 4,
									bitmap.bmHeight / 4,
									SRCCOPY) ;
						
						// 設置對應的Static控件的圖像
						SendDlgItemMessage (hwnd,
											4 * i + j, 
											STM_SETIMAGE,
											(WPARAM) IMAGE_BITMAP,
											(LPARAM) hBmpStc) ;

						DeleteObject (hBmpStc) ;	// 刪除句柄,這一句可以不要,什么影響?
						DeleteDC (hdcStc) ;
					}

				DeleteDC (hdcMem) ;
				ReleaseDC (hwnd, hdc) ;

				// 使Static控件可以接受mouse點擊消息
				bWinFlag = false ;
				// 使reset菜單有效
				EnableMenuItem (hMenu, IDM_GAME_RESET, MF_ENABLED) ;
			}
			
			return 0 ;

		case ID_GAME_EXIT:	// 退出游戲
			SendMessage (hwnd, WM_CLOSE, 0, 0);
			return 0;

		case ID_HELP_ABOUT:
			DialogBox (hInst, TEXT ("AboutDlg"), hwnd, AboutDlgProc) ;
			return 0;

		default:
			if (bWinFlag == false)
			{
				/*==================================================
							Windows通知Static被鼠標點擊
				原本應該這樣,像菜單項處理一樣,使用case id來判斷,
				但是我們就要重復16次,為了方便和美觀,我就這樣處理。
				因為除了菜單消息就是點擊Static控件消息了。
				==================================================*/
				// 獲得被點擊的Static控件的id
				idStcClk = (int) LOWORD (wParam) ;
	
				// 得到BlankStatic和被點擊的Static控件的位置信息
				iStcClkPos = iStcPos[idStcClk / 4][idStcClk % 4] ;
				iStcBlankPos = iStcPos[idStcBlank / 4][idStcBlank % 4] ;
			
				// 判斷是否應該對點擊做出反應
				if (iStcClkPos == iStcBlankPos)		// player click the blank static
					return 0 ;

				if (iStcClkPos != iStcBlankPos - 4 &&	// not up static of blank static
					iStcClkPos != iStcBlankPos + 4 &&	// not below static of blank static
					iStcClkPos != iStcBlankPos - 1 &&	// not left static of blank static
					iStcClkPos != iStcBlankPos + 1)		// not right static of blank static
					return 0 ;

				// 移動Static控件
				MoveWindow (hwndPic_Button[idStcClk / 4][idStcClk % 4],
							(iStcBlankPos % 4) * cxClient / 4,
							(iStcBlankPos / 4) * cyClient / 4,
							cxClient / 4, cyClient / 4, TRUE) ;
	
				MoveWindow (hwndPic_Button[idStcBlank / 4][idStcBlank % 4],
							(iStcClkPos % 4) * cxClient / 4,
							(iStcClkPos / 4) * cyClient / 4,
							cxClient / 4, cyClient / 4, TRUE) ;

				// 更新Static控件的位置信息
				iStcPos[idStcClk / 4][idStcClk % 4] = iStcBlankPos ;
				iStcPos[idStcBlank / 4][idStcBlank / 4] = iStcClkPos ;

				// 判斷是否勝利
				int iWinFlag = 0 ;
				for (i = 0; i < 4; i++)
					for (j = 0; j < 4; j++)
						if (iStcPos[i][j] == 4 * i + j)
							iWinFlag ++ ;

				if (iWinFlag == 16)	// win the game
				{
					// 顯示祝賀信息
					MessageBox (hwnd, szWinGame, szAppName,
								MB_OK | MB_ICONINFORMATION) ;
					bWinFlag = true ;
				}
			}

			return 0 ;
		}
		break;		

	case WM_DESTROY:
		if (hBitmap)
			DeleteObject (hBitmap) ;

		PostQuitMessage (0) ;
		return 0 ;
	}
	
	return DefWindowProc (hwnd, message, wParam, lParam) ;
}


/*==========================================================
				從位圖文件創建位圖對象
==========================================================*/
HBITMAP CreateBitmapObjectFromDibFile (HDC hdc, PTSTR szFileName)
{
	BITMAPFILEHEADER * pbmfh ;
	BOOL               bSuccess ;
	DWORD              dwFileSize, dwHighSize, dwBytesRead ;
	HANDLE             hFile ;
	HBITMAP            hBitmap ;
	
	// 打開文件: 只讀,寫禁止
	hFile = CreateFile (szFileName, GENERIC_READ, FILE_SHARE_READ, NULL, 
						OPEN_EXISTING, FILE_FLAG_SEQUENTIAL_SCAN, NULL) ;
	
	if (hFile == INVALID_HANDLE_VALUE)
		return NULL ;
	
	// 讀入整個文件
	dwFileSize = GetFileSize (hFile, &dwHighSize) ;
	
	if (dwHighSize)
	{
		CloseHandle (hFile) ;
		return NULL ;
	}
	
	pbmfh = (BITMAPFILEHEADER *) malloc (dwFileSize) ;
	
	if (!pbmfh)
	{
		CloseHandle (hFile) ;
		return NULL ;
	}
	
	bSuccess = ReadFile (hFile, pbmfh, dwFileSize, &dwBytesRead, NULL) ;
	CloseHandle (hFile) ;
	
	// 驗證文件
	if (!bSuccess || (dwBytesRead != dwFileSize)
					|| (pbmfh->bfType != * (WORD *) "BM") 
					|| (pbmfh->bfSize != dwFileSize))
	{
		free (pbmfh) ;
		return NULL ;
	}
	
	// 創建DDB
	hBitmap = CreateDIBitmap	(hdc, 
								(BITMAPINFOHEADER *) (pbmfh + 1),
								CBM_INIT,
								(BYTE *) pbmfh + pbmfh->bfOffBits,
								(BITMAPINFO *) (pbmfh + 1),
								DIB_RGB_COLORS) ;
	free (pbmfh) ;
	
	return hBitmap ;
}


/*==========================================================
				初始化OPENFILENAME結構
==========================================================*/
void InitOfnStruct (OPENFILENAME& ofn, HWND hWin)
{
	// initialize OPENFILENAME struct
	ofn.lStructSize       = sizeof (OPENFILENAME) ;
	ofn.hwndOwner         = hWin ;
	ofn.hInstance         = NULL ;
	ofn.lpstrFilter       = szFilter ;
	ofn.lpstrCustomFilter = NULL ;
	ofn.nMaxCustFilter    = 0 ;
	ofn.nFilterIndex      = 0 ;
	ofn.lpstrFile         = szFileName ;
	ofn.nMaxFile          = MAX_PATH ;
	ofn.lpstrFileTitle    = szTitleName ;
	ofn.nMaxFileTitle     = MAX_PATH ;
	ofn.lpstrInitialDir   = NULL ;
	ofn.lpstrTitle        = NULL ;
	ofn.Flags             = 0 ;
	ofn.nFileOffset       = 0 ;
	ofn.nFileExtension    = 0 ;
	ofn.lpstrDefExt       = TEXT ("bmp") ;
	ofn.lCustData         = 0 ;
	ofn.lpfnHook          = NULL ;
	ofn.lpTemplateName    = NULL ;
}


/*==========================================================
					對話框窗口函數
==========================================================*/
BOOL CALLBACK AboutDlgProc (HWND hDlg, UINT message, 
                            WPARAM wParam, LPARAM lParam)
{
     switch (message)
     {
     case WM_INITDIALOG :
          return TRUE ;
          
     case WM_COMMAND :
          switch (LOWORD (wParam))
          {
          case IDOK :
               EndDialog (hDlg, 0) ;
               return TRUE ;
          }
          break ;
     }
     return FALSE ;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩视频在线永久播放| 一区二区三区视频在线看| 国产精品免费久久| 夜夜爽夜夜爽精品视频| 蜜臀久久99精品久久久久久9| 久久99精品国产91久久来源| 99这里都是精品| 欧美一区二区啪啪| 亚洲午夜视频在线观看| 亚洲国产成人91porn| 国产一区二区美女诱惑| 色播五月激情综合网| 精品欧美乱码久久久久久1区2区| 国产精品欧美综合在线| 奇米影视在线99精品| 99久久99久久免费精品蜜臀| 欧美一区二区三区在线看| 亚洲欧美偷拍卡通变态| 奇米色777欧美一区二区| 成人av在线网站| 日韩精品一区二区三区在线| 亚洲精品乱码久久久久久| 国产激情91久久精品导航| 日韩一级免费观看| 午夜精品久久久久久久蜜桃app| 成人免费观看视频| 久久精品视频在线免费观看| 日韩精品福利网| 欧美视频精品在线观看| 亚洲精品中文字幕在线观看| 成人avav在线| 中文字幕成人网| 高清久久久久久| 国产欧美一区视频| 久久不见久久见免费视频1| 欧美日韩精品一区视频| 亚洲伊人伊色伊影伊综合网| 色又黄又爽网站www久久| 亚洲欧洲国产专区| www.欧美日韩| 亚洲乱码日产精品bd| 91偷拍与自偷拍精品| 亚洲少妇最新在线视频| 91看片淫黄大片一级在线观看| 亚洲视频综合在线| 一本色道**综合亚洲精品蜜桃冫 | 欧美一级免费观看| 午夜不卡在线视频| 日韩一区二区三区在线视频| 麻豆免费精品视频| 国产精品日韩成人| 在线观看视频欧美| 美国十次了思思久久精品导航| 亚洲精品在线免费观看视频| 成人免费毛片高清视频| 亚洲一区二区在线免费看| 91精品国产91久久久久久一区二区 | 一区二区三区精品在线观看| 欧美精品第一页| 国产一区 二区| 亚洲综合视频在线观看| 26uuu久久综合| 91毛片在线观看| 精品夜夜嗨av一区二区三区| 中文字幕在线一区免费| 91精品国产全国免费观看| 成人精品鲁一区一区二区| 免费成人在线影院| 亚洲免费观看高清在线观看| 欧美电视剧免费全集观看| 色8久久人人97超碰香蕉987| 国产美女精品在线| 青青草国产成人av片免费| 一区二区三区中文在线| 日本一区二区综合亚洲| 精品国产亚洲一区二区三区在线观看| 99久久婷婷国产综合精品| 久久爱www久久做| 日本伊人精品一区二区三区观看方式| 中文字幕欧美日韩一区| 久久久久99精品国产片| 欧美欧美欧美欧美首页| 91在线免费视频观看| 国产精品538一区二区在线| 免费欧美日韩国产三级电影| 亚洲成av人在线观看| 亚洲午夜免费视频| 一区二区三区四区av| **欧美大码日韩| 亚洲天天做日日做天天谢日日欢| 国产欧美日韩不卡| 中文字幕一区三区| 中文字幕一区在线| 亚洲综合一区二区三区| 亚洲一区二区三区激情| 亚洲成人1区2区| 午夜不卡在线视频| 久久草av在线| 国产 欧美在线| 99精品国产91久久久久久 | 一区二区三区日韩| 亚洲激情在线播放| 亚洲.国产.中文慕字在线| 日本va欧美va精品| 国产一区啦啦啦在线观看| 不卡一区二区三区四区| 成人欧美一区二区三区1314| 亚洲妇女屁股眼交7| 国产毛片精品视频| aa级大片欧美| 91精品国产入口| 国产精品视频九色porn| 亚洲午夜视频在线| 成人综合婷婷国产精品久久蜜臀 | 五月激情综合色| 粉嫩一区二区三区性色av| 色哟哟一区二区三区| 欧美日韩久久一区二区| 久久久久久久性| 五月婷婷综合网| 91免费观看视频| 久久久综合网站| 日本不卡一区二区三区| 东方欧美亚洲色图在线| 91精品一区二区三区久久久久久| 欧美极品aⅴ影院| 奇米色777欧美一区二区| 91欧美一区二区| 久久久久久久久99精品| 日韩 欧美一区二区三区| 99精品视频一区二区三区| 精品福利视频一区二区三区| 亚洲一区二区成人在线观看| 国产成人一级电影| 26uuu欧美| 激情六月婷婷久久| 欧美一级高清片| 水野朝阳av一区二区三区| 在线观看免费成人| 亚洲丝袜制服诱惑| 99久精品国产| 亚洲人成精品久久久久| 99精品视频中文字幕| 亚洲视频每日更新| 色噜噜狠狠成人中文综合| 国产精品成人一区二区艾草| 懂色中文一区二区在线播放| 国产嫩草影院久久久久| 成人精品一区二区三区中文字幕| 开心九九激情九九欧美日韩精美视频电影 | 亚洲成人动漫一区| 555www色欧美视频| 全部av―极品视觉盛宴亚洲| 欧美日韩国产经典色站一区二区三区| 亚洲六月丁香色婷婷综合久久 | 国产欧美日韩在线| 国产又黄又大久久| 成人欧美一区二区三区在线播放| 久久精品日韩一区二区三区| 国产传媒一区在线| 亚洲欧美色图小说| 欧美精品成人一区二区三区四区| 香蕉加勒比综合久久| 日韩欧美一级二级三级久久久| 九九久久精品视频| 中文字幕一区二区在线播放| 在线观看日韩毛片| 黄色精品一二区| 最新久久zyz资源站| 91精品免费在线观看| 成人三级伦理片| 亚洲高清一区二区三区| 久久久久久毛片| 欧美伦理影视网| 国产成人av资源| 日本欧美久久久久免费播放网| 国产精品久久久久久久裸模| 欧美老年两性高潮| www.激情成人| 麻豆国产一区二区| 一个色综合av| 日本一区二区三区久久久久久久久不| 在线不卡免费av| 97精品久久久午夜一区二区三区| 免费成人在线影院| 五月激情综合色| 一区二区视频在线看| 日本一区二区不卡视频| 日韩一卡二卡三卡国产欧美| 欧美性感一类影片在线播放| 国产91丝袜在线观看| 国产一区二区三区黄视频 | 日韩一区二区免费高清| 一本大道av伊人久久综合| 99国产精品国产精品毛片| 国产一区二区调教| 国产精品18久久久| 国产一区二三区| 国产精品一二一区| 国产福利一区二区三区视频在线 |