디시인사이드 갤러리

갤러리 이슈박스, 최근방문 갤러리

갤러리 본문 영역

프갤형님들 윈도우 API 잔상남는것좀 도와주세요

Help(61.83) 2012.12.13 11:29:16
조회 103 추천 0 댓글 8

#include <windows.h>
#include <math.h>
#include "resource2.h"

#define WIDTH  1024
#define HEIGHT 768
#define X      20    //리소스의 좌표 X축 값
#define Y      20    //리소스의 좌표 Y축 값

LRESULT CALLBACK WndProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam);

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdLine, int nCmdShow)
{
   HWND     hwnd;
   MSG         msg;
   WNDCLASS    WndClass; 

   WndClass.style         = CS_HREDRAW | CS_VREDRAW;
   WndClass.lpfnWndProc    = WndProc;       
   WndClass.cbClsExtra    = 0;       
   WndClass.cbWndExtra    = 0;       
   WndClass.hInstance     = hInstance;       
   WndClass.hIcon        = LoadIcon(NULL, IDI_APPLICATION);
   WndClass.hCursor     = LoadCursor(NULL, IDC_ARROW);   
   WndClass.hbrBackground    = (HBRUSH)GetStockObject(WHITE_BRUSH);   
   WndClass.lpszMenuName    = NULL;       
   WndClass.lpszClassName     = "Window Class Name";   
   RegisterClass(&WndClass);   
   hwnd = CreateWindow(    "Window Class Name",
            "Window Title Name",
            WS_OVERLAPPEDWINDOW,
            CW_USEDEFAULT,   
            CW_USEDEFAULT,   
            WIDTH,   
            HEIGHT,   
            NULL,   
            NULL,   
            hInstance,   
            NULL    
               );

   ShowWindow(hwnd, nCmdShow);
   UpdateWindow(hwnd);

   while(GetMessage(&msg, NULL, 0, 0))
   {
      TranslateMessage(&msg);   
      DispatchMessage(&msg);   
   } 

   return (int)msg.wParam;
}


