#include"bmpio.h" static BmpIO g_bmpio; // 画像ファイルを読み込む void LoadImageFile(HWND hWnd,TCHAR *path) { g_bmpio.LoadImage(hWnd,BIT24,path); const TCHAR *error=g_bmpio.GetLastErr(); if(error) MessageBox(hWnd,error,NULL,MB_OK); } // 画像をファイルに保存 void SaveImageFile(HWND hWnd) { g_bmpio.SaveBmp(hWnd,false,BIT24); const TCHAR *error=g_bmpio.GetLastErr(); if(error) MessageBox(hWnd,error,NULL,MB_OK); } // コピー void ClipCopy(HWND hWnd) { g_bmpio.ClipCopy(hWnd); const TCHAR *error=g_bmpio.GetLastErr(); if(error) MessageBox(hWnd,error,NULL,MB_OK); } // 貼り付け void ClipPaste(HWND hWnd) { g_bmpio.ClipPaste(hWnd,BIT24); const TCHAR *error=g_bmpio.GetLastErr(); if(error) MessageBox(hWnd,error,NULL,MB_OK); } // 空のBMPを作成する void CreateEmpty(HWND hWnd) { g_bmpio.CreateEmpty(320,240,BIT24); const TCHAR *error=g_bmpio.GetLastErr(); if(error) MessageBox(hWnd,error,NULL,MB_OK); } LRESULT CALLBACK WindowProc(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam) { HDC hdc; PAINTSTRUCT ps; DWORD width,height; HDC hdc_mem; HDROP hDrop; TCHAR pFullPath[MAX_PATH]; switch(msg) { case WM_CREATE: DragAcceptFiles(hWnd,TRUE); // ドラッグアンドドロップを受け入れる return 0; case WM_DROPFILES: // ドラッグアンドドロップ hDrop=(HDROP)wParam; DragQueryFile(hDrop,0,pFullPath,sizeof(pFullPath)/sizeof(TCHAR)); DragFinish(hDrop); LoadImageFile(hWnd,pFullPath); InvalidateRect(hWnd,NULL,TRUE); return 0; case WM_PAINT: hdc=BeginPaint(hWnd,&ps); width=g_bmpio.GetWidth(); height=g_bmpio.GetHeight(); hdc_mem=g_bmpio.GetHDC(); BitBlt(hdc,0,0,width,height,hdc_mem,0,0,SRCCOPY); EndPaint(hWnd,&ps); return 0; case WM_KEYDOWN: switch(wParam) { case VK_F1: LoadImageFile(hWnd,NULL); break; case VK_F2: SaveImageFile(hWnd); break; case VK_F3: ClipCopy(hWnd); break; case VK_F4: ClipPaste(hWnd); break; case VK_F5: CreateEmpty(hWnd); break; } InvalidateRect(hWnd,NULL,TRUE); return 0; case WM_DESTROY: PostQuitMessage(0); return 0; } return DefWindowProc(hWnd,msg,wParam,lParam); } int WINAPI WinMain(HINSTANCE hInst,HINSTANCE hPrevInst,PSTR lpCmdLine,int nCmdShow) { WNDCLASS wc; MSG msg; wc.style = CS_HREDRAW | CS_VREDRAW; wc.lpfnWndProc = WindowProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hInst; wc.hIcon = LoadIcon(NULL,IDI_APPLICATION); wc.hCursor = LoadCursor(NULL,IDC_ARROW); wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); wc.lpszMenuName = NULL; wc.lpszClassName = _T(__FILE__); if(!RegisterClass(&wc)) return 0; // error HWND hWnd=CreateWindow( _T(__FILE__),_T("test of BmpIO"), WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN | WS_VISIBLE, CW_USEDEFAULT,CW_USEDEFAULT, CW_USEDEFAULT,CW_USEDEFAULT, NULL,NULL,hInst,NULL); if(hWnd==NULL) return 0; // error BOOL bRet; while((bRet=GetMessage(&msg,NULL,0,0))!=0) { if(bRet==-1) break; DispatchMessage(&msg); } return (int)msg.wParam; }