|
南京信息工程大學(xué) 實驗(實習(xí))報告 實驗(實習(xí))名稱資源在基于SDK的程序設(shè)計中的應(yīng)用實驗(實習(xí))日期
一、實驗?zāi)康?/span> 1.掌握各種資源的應(yīng)用及資源應(yīng)用的程序設(shè)計方法。
二、實驗內(nèi)容及步驟 實驗任務(wù) 1.熟悉菜單資源的創(chuàng)建過程; 2.熟悉位圖資源的創(chuàng)建; 3.熟悉對話框資源的應(yīng)用; 4.熟悉圖標(biāo)資源。
實驗內(nèi)容 在一個窗口中央加載一個任意位圖,位圖尺寸為窗口面積的四分之一,當(dāng)單擊鼠標(biāo)左鍵或鍵盤上的向上箭頭時,位圖向上移動,當(dāng)移動到窗口的上邊界時,窗口顯示“不能再向上移動了”字樣,當(dāng)單擊鼠標(biāo)右鍵或鍵盤上的向下箭頭時,位圖向下移動,當(dāng)?shù)竭_(dá)窗口的下邊界時,屏幕顯示“不能再向下移動了”字樣。 程序代碼: #include <windows.h> long WINAPI WndProc(HWND hWnd,UINT iMessage, UINT wParam,LONG lParam); //消息處理函數(shù)聲明. BOOL InitWindowsClass(HINSTANCE hInstance); //初始化窗口類聲明 BOOL InitWindows(HINSTANCE hInstance, int nCmdShow); //初始化窗口聲明 HWND hWndMain; //定義窗口句柄 HDC hDC; //定義設(shè)備環(huán)境句柄 HDC hdcmem; //定義內(nèi)存句柄 HBITMAP hBm; //定義位圖句柄 BITMAP bm; //定義位圖結(jié)構(gòu)變量 int iY=80; //位圖左上角初始y坐標(biāo) int iWindowWidth,iWindowHeight; //窗口的寬度和高度 char cUpWarn[]="不能再向上移動了"; //向上警告字符串 char cDownWarn[]="不能再向下移動了"; //向下警告字符串 int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance, LPSTR lpCmdLine,int nCmdShow) { MSG Message; //定義消息變量 hBm=LoadBitmap(hInstance,"forest"); //加載位圖 GetObject(hBm,sizeof(BITMAP),(LPVOID)&bm); //獲得位圖信息 iWindowWidth=2*bm.bmWidth; //得到窗口的寬度 iWindowHeight=2*bm.bmHeight; //得到窗口的高度 if(!InitWindowsClass(hInstance)) //初始化窗口類 return FALSE; if(!InitWindows(hInstance,nCmdShow)) //初始化窗口 return FALSE; while(GetMessage(&Message,0,0,0)) { TranslateMessage(&Message); //消息循環(huán) DispatchMessage(&Message); } return Message.wParam; } long WINAPI WndProc(HWND hWnd,UINT iMessage,UINT wParam,LONG lParam) { PAINTSTRUCT ps; //定義包含繪圖信息的結(jié)構(gòu)變量 switch(iMessage) { case WM_LBUTTONDOWN: //點擊鼠標(biāo)左鍵 iY=iY-10; //位圖高度-10 InvalidateRect(hWnd,NULL,1); //刷新用戶區(qū) break; case WM_RBUTTONDOWN: //點擊鼠標(biāo)右鍵 iY=iY+10; //位圖高度+10 InvalidateRect(hWnd,NULL,1); //刷新用戶區(qū) break; case WM_KEYDOWN: switch(wParam) { case VK_UP: //按上箭頭時,位置-10 iY=iY-10; break; case VK_DOWN: //按下箭頭時,位置+10 iY=iY+10; break; } InvalidateRect(hWnd,NULL,1); //刷新用戶區(qū) break; case WM_CREATE: //初始化窗口消息 hDC=GetDC(hWnd); //得到設(shè)備環(huán)境指針 hdcmem=CreateCompatibleDC(hDC); //得到內(nèi)存指針 ReleaseDC(hWnd,hDC); //刪除設(shè)備環(huán)境指針 case WM_PAINT: //處理繪圖消息 hDC=BeginPaint(hWnd,&ps); //得到設(shè)備環(huán)境指針 if(iY>0&&iY<iWindowHeight/2) //當(dāng)位圖完整的在窗口中時 { SelectObject(hdcmem,hBm); //選入內(nèi)存句柄 BitBlt(hDC,60,iY,bm.bmWidth,bm.bmHeight,hdcmem,0,0,SRCCOPY);//輸出位圖 } else if(iY<=0) //當(dāng)位圖的上邊界超出了窗口時 { TextOut(hDC,0,0,cUpWarn,sizeof(cUpWarn)); //輸出警告 } else //當(dāng)位圖的下邊界超出了窗口時 { TextOut(hDC,0,0,cDownWarn,sizeof(cDownWarn)); //輸出警告 } EndPaint(hWnd,&ps); //輸出環(huán)境句柄 break; case WM_DESTROY: //關(guān)閉窗口消息 DeleteObject(hBm); //刪除內(nèi)存句柄 PostQuitMessage(0); return 0; default: return(DefWindowProc(hWnd,iMessage,wParam,lParam)); } return 0; } BOOL InitWindows(HINSTANCE hInstance, int nCmdShow) { HWND hWnd; hWnd=CreateWindow("BitmapInstance", //窗口類名稱 "位圖顯示實例程序", //標(biāo)題欄名稱 WS_OVERLAPPEDWINDOW, //窗口樣式 CW_USEDEFAULT, //窗口左上角坐標(biāo) 0, iWindowWidth, //采用自定義的高度和寬度 iWindowHeight, NULL, //無父窗口 NULL, //無菜單 hInstance, //當(dāng)前應(yīng)用實例句柄 NULL); //指向傳遞給窗口的參數(shù)的指針 if(!hWnd) //創(chuàng)建失敗 return FALSE; hWndMain=hWnd; //給全局窗口句柄付值 ShowWindow(hWnd,nCmdShow); //顯示窗口 UpdateWindow(hWnd); //刷新用戶區(qū) return TRUE; } BOOL InitWindowsClass(HINSTANCE hInstance) { WNDCLASS WndClass; WndClass.cbClsExtra=0; //無窗口類擴(kuò)展 WndClass.cbWndExtra=0; //無窗口實例擴(kuò)展 WndClass.hbrBackground=(HBRUSH)(GetStockObject(WHITE_BRUSH)); //背景為白色 WndClass.hCursor=LoadCursor(NULL,IDC_ARROW); //光標(biāo)為為箭頭 WndClass.hIcon=LoadIcon(NULL,IDI_APPLICATION); //采用缺省圖標(biāo) WndClass.hInstance=hInstance; //當(dāng)前實例 WndClass.lpfnWndProc=WndProc; //消息處理函數(shù) WndClass.lpszClassName="BitmapInstance"; //窗口類名稱 WndClass.lpszMenuName="Menu"; //定義菜單為Menu WndClass.style=0; //缺省窗口風(fēng)格 return RegisterClass(&WndClass); //返回窗口注冊值 }程序運行結(jié)果:
三、實驗結(jié)果 通過本次試驗我掌握了各種資源的應(yīng)用及資源應(yīng)用的程序設(shè)計方法,熟悉了菜單資源,位圖資源,對話框資源,以及圖標(biāo)資源的創(chuàng)建和應(yīng)用過程。
|
|
|