일정 개수의 문자열을 일정한 시간에(2초 정도 )으로 교체해서 출력하는 예제를 작성하라.
출력 할 문자열을 배열로 정의하고 타이머를 설치 한 후 주기적으로 출력할 문자열을 바꾸면 된다.
메인윈도우 크기는 폭 300 높이 100으로 하고 문자열을 10,10에 출력.
본인은 이렇게 문제를 풀었다.
#include <windows.h>
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
//VOID CALLBACK TimerProc(HWND,UINT,UINT,DWORD);
VOID CALLBACK TimerStr(HWND hWnd,UINT uMsg,UINT idEvent,DWORD dwTime);
HINSTANCE g_Inst;
const TCHAR save[4][256]={"안녕하세요",
"GFP 입니다.",
"Nsakura 입니다.",
"타이머 확장문제 입니다."
};
TCHAR stringout[256];
LPCTSTR wndName=TEXT("BACKGROUND");
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevINSTANCE,LPSTR lpCmdLine,int nShowCmd){
HWND hWnd;
MSG Message;
WNDCLASS WndClass;
g_Inst=hInstance;
WndClass.cbClsExtra=0;
WndClass.cbWndExtra=0;
WndClass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
WndClass.hCursor=LoadCursor(NULL,IDC_ARROW);
WndClass.hIcon=LoadIcon(NULL,IDI_APPLICATION);
WndClass.hInstance=hInstance;
WndClass.lpfnWndProc=WndProc;
WndClass.lpszClassName=wndName;
WndClass.lpszMenuName=NULL;
WndClass.style=CS_HREDRAW|CS_VREDRAW;
RegisterClass(&WndClass);
hWnd=CreateWindow(wndName,wndName,WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,300,100,NULL,(HMENU)NULL,hInstance,NULL); //300,100크기의 윈도우를 만든다.
ShowWindow(hWnd,nShowCmd);
while(GetMessage(&Message,NULL,0,0)){
TranslateMessage(&Message);
DispatchMessage(&Message);
}
return (int)Message.wParam;
}
LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage, WPARAM wParam,LPARAM lParam){
HDC hdc;
PAINTSTRUCT ps;
static xPos=10,yPos=10;
switch(iMessage){
case WM_CREATE:
//SetTimer(hWnd,1,50,TimerProc);
SetTimer(hWnd,1,2000,TimerStr);
return 0;
case WM_PAINT:
hdc=BeginPaint(hWnd,&ps);
TextOut(hdc,xPos,yPos,stringout,lstrlen(stringout));
EndPaint(hWnd,&ps);
return 0;
case WM_DESTROY:
KillTimer(hWnd,1);
PostQuitMessage(0);
return 0;
}
return (DefWindowProc(hWnd,iMessage,wParam,lParam));
}
/*VOID CALLBACK TimerProc(HWND hWnd,UINT uMsg,UINT idEvent,DWORD dwTime){
HDC hdc;
hdc=GetDC(hWnd);
int cnt;
for(cnt=0; cnt<10000; cnt++){
SetPixel(hdc,rand()%500,rand()%50,RGB(255,255,255));
}
ReleaseDC(hWnd,hdc);
}*/
VOID CALLBACK TimerStr(HWND hWnd,UINT uMsg,UINT idEvent,DWORD dwTime){
RECT rt={10,10,310,110};
static ncnt=0;
lstrcpy(stringout,save[ncnt]);
InvalidateRect(hWnd,&rt,true);
ncnt++;
if(ncnt==4){
ncnt=0;
}
}