#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"D:\\Desktop\\peo.png");
Bitmap CacheImage( 1024, 768, image->GetPixelFormat() );
Graphics CacheGraphics( &CacheImage );
SolidBrush sbr(Color(128, 128, 128));
CacheGraphics.FillRectangle(&sbr, 0, 0, 1024, 768);
//CacheGraphics.DrawImage(image, rect,0,cy[i++],500,590,UnitPixel);
CacheGraphics.DrawImage(image, rect, 0, 0, 250, 550, 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,FALSE) ;
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+CiNpbmNsdWRlIDxzdGRpby5oPgp1c2luZyBuYW1lc3BhY2UgR2RpcGx1czsKI3ByYWdtYSBjb21tZW50KGxpYiwiZ2RpcGx1cy5saWIiKQoKCgoKdm9pZCBkcmF3KEhEQyBoZGMsaW50IHgsaW50IHkpCnsKCUdkaXBsdXNTdGFydHVwSW5wdXQgZ2RpcGx1c1N0YXJ0dXBJbnB1dDsKCVVMT05HX1BUUiBnZGlwbHVzVG9rZW47ICAvLyBVTE9ORyBQVFIg54K654Sh56ym6Jmf6ZW35pW05Z6L5oyH6YedCglHZGlwbHVzU3RhcnR1cCgmZ2RpcGx1c1Rva2VuLCAmZ2RpcGx1c1N0YXJ0dXBJbnB1dCwgTlVMTCk7CglzdGF0aWMgaW50IGN5W109ezAsNjAwLDEyMDAsMTgwMCwyNDAwfSxpPTA7CglSZWN0IHJlY3QoeCx5LDI1MCw1NTApOyAgICAgICAgICAgICAgLy8oeCx5LGN4LGN5KSB4LHnngrrplovlp4vosrzlnJbnmoTkvY3nva7vvJtjeCxjeeeCuuiyvOWHuuS+hueahOWkp+WwjwoJVW5pdCBzcmN1bml0ID0gVW5pdFBpeGVsOyAvL+WDj+e0oOWkp+WwjwoJSW1hZ2UqIGltYWdlID0gbmV3IEltYWdlKEwiRDpcXERlc2t0b3BcXHBlby5wbmciKTsKCUJpdG1hcCBDYWNoZUltYWdlKCAxMDI0LCA3NjgsIGltYWdlLT5HZXRQaXhlbEZvcm1hdCgpICk7CglHcmFwaGljcyBDYWNoZUdyYXBoaWNzKCAmQ2FjaGVJbWFnZSApOwoJU29saWRCcnVzaCBzYnIoQ29sb3IoMTI4LCAxMjgsIDEyOCkpOwoJQ2FjaGVHcmFwaGljcy5GaWxsUmVjdGFuZ2xlKCZzYnIsIDAsIDAsIDEwMjQsIDc2OCk7CgkvL0NhY2hlR3JhcGhpY3MuRHJhd0ltYWdlKGltYWdlLCByZWN0LDAsY3lbaSsrXSw1MDAsNTkwLFVuaXRQaXhlbCk7IAoJQ2FjaGVHcmFwaGljcy5EcmF3SW1hZ2UoaW1hZ2UsIHJlY3QsIDAsIDAsIDI1MCwgNTUwLCBVbml0UGl4ZWwpOwoKCUdyYXBoaWNzIGdyYXBoaWNzKGhkYyk7IAoJZ3JhcGhpY3MuRHJhd0ltYWdlKCZDYWNoZUltYWdlLCAwLDApOyAgLy8oaW1hZ2UscmVjdCx4LHksY3gsY3ksVW5pdCkKCS8veCx554K66KaB6LK855qE5ZyW55qE5bem5LiK6KeS5L2N572u77ybY3gsY3nngrropoHosrznmoTlnJbnmoTlj7PkuIvop5LkvY3nva4KCTsKCWlmKGk9PTUpaT0wOwoJZGVsZXRlIGltYWdlOwoJR2RpcGx1c1NodXRkb3duKGdkaXBsdXNUb2tlbik7CglyZXR1cm47Cn0KCgpMUkVTVUxUIENBTExCQUNLIFduZFByb2MoSFdORCBod25kLCAgICAgVUlOVCB1TXNnLCAgICAgIFdQQVJBTSB3UGFyYW0sICBMUEFSQU0gbFBhcmFtKQp7CglIREMgICAgICAgICAgICAgICAgICAgICBoZGMgOwoJUEFJTlRTVFJVQ1QgcHMgOwoJUkVDVCAgICAgICAgICAgIHJlY3QgOwoJc3RhdGljIGludCB4PTIwLHk9MjA7Cglzd2l0Y2godU1zZyl7CgljYXNlIFdNX1BBSU5UOgoJCWhkYyA9IEJlZ2luUGFpbnQgKGh3bmQsICZwcyk7CgkJZHJhdyhoZGMseCx5KTsKCQlFbmRQYWludCAoaHduZCwgJnBzKTsKCWNhc2UgV01fQ1JFQVRFOmJyZWFrOwoJY2FzZSBXTV9LRVlET1dOOgoJCXN3aXRjaCAod1BhcmFtKXsKCQljYXNlIFZLX1VQOiB5LS07YnJlYWs7CgkJY2FzZSBWS19ET1dOOnkrKzticmVhazsKCQljYXNlIFZLX0xFRlQ6eC0tO2JyZWFrOwoJCWNhc2UgVktfUklHSFQ6eCsrO2JyZWFrOwoJCWRlZmF1bHQ6IGJyZWFrOwoJCX0KCQlJbnZhbGlkYXRlUmVjdChod25kLE5VTEwsRkFMU0UpIDsKCQlicmVhazsKCWNhc2UgV01fQ0xPU0U6IERlc3Ryb3lXaW5kb3coaHduZCk7YnJlYWs7CgljYXNlIFdNX0RFU1RST1k6IFBvc3RRdWl0TWVzc2FnZSgwKTsgYnJlYWs7CgljYXNlIFdNX0NPTU1BTkQ6YnJlYWs7CgoJZGVmYXVsdDogcmV0dXJuIERlZldpbmRvd1Byb2MoaHduZCx1TXNnLHdQYXJhbSxsUGFyYW0pOwoJfQoKCgp9CgppbnQgV0lOQVBJIFdpbk1haW4oSElOU1RBTkNFIGhJbnN0YW5jZSwKCUhJTlNUQU5DRSBoUHJldkluc3RhbmNlLAoJTFBTVFIgbHBDbWRMaW5lLAoJaW50IG5DbWRTaG93KXsKCQlXTkRDTEFTU0VYIHdjeDsKCQlNU0cgTXNnOyAgICAgICAgLy/oqIrmga8KCQlIV05EIGh3bmQ7ICAvL+S7o+iZnwoJCS8v6Ki75YaK56qX5Y+jCgkJd2N4LmNiU2l6ZSAgICAgICAgICAgICAgID1zaXplb2Yod2N4KTsKCQl3Y3guc3R5bGUgICAgICAgICAgICAgICAgPUNTX0hSRURSQVcgfCBDU19WUkVEUkFXOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v5oyH5a6a6KaW56qX5qij5byP54K677ya5pS56K6K6KaW56qX5aSn5bCP5bCx6YeN57mqCgkJd2N4LmxwZm5XbmRQcm9jICA9V25kUHJvYzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v5oyH5a6a6JmV55CG5Ye95byP54K6V25kUHJvYwoJCXdjeC5jYkNsc0V4dHJhICAgPTA7CgkJd2N4LmNiV25kRXh0cmEgICA9MDsKCQl3Y3guaEluc3RhbmNlICAgID1oSW5zdGFuY2U7CgkJd2N4LmhJY29uICAgICAgICAgICAgICAgID1Mb2FkSWNvbihOVUxMLCBJRElfQVBQTElDQVRJT04pOyAgICAgICAgICAgICAgICAgICAgICAgLy9Mb2FkSWNvbiDovInlhaXlnJbnpLrkvpvnqIvlvI/kvb/nlKjjgIIKCQl3Y3guaEN1cnNvciAgICAgICAgICAgICAgPUxvYWRDdXJzb3IoTlVMTCwgSURDX0FSUk9XKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAvL0xvYWRDdXJzb3Ig6LyJ5YWl5ruR6byg5ri45qiZ5L6b56iL5byP5L2/55So44CCCgkJd2N4LmhickJhY2tncm91bmQ9IChIQlJVU0gpIEdldFN0b2NrT2JqZWN0IChHUkFZX0JSVVNIKSA7ICAgLy9HZXRTdG9ja09iamVjdOWPluW+l+S4gOWAi+WcluW9oueJqeS7tgoJCXdjeC5scHN6TWVudU5hbWUgPSBOVUxMOwoJCXdjeC5scHN6Q2xhc3NOYW1lPSJNYWluQ2xhc3MiOwoJCXdjeC5oSWNvblNtICAgICAgICAgICAgICA9TG9hZEljb24oTlVMTCwgSURJX0FQUExJQ0FUSU9OKTsKCQlpZighUmVnaXN0ZXJDbGFzc0V4KCZ3Y3gpKXsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy/ngrrnqIvlvI/oppbnqpfoqLvlhoroppbnqpfpoZ7liKXjgIIKCQkJTWVzc2FnZUJveChOVUxMLCJSZWdpc3RlckNsYXNzIEVycm9yIiwiRVJST1IiLE1CX09LKTsKCQkJcmV0dXJuIDA7CgkJfQoJCS8v5Ym15bu656qX5Y+jCgkJaHduZD1DcmVhdGVXaW5kb3coICAvL+agueaTmuimlueql+mhnuWIpeW7uueri+S4gOWAi+imlueql++8jOWbnuWCs+imlueql+S7o+iZn+WIsGh3bmTjgIIKCQkJIk1haW5DbGFzcyIsCgkJCSJUZXN0IENyZWF0ZSBXaW5kb3ciLAoJCQlXU19PVkVSTEFQUEVEV0lORE9XLAoJCQlDV19VU0VERUZBVUxULAoJCQlDV19VU0VERUZBVUxULAoJCQkxMDI0LDc2OCwKCQkJKEhXTkQpTlVMTCwKCQkJKEhNRU5VKU5VTEwsCgkJCWhJbnN0YW5jZSwKCQkJTlVMTCAgIAoJCQkpOwoJCWlmKGh3bmQ9PU5VTEwpewoJCQlNZXNzYWdlQm94KE5VTEwsIkNyZWF0ZVdpbmRvdyBFcnJvciIsIkVSUk9SIixNQl9PSyk7CgkJCXJldHVybiAwOwoJCX0KCQlTaG93V2luZG93KGh3bmQsbkNtZFNob3cpOyAgLy/lnKjonqLluZXkuIrpoa/npLroppbnqpfjgIIKCQlVcGRhdGVXaW5kb3coaHduZCk7ICAgICAgICAgICAgICAgICAgICAgLy/mjIfnpLroppbnqpfoh6rmiJHmm7TmlrAKCQl3aGlsZShHZXRNZXNzYWdlKCZNc2csTlVMTCwwLDApPjApeyAgLy/lvp7oqIrmga/kvYfliJfkuK3lj5blvpfoqIrmga8KCQkJVHJhbnNsYXRlTWVzc2FnZSgmTXNnKTsgIC8vIOi9ieitr+afkOS6m+mNteebpOioiuaBr+OAggoJCQlEaXNwYXRjaE1lc3NhZ2UoJk1zZyk7ICAgLy/lsIfoqIrmga/nmbzpgIHntaboppbnqpfoqIrmga/omZXnkIbnqIvlvI/jgIIKCQl9CgkJcmV0dXJuIE1zZy53UGFyYW07Cgp9Cg==