LRESULT CALLBACK WndProc (HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)    
{
    HDC hdc, mem1dc, mem2dc;
    PAINTSTRUCT ps;
    static RECT rectView;
    static HBITMAP hBit1, hBit2, oldBit1, oldBit2, c;   
    static int x[4], y[4], stepX, stepY, cnt, mx, my, Drag, dir[2], f, s;
    unsigned long int i;

    switch (iMsg)
    {
        case WM_CREATE:       

            hBit2 = LoadBitmap(((LPCREATESTRUCT)lParam) -> hInstance, MAKEINTRESOURCE(IDB_BITMAP2));
            c = LoadBitmap(((LPCREATESTRUCT)lParam) -> hInstance, MAKEINTRESOURCE(IDB_BITMAP1));
           
            x[0] = 100;
            y[0] = 100;
            x[1] = 800;
            y[1] = 100;
            x[2] = 800;
            y[2] = 490;
            x[3] = 101;
            y[3] = 490;
            stepX = 0;
            stepY = 0;
            Drag = 0;
            cnt = 0;       
            mx = 0;
            my = 0;
            dir[0] = 0;
            dir[1] = 0;
            dir[2] = 0;
            dir[3] = 0;
            f = 4;
            s = 0;
            SetTimer(hwnd, 1, 100, NULL);
            break;

        case WM_LBUTTONDOWN:

            s++;
            s = s & 3;
            mx = LOWORD(lParam);
            my = HIWORD(lParam);         
            Drag = 1;         
            stepX = (x[0] - mx) / 12;          
            stepY = (y[0] - my) / 12;  
           
            if(abs(x[0] - mx) > abs(y[0] - my))
            {
                if((x[0] - mx) >= 0)
                    dir[0] = 1*f;
                else
                    dir[0] = 3*f;
            }
            else if(abs(x[0] - mx) < abs(y[0] - my))
            {                 
                if((y[0] - my) >= 0)
                    dir[0] = 2*f;
                else
                    dir[0] = 0*f;
            }           

            hdc = GetDC(hwnd);

            if(hBit1 == NULL)
                hBit1 = CreateCompatibleBitmap(hdc, WIDTH, HEIGHT);

            mem1dc = CreateCompatibleDC(hdc);
            mem2dc = CreateCompatibleDC(mem1dc);
            oldBit1 = (HBITMAP)SelectObject(mem1dc, hBit1);
            oldBit2 = (HBITMAP)SelectObject(mem2dc, hBit2);
            BitBlt(mem1dc, 0, 0, WIDTH, HEIGHT, mem2dc, 0, 0, SRCCOPY);

            SelectObject(mem2dc, c);
            BitBlt(mem1dc, 150, 150, 600, 250, mem2dc, 0, 392, SRCCOPY);

            for(i = 0; i < 4; i++)
            {
                   if(i)
                {
                    BitBlt(mem1dc, x[i], y[i], X, Y, mem2dc, (dir[i]+s)*X, Y*i*2, SRCAND);
                    BitBlt(mem1dc, x[i], y[i], X, Y, mem2dc, (dir[i]+s)*X, Y*i*2+Y, SRCPAINT);
                }
                else
                {                   
                    BitBlt(mem1dc, x[i], y[i], X, Y, mem2dc, (dir[i]+s)*X, Y*i*2, SRCAND);
                    BitBlt(mem1dc, x[i], y[i], X, Y, mem2dc, (dir[i]+s)*X, Y*i*2+Y, SRCPAINT);                   
                }
            }
           
            SelectObject(mem2dc, oldBit2);
            DeleteDC(mem2dc);
            SelectObject(mem1dc, oldBit1);
            DeleteDC(mem1dc);
            ReleaseDC(hwnd, hdc);
            InvalidateRgn(hwnd, NULL, TRUE);
            cnt = 0;         
            break;
         
        case WM_LBUTTONUP:

            Drag = FALSE;           
            InvalidateRgn(hwnd, NULL, TRUE);
            break;

        case WM_MOUSEMOVE:

            if(!Drag)
                break;
           
            s++;
            s = s & 3;           
            mx = LOWORD(lParam);
            my = HIWORD(lParam);         
            stepX = (x[0] - mx) / 12;          
            stepY = (y[0] - my) / 12;            
           
            if(abs(x[0] - mx) > abs(y[0] - my))
            {
                if((x[0] - mx) >= 0)
                    dir[0] = 1*f;
                else
                    dir[0] = 3*f;
            }
            else if(abs(x[0] - mx) < abs(y[0] - my))
            {                 
                if((y[0] - my) >= 0)
                    dir[0] = 2*f;
                else
                    dir[0] = 0*f;
            }            

            hdc = GetDC(hwnd);

            if(hBit1 == NULL)
                hBit1 = CreateCompatibleBitmap(hdc, WIDTH, HEIGHT);

            mem1dc = CreateCompatibleDC(hdc);
            mem2dc = CreateCompatibleDC(mem1dc);
            oldBit1 = (HBITMAP)SelectObject(mem1dc, hBit1);
            oldBit2 = (HBITMAP)SelectObject(mem2dc, hBit2);
            BitBlt(mem1dc, 0, 0, WIDTH, HEIGHT, mem2dc, 0, 0, SRCCOPY);

            SelectObject(mem2dc, c);
            BitBlt(mem1dc, 150, 150, 600, 250, mem2dc, 0, 392, SRCCOPY);

            for(i = 0; i < 4; i++)
            {
                   if(i)
                {
                    BitBlt(mem1dc, x[i], y[i], X, Y, mem2dc, (dir[i]+s)*X, Y*i*2, SRCAND);
                    BitBlt(mem1dc, x[i], y[i], X, Y, mem2dc, (dir[i]+s)*X, Y*i*2+Y, SRCPAINT);
                }
                else
                {                   
                    BitBlt(mem1dc, x[i], y[i], X, Y, mem2dc, (dir[i]+s)*X, Y*i*2, SRCAND);
                    BitBlt(mem1dc, x[i], y[i], X, Y, mem2dc, (dir[i]+s)*X, Y*i*2+Y, SRCPAINT);                   
                }
            }    
           
            SelectObject(mem2dc, oldBit2);
            DeleteDC(mem2dc);
            SelectObject(mem1dc, oldBit1);
            DeleteDC(mem1dc);
            ReleaseDC(hwnd, hdc);         
            cnt = 0;
            InvalidateRgn(hwnd, NULL, TRUE);
            break;
       
        case WM_KEYDOWN:
       
            s++;
            s = s & 3;
           
            switch(wParam)
            {
                case VK_LEFT:
                    x[0] -= 5;
                    dir[0] = 1*f;

                    if((x[0] < rectView.left) || ((y[0] > 200) && (y[0] < 500) && (x[0] < 850) && (x[0] > 150)))
                        x[0] += 5;
                    break;
               
                case VK_RIGHT:
                    x[0] += 5;
                    dir[0] = 3*f;
                   
                    if((x[0] > rectView.right - X) || ((y[0] > 200) && (y[0] < 500) && (x[0] < 850) && (x[0] > 150)))
                        x[0] -= 5;
                    break;
               
                case VK_UP:
                    y[0] -= 5;
                    dir[0] = 2*f;

                    if((y[0] < rectView.top) || ((y[0] > 200) && (y[0] < 500) && (x[0] < 850) && (x[0] > 150)))
                        y[0] += 5;
                    break;
               
                case VK_DOWN:
                    y[0] += 5;
                    dir[0] = 0*f;

                    if((y[0] > rectView.bottom - Y) || ((y[0] > 200) && (y[0] < 500) && (x[0] < 850) && (x[0] > 150)))
                        y[0] -= 5;
                    break;
            }             
           
            hdc = GetDC(hwnd);

            if(hBit1 == NULL)
                hBit1 = CreateCompatibleBitmap(hdc, WIDTH, HEIGHT);

            mem1dc = CreateCompatibleDC(hdc);
            mem2dc = CreateCompatibleDC(mem1dc);
            oldBit1 = (HBITMAP)SelectObject(mem1dc, hBit1);
            oldBit2 = (HBITMAP)SelectObject(mem2dc, hBit2);
            BitBlt(mem1dc, 0, 0, WIDTH, HEIGHT, mem2dc, 0, 0, SRCCOPY); 

            SelectObject(mem2dc, c);
            BitBlt(mem1dc, 150, 150, 600, 250, mem2dc, 0, 392, SRCCOPY);
           
            for(i = 0; i < 4; i++)
            {
                   if(i)
                {
                    BitBlt(mem1dc, x[i], y[i], X, Y, mem2dc, (dir[i]+s)*X, Y*i*2, SRCAND);
                    BitBlt(mem1dc, x[i], y[i], X, Y, mem2dc, (dir[i]+s)*X, Y*i*2+Y, SRCPAINT);
                }
                else
                {                   
                    BitBlt(mem1dc, x[i], y[i], X, Y, mem2dc, (dir[i]+s)*X, Y*i*2, SRCAND);
                    BitBlt(mem1dc, x[i], y[i], X, Y, mem2dc, (dir[i]+s)*X, Y*i*2+Y, SRCPAINT);                   
                }
            }          
           
            SelectObject(mem2dc, oldBit2);
            DeleteDC(mem2dc);
            SelectObject(mem1dc, oldBit1);
            DeleteDC(mem1dc);
            ReleaseDC(hwnd, hdc);              
            InvalidateRgn(hwnd, NULL, TRUE);
            break;
       
        case  WM_TIMER:

            cnt++;
            s++;
            s = s & 3;
            x[0] -= stepX;
            y[0] -= stepY;

            if((y[0] > 200) && (y[0] < 500) && (x[0] < 850) && (x[0] > 150))
            {
                x[0] += stepX;
                y[0] += stepY;
                stepX = 0;
                stepY = 0;
                cnt = 0;
            }

            for(i = 1; i < 4; i++)
            {
                if(abs(x[0] - x[i]) > abs(y[0] - y[i]))
                {
                    if((x[0] - x[i]) >= 0)
                    {
                        x[i] += 7-i;
                        dir[i] = 3*f;
                       
                        if((x[i] > rectView.right - X) || ((y[i] > 200) && (y[i] < 500) && (x[i] < 850) && (x[i] > 150)))
                            x[i] -= 7-i;
                    }
                    else
                    {
                        x[i] -= 7-i;
                        dir[i] = 1*f;
                       
                        if((x[i] < rectView.left) || ((y[i] > 200) && (y[i] < 500) && (x[i] < 850) && (x[i] > 150)))
                            x[i] += 7-i;
                    }
                       
                }
                else //if(abs(x[0] - x[i]) < abs(y[0] - y[i]))
                {                 
                    if((y[0] - y[i]) >= 0)
                    {
                        y[i] += 7-i;
                        dir[i] = 0*f;
                       
                        if((y[i] > rectView.bottom - Y) || ((y[i] > 200) && (y[i] < 500) && (x[i] < 850) && (x[i] > 150)))
                            y[i] -= 7-i; 
                    }
                    else
                    {
                        y[i] -= 7-i;
                        dir[i] = 2*f;
                       
                        if((y[i] < rectView.top) || ((y[i] > 200) && (y[i] < 500) && (x[i] < 850) && (x[i] > 150)))
                            y[i] += 7-i; 
                        
                    }
                }                
            }           
           
            if(cnt == 12)
            {
                stepX = 0;
                stepY = 0;
                cnt = 0;
            }

            hdc = GetDC(hwnd);

            if(hBit1 == NULL)
                hBit1 = CreateCompatibleBitmap(hdc, WIDTH, HEIGHT);

            mem1dc = CreateCompatibleDC(hdc);
            mem2dc = CreateCompatibleDC(mem1dc);
            oldBit1 = (HBITMAP)SelectObject(mem1dc, hBit1);
            oldBit2 = (HBITMAP)SelectObject(mem2dc, hBit2);
            BitBlt(mem1dc, 0, 0, WIDTH, HEIGHT, mem2dc, 0, 0, SRCCOPY);

            SelectObject(mem2dc, c);
            BitBlt(mem1dc, 150, 150, 600, 250, mem2dc, 0, 392, SRCCOPY);

            for(i = 0; i < 4; i++)
            {
                   if(i)
                {
                    BitBlt(mem1dc, x[i], y[i], X, Y, mem2dc, (dir[i]+s)*X, Y*i*2, SRCAND);
                    BitBlt(mem1dc, x[i], y[i], X, Y, mem2dc, (dir[i]+s)*X, Y*i*2+Y, SRCPAINT);
                }
                else
                {                   
                    BitBlt(mem1dc, x[i], y[i], X, Y, mem2dc, (dir[i]+s)*X, Y*i*2, SRCAND);
                    BitBlt(mem1dc, x[i], y[i], X, Y, mem2dc, (dir[i]+s)*X, Y*i*2+Y, SRCPAINT);                   
                }
            }         

            SelectObject(mem2dc, oldBit2);
            DeleteDC(mem2dc);
            SelectObject(mem1dc, oldBit1);
            DeleteDC(mem1dc);
            ReleaseDC(hwnd, hdc);
            InvalidateRgn(hwnd, NULL, TRUE);
            break;

        case WM_PAINT:

            GetClientRect(hwnd, &rectView);
            hdc = BeginPaint(hwnd, &ps);                       

            mem1dc = CreateCompatibleDC(hdc);
            oldBit1 = (HBITMAP)SelectObject(mem1dc, hBit1);
            BitBlt(hdc, 0, 0, WIDTH, HEIGHT, mem1dc, 0, 0, SRCCOPY);
            SelectObject(mem1dc, oldBit1);

            DeleteDC(mem1dc);           
            EndPaint(hwnd, &ps);
            break;       
       
        case WM_DESTROY:

            if(hBit1)
                DeleteObject(hBit1);

            DeleteObject(hBit2);
            KillTimer(hwnd, 1);               
            PostQuitMessage(0);
            break;
    }

    return DefWindowProc(hwnd, iMsg, wParam, lParam);
}


