게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
api소스 디버깅할때 화면이 잘 나타나게 할 방법 없나요?
게시물ID : programmer_10849짧은주소 복사하기
작성자 : ㅜ_ㅠ
추천 : 0
조회수 : 467회
댓글수 : 5개
등록시간 : 2015/06/04 19:37:46
아래의 소스에서 만약 비주얼 스튜디오로 디버그의 중단점(F9로 설정)을    EndPaint(hWnd,&ps);에 설정하고
F5키를 눌러서 디버깅을 시작하면 중단점에서 F10이나 F11키를 누르면
"첫번째 문자열"이 나오고 계속F10키를 누르면 사용가능한 소스가 없다는 에러 메세지가 나오는데
여기서 F5키를 누르고 중단점에서 F10을 누르면 "두번째 문자열" 이 나오고 계속해서 "세번째 문자열" "네번째 문자열" 
그리고 "첫번째 문자열"로 루프를 도는데요
근데 이 예제는 화면을 나타내는 직사각형 윈도우의 크기가 300,100으로 작아서, 
비주얼 스튜디오의 윈도우가 이 디버그를 실행하는 윈도우를 충분히 가리지 않게 약간 비주얼 스튜디오 창을 작게해서 전체 출력을 볼 수 있는데요,
문제는 만약 API소스중에 디버그시 화면 전체에 문자열이 나타나게 하는 소스가 있다면
이 소스의 출력 결과를 디버그해서 확인할때
비주얼 스튜디오에서 F5키를 눌러서 디버그를 실행하다가 중단점에서 F10키를 눌러서 한문장씩 실행해도 비주얼 스튜디오의 창이 출력화면의 일부를 가리게 되는데 그 가려진 부분을 보이는 부분으로 이동시켜도 출력이 이상하게 나오는데  여기서 다시 첨부터 F5키를 눌러서 중단점에서 비주얼 스튜디오 창이 출력되는 부분을 가리지 않도록 비주얼 스튜디오 창을 이동하거나 작게 조절한후 다시 F10키를 눌러서 한 문장씩 디버그를 하면 출력이 나오는데 이거 너무 불편하더군요.
이문제는 C++이나 C소스와 달리 API는 출력화면을 다른 윈도우로 가리게 되면 출력화면이 지워지게 되는 특징이 디버깅할때도 계속 되기 때문에 발생하는 문제인 거 같은데 API 소스를 디버그할때 다른 윈도우가 가리면 출력화면이 지워지지 않게 만들 수 없을까요?
혹시 디버그시 출력화면을 비주얼 스튜디오의 창이 가려도 지워지지 않게 할 수 있는 방법이 있거나 혹은 비주얼 스튜디오 창을 최소화 한 상태에서 단축키만으로 디버그를 할수 있는 방법을 알고 계시다면 가르쳐 주셨으면 정말 좋겠네요.

#include <windows.h>

 LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
 HINSTANCE g_hInst;

 int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR nCmdLine,int nCmdShow)
 {
     LPCTSTR szClassName = TEXT("클래스");
     LPCTSTR szTitle = TEXT("TimerText");
     
     HWND hWnd;
     MSG msg;
     g_hInst = hInstance;
     WNDCLASSEX wc;

     wc.cbSize = sizeof(WNDCLASSEX);
     wc.style = CS_HREDRAW | CS_VREDRAW;
     wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
     wc.hCursor = LoadCursor(NULL,IDC_ARROW);
     wc.hIcon = LoadIcon(NULL,IDI_APPLICATION);
     wc.hIconSm = LoadIcon(NULL,IDI_APPLICATION);
     wc.lpfnWndProc = WndProc;
     wc.hInstance = hInstance;
     wc.lpszClassName = szClassName;
     wc.lpszMenuName = NULL;
     wc.cbClsExtra = 0;
     wc.cbWndExtra = 0;

     RegisterClassEx(&wc);

     hWnd = CreateWindow(
         szClassName,
         szTitle,
         WS_OVERLAPPEDWINDOW,
         CW_USEDEFAULT,
         CW_USEDEFAULT,
         300,
         100,
         0,
         0,
         hInstance,
         NULL
         );
         
     if( !hWnd )
     {
         return (FALSE);
     }

     ShowWindow(hWnd,nCmdShow);
     UpdateWindow(hWnd);

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

     return msg.wParam;
 }

 LRESULT CALLBACK WndProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
 {
     HDC hdc;
     PAINTSTRUCT ps;
     static TCHAR sTime[][20] = {
         TEXT("첫번째 문자열"),
         TEXT("두번째 문자열"),
         TEXT("세번째 문자열"),
         TEXT("네번째 문자열")
     };
     static int i=0;
     
     switch( uMsg )
     {
         case WM_CREATE:
             SetTimer(hWnd,1,2000,NULL);
             break;
         case WM_TIMER:
             i++;
             if( i > 3 )
             {
                 i=0;
             }
             InvalidateRect(hWnd,NULL,TRUE);
             break;
         case WM_PAINT:
             hdc = BeginPaint(hWnd,&ps);
             TextOut(hdc,10,10,sTime[i],lstrlen(sTime[i]));
             EndPaint(hWnd,&ps);
             break;
         case WM_DESTROY:
             KillTimer(hWnd,1);
             PostQuitMessage(0);
             break;
     }

     return DefWindowProc(hWnd,uMsg,wParam,lParam);
 }   

전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호