#include "myWin.h" #define SCALE 2 static HBITMAP hB1; static BITMAP bB1; //HWND hwS; static HDC hBuff; static int imode=0; 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){ //‘ΆƒNƒŠƒbƒNŽžˆ— if(GetOpenFileName(&CC)){ // GetSaveFileName(&CC)‚ɕύX‚·‚ι‚Ζ•Ϋ‘Ά 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(hB1); hB1=hhB; } InvalidateRect(hw,NULL, TRUE); } void procCreate(HWND hw, WPARAM wp,LPARAM lp){ //‘CreateŽžˆ— 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("ƒ‰ƒXƒ^ƒIƒyƒŒ[ƒVƒ‡ƒ“"); CC.lpstrDefExt =TEXT("bmp") ; CC.Flags =0; imode=0; SetWindowText(hw,TEXT("0 ˜g•, ‰~”’, rop=SRCAND" )); MoveWindow(hw,0,0,440,440,TRUE); procLButtonDown(hw,wp,lp); } void procRButtonDown(HWND hw, WPARAM wp,LPARAM lp){ imode++; if(imode>7) imode=0; TCHAR str[256]; switch(imode){ case 0: lstrcpy(str,TEXT("0 ˜g•, ‰~”’, rop=SRCAND" )); break; case 1: lstrcpy(str,TEXT("1 ˜g•, ‰~”’, rop=MERGEPAINT" )); break; case 2: lstrcpy(str,TEXT("2 ˜g•, ‰~”’, rop=NOTSRCERASE")); break; case 3: lstrcpy(str,TEXT("3 ˜g•, ‰~”’, rop=SRCPAINT" )); break; case 4: lstrcpy(str,TEXT("4 ˜g”’, ‰~•, rop=SRCPAINT" )); break; case 5: lstrcpy(str,TEXT("5 ˜g”’, ‰~•, rop=PATPAINT" )); break; case 6: lstrcpy(str,TEXT("6 ˜g”’, ‰~•, rop=SRCERASE" )); break; case 7: lstrcpy(str,TEXT("7 ˜g”’, ‰~•, rop=SRCINVERT" )); break; } SetWindowText(hw, str ); InvalidateRect(hw, NULL,TRUE); } void procPaint(HWND hw, WPARAM wp,LPARAM lp){ GetObject(hB1,sizeof(BITMAP), &bB1); PAINTSTRUCT ps; RECT rect; HDC hdc = BeginPaint(hw,&ps);GetClientRect(hw,&rect); hBuff= CreateCompatibleDC(hdc);HBRUSH h1; int C1=0, C2=0xFFFFFF; if(imode>=4){C1=0xFFFFFF, C2=0;} h1=CreateSolidBrush(C1); SelectObject(hdc,h1); Rectangle(hdc,0,0,420,400); DeleteObject(h1); h1=CreateSolidBrush(C2); SelectObject(hdc,h1); Ellipse(hdc, 30,20,390,380); DeleteObject(h1); SelectObject(hBuff,hB1);DWORD rop; switch(imode){ case 0: rop=SRCAND ; break; case 1: rop=MERGEPAINT ; break; case 2: rop=NOTSRCERASE; break; case 3: rop=SRCPAINT ; break; case 4: rop=SRCPAINT ; break; case 5: rop=PATPAINT ; break; case 6: rop=SRCERASE ; break; case 7: rop=SRCINVERT ; break; } BitBlt(hdc,10,0,410,400, hBuff,0,0,rop); 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(hB1); ; 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; case WM_RBUTTONDOWN : procRButtonDown(hw,wp,lp) ; break; } return DefWindowProc(hw,msg,wp,lp); }