아래의 소스에서 만약 비주얼 스튜디오로 디버그의 중단점(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);
}