728x90
728x170
API와 운영체제를 통해 알고리즘과 논리력을 키울 수 있도록 쓰여진 책입니다. 초급 프로그래머는 그래픽 환경에 쉽게 적응하여 탄탄한 기본기를 다질 수 있으며 중급 프로그래머는 운영체제의 내부 구조와 동작을 이해함으로써 진정한 응용력을 키울 수 있다.
#include <windows.h>
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
HINSTANCE g_hInst;
LPCTSTR lpszClass=TEXT("MyTimer");
int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance
,LPSTR lpszCmdParam,int nCmdShow)
{
HWND hWnd;
MSG Message;
WNDCLASS WndClass;
g_hInst=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=lpszClass;
WndClass.lpszMenuName=NULL;
WndClass.style=CS_HREDRAW | CS_VREDRAW;
RegisterClass(&WndClass);
hWnd=CreateWindow(lpszClass,lpszClass,WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,
NULL,(HMENU)NULL,hInstance,NULL);
ShowWindow(hWnd,nCmdShow);
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;
SYSTEMTIME st;
static TCHAR sTime[128];
static RECT rt={100,100,400,120};
switch (iMessage) {
case WM_CREATE:
SetTimer(hWnd,1,1000,NULL);
// SendMessage(hWnd, WM_TIMER, 1, 0);
return 0;
case WM_TIMER:
GetLocalTime(&st);
wsprintf(sTime,TEXT("지금 시간은 %d:%d:%d입니다"),
st.wHour,st.wMinute,st.wSecond);
InvalidateRect(hWnd,NULL,TRUE);
// InvalidateRect(hWnd,&rt,TRUE);
return 0;
case WM_PAINT:
hdc=BeginPaint(hWnd,&ps);
TextOut(hdc,100,100,sTime,lstrlen(sTime));
EndPaint(hWnd,&ps);
return 0;
case WM_DESTROY:
KillTimer(hWnd,1);
PostQuitMessage(0);
return 0;
}
return(DefWindowProc(hWnd,iMessage,wParam,lParam));
}
#include <windows.h>
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
HINSTANCE g_hInst;
HWND hWndMain;
LPCTSTR lpszClass=TEXT("OnceTimer");
int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance
,LPSTR lpszCmdParam,int nCmdShow)
{
HWND hWnd;
MSG Message;
WNDCLASS WndClass;
g_hInst=hInstance;
WndClass.cbClsExtra=0;
WndClass.cbWndExtra=0;
WndClass.hbrBackground=(HBRUSH)(COLOR_WINDOW+1);
WndClass.hCursor=LoadCursor(NULL,IDC_ARROW);
WndClass.hIcon=LoadIcon(NULL,IDI_APPLICATION);
WndClass.hInstance=hInstance;
WndClass.lpfnWndProc=WndProc;
WndClass.lpszClassName=lpszClass;
WndClass.lpszMenuName=NULL;
WndClass.style=CS_HREDRAW | CS_VREDRAW;
RegisterClass(&WndClass);
hWnd=CreateWindow(lpszClass,lpszClass,WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,
NULL,(HMENU)NULL,hInstance,NULL);
ShowWindow(hWnd,nCmdShow);
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 TCHAR str[128];
switch (iMessage) {
/* 틀린 코드
case WM_LBUTTONDOWN:
hdc=GetDC(hWnd);
lstrcpy(str,"왼쪽 버튼을 눌렀습니다.");
TextOut(hdc,10,10,str,lstrlen(str));
GdiFlush();
Sleep(3000);
lstrcpy(str,"");
InvalidateRect(hWnd,NULL,TRUE);
ReleaseDC(hWnd,hdc);
return 0;
//*/
//*
case WM_LBUTTONDOWN:
lstrcpy(str,"왼쪽 버튼을 눌렀습니다.");
InvalidateRect(hWnd,NULL,TRUE);
SetTimer(hWnd,1,3000,NULL);
return 0;
//*/
case WM_TIMER:
KillTimer(hWnd,1);
lstrcpy(str,"");
InvalidateRect(hWnd,NULL,TRUE);
return 0;
case WM_PAINT:
hdc=BeginPaint(hWnd, &ps);
TextOut(hdc,10,10,str,lstrlen(str));
EndPaint(hWnd, &ps);
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return(DefWindowProc(hWnd,iMessage,wParam,lParam));
}
#include <windows.h>
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
HINSTANCE g_hInst;
LPCTSTR lpszClass=TEXT("RandGrp");
int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance
,LPSTR lpszCmdParam,int nCmdShow)
{
HWND hWnd;
MSG Message;
WNDCLASS WndClass;
g_hInst=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=lpszClass;
WndClass.lpszMenuName=NULL;
WndClass.style=CS_HREDRAW | CS_VREDRAW;
RegisterClass(&WndClass);
hWnd=CreateWindow(lpszClass,lpszClass,WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,
NULL,(HMENU)NULL,hInstance,NULL);
ShowWindow(hWnd,nCmdShow);
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;
int i;
switch (iMessage) {
case WM_CREATE:
SetTimer(hWnd,1,50,NULL);
return 0;
case WM_TIMER:
hdc=GetDC(hWnd);
for (i=0;i<1000;i++) {
SetPixel(hdc,rand()%500, rand()%400,
RGB(rand()%256,rand()%256,rand()%256));
}
ReleaseDC(hWnd, hdc);
return 0;
case WM_LBUTTONDOWN:
hdc=GetDC(hWnd);
Ellipse(hdc,LOWORD(lParam)-10,HIWORD(lParam)-10,
LOWORD(lParam)+10,HIWORD(lParam)+10);
ReleaseDC(hWnd, hdc);
return 0;
/* 이렇게 무한 루프를 돌면 안된다.
case WM_PAINT:
hdc=BeginPaint(hWnd, &ps);
for (;;) {
SetPixel(hdc,rand()%500, rand()%400,
RGB(rand()%256,rand()%256,rand()%256));
}
EndPaint(hWnd, &ps);
return 0;
//*/
case WM_DESTROY:
KillTimer(hWnd, 1);
PostQuitMessage(0);
return 0;
}
return(DefWindowProc(hWnd,iMessage,wParam,lParam));
}
#include <windows.h>
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
HINSTANCE g_hInst;
LPCTSTR lpszClass=TEXT("TwoTimer");
int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance
,LPSTR lpszCmdParam,int nCmdShow)
{
HWND hWnd;
MSG Message;
WNDCLASS WndClass;
g_hInst=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=lpszClass;
WndClass.lpszMenuName=NULL;
WndClass.style=CS_HREDRAW | CS_VREDRAW;
RegisterClass(&WndClass);
hWnd=CreateWindow(lpszClass,lpszClass,WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,
NULL,(HMENU)NULL,hInstance,NULL);
ShowWindow(hWnd,nCmdShow);
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;
SYSTEMTIME st;
static TCHAR sTime[128];
static RECT rt={100,100,400,120};
switch (iMessage) {
case WM_CREATE:
SetTimer(hWnd,1,1000,NULL);
SetTimer(hWnd,2,5000,NULL);
SendMessage(hWnd, WM_TIMER, 1, 0);
return 0;
case WM_TIMER:
switch (wParam) {
case 1:
GetLocalTime(&st);
wsprintf(sTime,TEXT("지금 시간은 %d:%d:%d입니다"),
st.wHour,st.wMinute,st.wSecond);
InvalidateRect(hWnd,&rt,TRUE);
break;
case 2:
MessageBeep(0);
break;
}
return 0;
case WM_PAINT:
hdc=BeginPaint(hWnd,&ps);
TextOut(hdc,100,100,sTime,lstrlen(sTime));
EndPaint(hWnd,&ps);
return 0;
case WM_DESTROY:
KillTimer(hWnd,1);
KillTimer(hWnd,2);
PostQuitMessage(0);
return 0;
}
return(DefWindowProc(hWnd,iMessage,wParam,lParam));
}
728x90
그리드형
'IT > 프로그래밍' 카테고리의 다른 글
윈도우즈 API 정복 6장 예제 소스코드 (0) | 2021.05.22 |
---|---|
윈도우즈 API 정복 5장 예제 소스코드 (0) | 2021.05.22 |
윈도우즈 API 정복 4장 예제 소스코드 (0) | 2021.05.22 |
윈도우즈 API 정복 3장 예제 소스코드 (0) | 2021.05.22 |
윈도우즈 API 정복 2장 예제 소스코드 (0) | 2021.05.22 |
댓글