어찌 하긴했는데 검은 바탕 화면에 잔상이 자꾸남아요 어디가 문제죠


추천 비추천

0

고정닉 0

0

댓글 영역

전체 댓글 0
본문 보기

하단 갤러리 리스트 영역

왼쪽 컨텐츠 영역

갤러리 리스트 영역

갤러리 리스트
번호 제목 글쓴이 작성일 조회 추천
설문 모태 솔로도 구제해 줄 것 같은 연애 고수 스타는? 운영자 25/07/21 - -
AD 곧 휴가!! 홈캉스, 바캉스 SALE 운영자 25/07/21 - -
339036 매트랩 소리신호 노이즈제거 하는법좀 알려주세여 매트랩(117.16) 12.11.28 104 0
339034 PS4 XBOX720이 언리얼엔진 4 장착하네용? [3] 상상(175.123) 12.11.27 86 0
339033 형들 저 c문법 배우는 학생인데요 이런건어떻게 풀어요? [1] 꿈꾸는낭만갤로그로 이동합니다. 12.11.27 112 0
339031 안드로이드 개발환경 설치 어떻게 해여? [3] 개발자(27.115) 12.11.27 81 0
339030 아오 시발 것들 왜 좆도 아닌것들이 자체 이력서를 쓰라고 지랄이야 [2] 아오(182.211) 12.11.27 95 0
339027 고랭? 소환글 [1] WannaParty갤로그로 이동합니다. 12.11.27 54 0
339024 걍 신세한탄좀 해도되나여 [12] 나그네(211.210) 12.11.27 234 0
339023 A날 ~ B날까지 총 몇일인지 구하는 방법이 뭐냐 [2] 리버싱갤로그로 이동합니다. 12.11.27 82 0
339022 리눅스 관련된 글은 프갤에 쓰면됨? [2] 리눅스(203.237) 12.11.27 59 0
339021 웹개발 신입이 어느정도까지 공부하고 입사 할수 있나요 [5] dd(61.35) 12.11.27 230 0
339020 api 공부중인데, 이 함수 어떻게 읽나요? [4] 이거뭔가요?(211.194) 12.11.27 110 0
339019 소개팅 하기전에 주선자에게 이런말을 해주자 [1] JSP(182.211) 12.11.27 107 0
339017 소설처럼 읽는 JSP 7강까지 끝냈다 헉헉 JSP(182.211) 12.11.27 65 0
339016 c언어로 raw파일 만들고 있는데 안되는게 있슴돠 [1] 무적귀환갤로그로 이동합니다. 12.11.27 69 0
339015 남자친구를 기계어로 쓰면 뭔가요? [4] 예아(59.14) 12.11.27 153 0
339012 traceroute에서 s옵션은 어떻게 줘야됨? ㅁㅁ(110.70) 12.11.27 27 0
339011 다음주 중국 출장가는데 [2] ??(223.62) 12.11.27 66 0
339010 현직자 또는 공부하는 프로그래밍갤러리 형님들 조언좀 부탁드립니다 [22] 호릵(121.140) 12.11.27 321 0
339007 dev c++ 한글 ㅁ으로 나오는데 어찌해야 돼요 ㅜㅜ [3] 햇공돌이(122.128) 12.11.27 73 0
339004 운영체제 과목인데 필기한걸 모르겠다... 설명 좀 제발.ㅜㅜ ㅇㅇ(203.90) 12.11.27 54 0
339003 API 공부하는데 이게 뭔가요? [2] 이거뭔가요(211.194) 12.11.27 70 0
339002 안녕하세요형들 J to the 1갤로그로 이동합니다. 12.11.27 33 0
338999 형들 주석문 해석좀 부탁드립니다. 너무어려워요 [7] ㅇㅇ(211.173) 12.11.27 68 1
338998 지방에서 서울쪽 학원다니는갤러있어? [4] 이세상끝에서갤로그로 이동합니다. 12.11.27 101 0
338997 리눅스 쉘스크립트로 특정 확장자 파일 전체 확장자 붙여서 복사 [6] 위디안(115.91) 12.11.27 57 0
338995 컴공 과제 셔틀 사이트 어떰? [8] 영꼰이갤로그로 이동합니다. 12.11.27 262 0
338994 erp 종사자들은 엄나 [2] ㅁㅁ(203.226) 12.11.27 102 0
338992 안드로이드 에뮬레이터 모든걸 제대로 다 했는데... 에뮬 봐줘요 [10] 궁금한게많으갤로그로 이동합니다. 12.11.27 106 0
338991 얼굴이 이쁜 여자는 많습니다. 성격이 착한 여자도 많습니다. ☎2.51™갤로그로 이동합니다. 12.11.27 76 0
338990 dev c++ 로 c언어로 작성한 프로그램이 작동안되는이유 아는분있나요? [3] ㅇㅇ(211.173) 12.11.27 74 0
338989 리눅스 쉘스크립트로 특정 확장자 파일 전체 다른확장자로 복사 [5] 위디안(115.91) 12.11.27 44 0
338988 안드) 와이파이전용기기에서 3g, 4g 네트워크 정보 못가져오냐? [7] 얼룩돼지갤로그로 이동합니다. 12.11.27 121 0
338987 linker error 이라는게 뭔가요? [1] ㅇㅇ(211.173) 12.11.27 41 0
338986 책한권 다 끝내고 어떻게 공부 하는게 좋을 까요?? [1] 열정(1.250) 12.11.27 58 0
338985 얼굴이 이쁜 여자는 많습니다. 성격이 착한 여자도 많습니다. [2] 영꼰이갤로그로 이동합니다. 12.11.27 159 0
338983 dev c++로 자기소개서 써야되는데 아... 어떻게써야하는지모르겠음 [5] ㅇㅇ(211.173) 12.11.27 87 0
338982 마음만 착한 여자 vs 얼굴만 착한 여자 [2] 미스테리(182.211) 12.11.27 126 0
338981 아놔ㅡㅡ. . . 다크엔젤z갤로그로 이동합니다. 12.11.27 37 0
338978 하여간 여자라는 동물은 정말 미스테리다 미스테리(182.211) 12.11.27 71 0
338977 C) 배열전체에한꺼번에 널값주는법잇음? [21] (211.246) 12.11.27 244 0
338976 인터넷 페이지 저장해서 볼수 있나요? [8] empty(220.70) 12.11.27 317 0
338975 아오 시밤 이클립스에서 자바빈즈 컴파일 하는데 클래스 파일이 안만들어짐 [2] jsp(182.211) 12.11.27 68 0
338973 IT 입문자에게 [1] 개발자(119.201) 12.11.27 161 0
338971 씨발여긴 글제목만봐도 [1] ㅁㄴㅇ(175.194) 12.11.27 67 0
338970 궁금한거 3가지 있습니다. [5] ㄱㄱㄱ(175.192) 12.11.27 79 0
338969 고민이 잇어 형들.. 조언좀 부탁해 [13] PandaMango갤로그로 이동합니다. 12.11.27 169 0
338967 상암동 누리꿈 공개소프트웨어 데이 왔는데 [1] 에어로홍갤로그로 이동합니다. 12.11.27 58 0
338966 요즘 HDSI툴 먹히는 홈페이지 없겠찌? [1] dd(119.197) 12.11.27 48 0
338965 ASP.NET는 사망직전인가여?? jsp가 킹인가여?? [2] C#(182.211) 12.11.27 111 0
338964 실전프로젝트 C# 4.0 샀는데 ............. 망책이라니 ㅠ [3] C#(182.211) 12.11.27 120 0
뉴스 넷플릭스 패션 갱생 예능 '옷장전쟁', 선우용여-KCM-이관희-윤남노 게스트 라인업 공개! 디시트렌드 07.22
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2