#include<windows.h>
#include<gdiplus.h>
#include <stdio.h>
using namespace Gdiplus;
#pragma comment(lib,"gdiplus.lib")
void draw( HDC hdc,int x,int y)
{
GdiplusStartupInput gdiplusStartupInput;
ULONG_PTR gdiplusToken; // ULONG PTR 為無符號長整型指針
GdiplusStartup( & gdiplusToken, & gdiplusStartupInput, NULL ) ;
static int cy[ ] = { 0 ,600 ,1200 ,1800 ,2400 } ,i= 0 ;
Rect rect( x,y,250 ,550 ) ; //(x,y,cx,cy) x,y為開始貼圖的位置;cx,cy為貼出來的大小
Unit srcunit = UnitPixel; //像素大小
Image* image = new Image( L"peo.png" ) ;
Bitmap CacheImage( 1024 , 768 ) ;
Graphics CacheGraphics( & CacheImage ) ;
CacheGraphics.DrawImage ( image, rect,0 ,cy[ i++ ] ,500 ,590 ,UnitPixel) ;
Graphics graphics( hdc) ;
graphics.DrawImage ( & CacheImage, 0 ,0 ) ; //(image,rect,x,y,cx,cy,Unit)
//x,y為要貼的圖的左上角位置;cx,cy為要貼的圖的右下角位置
;
if ( i== 5 ) i= 0 ;
delete image;
GdiplusShutdown( gdiplusToken) ;
return ;
}
LRESULT CALLBACK WndProc( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
HDC hdc ;
PAINTSTRUCT ps ;
RECT rect ;
static int x= 20 ,y= 20 ;
switch ( uMsg) {
case WM_PAINT:
hdc = BeginPaint ( hwnd, & ps) ;
draw( hdc,x,y) ;
EndPaint ( hwnd, & ps) ;
case WM_CREATE: break ;
case WM_KEYDOWN:
switch ( wParam) {
case VK_UP: y-- ; break ;
case VK_DOWN: y++ ; break ;
case VK_LEFT: x-- ; break ;
case VK_RIGHT: x++ ; break ;
default : break ;
}
InvalidateRect( hwnd,NULL ,true ) ;
UpdateWindow( hwnd) ;
break ;
case WM_CLOSE: DestroyWindow( hwnd) ; break ;
case WM_DESTROY: PostQuitMessage( 0 ) ; break ;
case WM_COMMAND: break ;
default : return DefWindowProc( hwnd,uMsg,wParam,lParam) ;
}
}
int WINAPI WinMain( HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow) {
WNDCLASSEX wcx;
MSG Msg; //訊息
HWND hwnd; //代號
//註冊窗口
wcx.cbSize = sizeof ( wcx) ;
wcx.style = CS_HREDRAW | CS_VREDRAW; //指定視窗樣式為:改變視窗大小就重繪
wcx.lpfnWndProc = WndProc; //指定處理函式為WndProc
wcx.cbClsExtra = 0 ;
wcx.cbWndExtra = 0 ;
wcx.hInstance = hInstance;
wcx.hIcon = LoadIcon( NULL , IDI_APPLICATION) ; //LoadIcon 載入圖示供程式使用。
wcx.hCursor = LoadCursor( NULL , IDC_ARROW) ; //LoadCursor 載入滑鼠游標供程式使用。
wcx.hbrBackground = ( HBRUSH) GetStockObject ( GRAY_BRUSH) ; //GetStockObject取得一個圖形物件
wcx.lpszMenuName = NULL ;
wcx.lpszClassName = "MainClass" ;
wcx.hIconSm = LoadIcon( NULL , IDI_APPLICATION) ;
if ( ! RegisterClassEx( & wcx) ) { //為程式視窗註冊視窗類別。
MessageBox( NULL ,"RegisterClass Error" ,"ERROR" ,MB_OK) ;
return 0 ;
}
//創建窗口
hwnd= CreateWindow( //根據視窗類別建立一個視窗,回傳視窗代號到hwnd。
"MainClass" ,
"Test Create Window" ,
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
1024 ,768 ,
( HWND) NULL ,
( HMENU) NULL ,
hInstance,
NULL
) ;
if ( hwnd== NULL ) {
MessageBox( NULL ,"CreateWindow Error" ,"ERROR" ,MB_OK) ;
return 0 ;
}
ShowWindow( hwnd,nCmdShow) ; //在螢幕上顯示視窗。
UpdateWindow( hwnd) ; //指示視窗自我更新
while ( GetMessage( & Msg,NULL ,0 ,0 ) > 0 ) { //從訊息佇列中取得訊息
TranslateMessage( & Msg) ; // 轉譯某些鍵盤訊息。
DispatchMessage( & Msg) ; //將訊息發送給視窗訊息處理程式。
}
return Msg.wParam ;
}
I2luY2x1ZGU8d2luZG93cy5oPgojaW5jbHVkZTxnZGlwbHVzLmg+CiNpbmNsdWRlIDxzdGRpby5oPgp1c2luZyBuYW1lc3BhY2UgR2RpcGx1czsKI3ByYWdtYSBjb21tZW50KGxpYiwiZ2RpcGx1cy5saWIiKQoKCgoKdm9pZCBkcmF3KEhEQyBoZGMsaW50IHgsaW50IHkpCnsKICAgR2RpcGx1c1N0YXJ0dXBJbnB1dCBnZGlwbHVzU3RhcnR1cElucHV0OwogICBVTE9OR19QVFIgZ2RpcGx1c1Rva2VuOyAgLy8gVUxPTkcgUFRSIOeCuueEoeespuiZn+mVt+aVtOWei+aMh+mHnQogICBHZGlwbHVzU3RhcnR1cCgmZ2RpcGx1c1Rva2VuLCAmZ2RpcGx1c1N0YXJ0dXBJbnB1dCwgTlVMTCk7CiAgIHN0YXRpYyBpbnQgY3lbXT17MCw2MDAsMTIwMCwxODAwLDI0MDB9LGk9MDsKICAgUmVjdCByZWN0KHgseSwyNTAsNTUwKTsJCS8vKHgseSxjeCxjeSkgeCx554K66ZaL5aeL6LK85ZyW55qE5L2N572u77ybY3gsY3nngrrosrzlh7rkvobnmoTlpKflsI8KICAgVW5pdCBzcmN1bml0ID0gVW5pdFBpeGVsOyAvL+WDj+e0oOWkp+WwjwogICBJbWFnZSogaW1hZ2UgPSBuZXcgSW1hZ2UoTCJwZW8ucG5nIik7CiAgIEJpdG1hcCBDYWNoZUltYWdlKCAxMDI0LCA3NjggKTsKICAgR3JhcGhpY3MgQ2FjaGVHcmFwaGljcyggJkNhY2hlSW1hZ2UgKTsKICAgQ2FjaGVHcmFwaGljcy5EcmF3SW1hZ2UoaW1hZ2UsIHJlY3QsMCxjeVtpKytdLDUwMCw1OTAsVW5pdFBpeGVsKTsgCiAgIAogICBHcmFwaGljcyBncmFwaGljcyhoZGMpOyAKICAgZ3JhcGhpY3MuRHJhd0ltYWdlKCZDYWNoZUltYWdlLCAwLDApOyAgLy8oaW1hZ2UscmVjdCx4LHksY3gsY3ksVW5pdCkKCQkJCQkJCQkJCQkJCQkJICAvL3gseeeCuuimgeiyvOeahOWclueahOW3puS4iuinkuS9jee9ru+8m2N4LGN554K66KaB6LK855qE5ZyW55qE5Y+z5LiL6KeS5L2N572uCiAgIDsKICAgaWYoaT09NSlpPTA7CiAgIGRlbGV0ZSBpbWFnZTsKICAgR2RpcGx1c1NodXRkb3duKGdkaXBsdXNUb2tlbik7CiAgIHJldHVybjsKfQoKCkxSRVNVTFQgQ0FMTEJBQ0sgV25kUHJvYyhIV05EIGh3bmQsCVVJTlQgdU1zZywJV1BBUkFNIHdQYXJhbSwJTFBBUkFNIGxQYXJhbSkKewoJSERDCQkJaGRjIDsKCVBBSU5UU1RSVUNUIHBzIDsKCVJFQ1QJCXJlY3QgOwoJc3RhdGljIGludCB4PTIwLHk9MjA7Cglzd2l0Y2godU1zZyl7CgkJY2FzZSBXTV9QQUlOVDoKCQkJaGRjID0gQmVnaW5QYWludCAoaHduZCwgJnBzKTsKCQkJIGRyYXcoaGRjLHgseSk7CgkJCUVuZFBhaW50IChod25kLCAmcHMpOwoJCWNhc2UgV01fQ1JFQVRFOmJyZWFrOwoJCWNhc2UgV01fS0VZRE9XTjoKCQkJc3dpdGNoICh3UGFyYW0pewoJCQkJY2FzZSBWS19VUDogeS0tO2JyZWFrOwoJCQkJY2FzZSBWS19ET1dOOnkrKzticmVhazsKCQkJCWNhc2UgVktfTEVGVDp4LS07YnJlYWs7CgkJCQljYXNlIFZLX1JJR0hUOngrKzticmVhazsKCQkJCWRlZmF1bHQ6IGJyZWFrOwoJCQl9CgkJCUludmFsaWRhdGVSZWN0KGh3bmQsTlVMTCx0cnVlKSA7CgkJCVVwZGF0ZVdpbmRvdyhod25kKTsKCQkJYnJlYWs7CgkJY2FzZSBXTV9DTE9TRTogRGVzdHJveVdpbmRvdyhod25kKTticmVhazsKCQljYXNlIFdNX0RFU1RST1k6IFBvc3RRdWl0TWVzc2FnZSgwKTsgYnJlYWs7CgkJY2FzZSBXTV9DT01NQU5EOmJyZWFrOwoKCQlkZWZhdWx0OiByZXR1cm4gRGVmV2luZG93UHJvYyhod25kLHVNc2csd1BhcmFtLGxQYXJhbSk7Cgl9CgoKCQp9CgppbnQgV0lOQVBJIFdpbk1haW4oSElOU1RBTkNFIGhJbnN0YW5jZSwKCQkJCSAgIEhJTlNUQU5DRSBoUHJldkluc3RhbmNlLAoJCQkJICAgTFBTVFIgbHBDbWRMaW5lLAoJCQkJICAgaW50IG5DbWRTaG93KXsKCVdORENMQVNTRVggd2N4OwoJTVNHIE1zZzsJLy/oqIrmga8KCUhXTkQgaHduZDsgIC8v5Luj6JmfCgkvL+iou+WGiueql+WPowoJd2N4LmNiU2l6ZQkJID1zaXplb2Yod2N4KTsKCXdjeC5zdHlsZQkJID1DU19IUkVEUkFXIHwgQ1NfVlJFRFJBVzsJCQkJCSAvL+aMh+Wumuimlueql+aoo+W8j+eCuu+8muaUueiuiuimlueql+Wkp+Wwj+WwsemHjee5qgoJd2N4LmxwZm5XbmRQcm9jCSA9V25kUHJvYzsJCQkJCQkJCQkgLy/mjIflrpromZXnkIblh73lvI/ngrpXbmRQcm9jCgl3Y3guY2JDbHNFeHRyYQkgPTA7Cgl3Y3guY2JXbmRFeHRyYSAgID0wOwoJd2N4LmhJbnN0YW5jZQkgPWhJbnN0YW5jZTsKCXdjeC5oSWNvbgkJID1Mb2FkSWNvbihOVUxMLCBJRElfQVBQTElDQVRJT04pOwkJCSAvL0xvYWRJY29uIOi8ieWFpeWcluekuuS+m+eoi+W8j+S9v+eUqOOAggoJd2N4LmhDdXJzb3IJCSA9TG9hZEN1cnNvcihOVUxMLCBJRENfQVJST1cpOwkJCQkgLy9Mb2FkQ3Vyc29yIOi8ieWFpea7kem8oOa4uOaomeS+m+eoi+W8j+S9v+eUqOOAggoJd2N4LmhickJhY2tncm91bmQ9IChIQlJVU0gpIEdldFN0b2NrT2JqZWN0IChHUkFZX0JSVVNIKSA7ICAgLy9HZXRTdG9ja09iamVjdOWPluW+l+S4gOWAi+WcluW9oueJqeS7tgoJd2N4Lmxwc3pNZW51TmFtZSA9IE5VTEw7Cgl3Y3gubHBzekNsYXNzTmFtZT0iTWFpbkNsYXNzIjsKCXdjeC5oSWNvblNtCQkgPUxvYWRJY29uKE5VTEwsIElESV9BUFBMSUNBVElPTik7CglpZighUmVnaXN0ZXJDbGFzc0V4KCZ3Y3gpKXsJCQkJCQkJCQkgLy/ngrrnqIvlvI/oppbnqpfoqLvlhoroppbnqpfpoZ7liKXjgIIKCQlNZXNzYWdlQm94KE5VTEwsIlJlZ2lzdGVyQ2xhc3MgRXJyb3IiLCJFUlJPUiIsTUJfT0spOwoJCXJldHVybiAwOwoJfQoJLy/libXlu7rnqpflj6MKCWh3bmQ9Q3JlYXRlV2luZG93KCAgLy/moLnmk5roppbnqpfpoZ7liKXlu7rnq4vkuIDlgIvoppbnqpfvvIzlm57lgrPoppbnqpfku6PomZ/liLBod25k44CCCgkJICJNYWluQ2xhc3MiLAoJCSAiVGVzdCBDcmVhdGUgV2luZG93IiwKCQkgV1NfT1ZFUkxBUFBFRFdJTkRPVywKCQkgQ1dfVVNFREVGQVVMVCwKCQkgQ1dfVVNFREVGQVVMVCwKCQkgMTAyNCw3NjgsCgkJIChIV05EKU5VTEwsCgkJIChITUVOVSlOVUxMLAoJCSBoSW5zdGFuY2UsCgkJIE5VTEwJCgkJICk7CglpZihod25kPT1OVUxMKXsKCQlNZXNzYWdlQm94KE5VTEwsIkNyZWF0ZVdpbmRvdyBFcnJvciIsIkVSUk9SIixNQl9PSyk7CgkJcmV0dXJuIDA7Cgl9CglTaG93V2luZG93KGh3bmQsbkNtZFNob3cpOyAgLy/lnKjonqLluZXkuIrpoa/npLroppbnqpfjgIIKCVVwZGF0ZVdpbmRvdyhod25kKTsJCQkvL+aMh+ekuuimlueql+iHquaIkeabtOaWsAoJd2hpbGUoR2V0TWVzc2FnZSgmTXNnLE5VTEwsMCwwKT4wKXsgIC8v5b6e6KiK5oGv5L2H5YiX5Lit5Y+W5b6X6KiK5oGvCgkJVHJhbnNsYXRlTWVzc2FnZSgmTXNnKTsgIC8vIOi9ieitr+afkOS6m+mNteebpOioiuaBr+OAggoJCURpc3BhdGNoTWVzc2FnZSgmTXNnKTsgICAvL+Wwh+ioiuaBr+eZvOmAgee1puimlueql+ioiuaBr+iZleeQhueoi+W8j+OAggoJfQoJcmV0dXJuIE1zZy53UGFyYW07Cgp9Cg==