#include "myWin.h" #define SCALE 2 static HBITMAP hB; static BITMAP bB; HWND hwS; static OPENFILENAME CC; static TCHAR strFile[2048],strFileTitle[128]; static TCHAR sFilter[]=TEXT("Text Files\0*.bmp\0All Files\0*.*\0"); void procLButtonDown(HWND hw, WPARAM wp,LPARAM lp){ //■左クリック時処理 if(GetOpenFileName(&CC)){ // GetSaveFileName(&CC)に変更すると保存 HBITMAP hhB=(HBITMAP)LoadImage(0,CC.lpstrFile,IMAGE_BITMAP,0,0,LR_LOADFROMFILE); if(hhB==NULL){ MessageBox(hw,TEXT("Error"),TEXT("Error"),MB_OK); return; } DeleteObject(hB); hB=hhB; SendMessage(hwS,STM_SETIMAGE,(WPARAM)IMAGE_BITMAP, (LPARAM)hB); } InvalidateRect(hw,NULL, TRUE); } void procCreate(HWND hw, WPARAM wp,LPARAM lp){ //■Create時処理 hwS=CreateWindow(TEXT("STATIC"),TEXT(""), WS_CHILD|WS_VISIBLE|WS_BORDER|SS_BITMAP, //SS_BITMAP,SS_BITMAP, 250,0, 680,500, hw, (HMENU)1,hInstance,NULL); CC.lStructSize =sizeof(OPENFILENAME); CC.hwndOwner =hw ; CC.hInstance =hInstance; CC.lpstrFilter =sFilter ; CC.nFilterIndex =1; CC.lpstrCustomFilter=NULL ; CC.nMaxCustFilter=0; CC.lpstrFile =strFile ; CC.nMaxFile =2048; CC.lpstrFileTitle =strFileTitle; CC.nMaxFileTitle =128; CC.lpstrInitialDir =TEXT("D:\\"); CC.lpstrTitle =TEXT("BMP読込み・スタティック表示"); CC.lpstrDefExt =TEXT("bmp") ; CC.Flags =0; SetWindowText(hw,TEXT("BMP読込み・スタティック表示")); MoveWindow(hw,0,0,680,500,TRUE); procLButtonDown(hw,wp,lp) ; } void procPaint(HWND hw, WPARAM wp,LPARAM lp){ GetObject(hB,sizeof(BITMAP), &bB); PAINTSTRUCT ps; RECT rect; HDC hdc = BeginPaint(hw,&ps);GetClientRect(hw,&rect); HDC hBuff= CreateCompatibleDC(hdc); SelectObject(hBuff,hB); SetStretchBltMode(hdc,COLORONCOLOR); StretchBlt(hdc, 0, //rect.right /2 - bB.bmWidth /(SCALE*2),//中央に描くときは0の替わりに 0, //rect.bottom/2 - bB.bmHeight/(SCALE*2),//ここのコメント外したものを有効にする bB.bmWidth/SCALE, bB.bmHeight/SCALE, hBuff,0,0, bB.bmWidth, bB.bmHeight,SRCCOPY); DeleteDC(hBuff); EndPaint(hw,&ps); } LRESULT CALLBACK WndProc(HWND hw, UINT msg, WPARAM wp,LPARAM lp){//■Window Procedure switch(msg){ case WM_DESTROY : PostQuitMessage(0);DeleteObject(hB); ; return 0; case WM_CREATE : procCreate(hw,wp,lp) ; return 0; case WM_PAINT : procPaint(hw,wp,lp) ; return 0; case WM_LBUTTONDOWN : procLButtonDown(hw,wp,lp) ; break; } return DefWindowProc(hw,msg,wp,lp); }