책보고 따라 했는데 재미있네요.^^
이제 시험기간도 끝났는데 Win32 API공부에 버닝이다~
점뿌리기 프로그램은 API로 만들었습니다.
점뿌리는 소스코드
SetPixel(hdc,rand()%500, rand()%400, RGB(rand()%256, rand()%256, rand()%256));
에서 RGB코드를 바꾸서 보여주는 것과
SetTimer(hWnd, 1, 100, (TIMERPROC)TimerProc);
에서 타이머를 100(0.1초)에서 1000(1초) 10(0.01초)로 바꿔줘서 했더니 재미있는 프로그램이 되었네요^^
최대화 버튼과 최소화 버튼을 보여주게 했습니다.
최대화 버튼과 최소화 버튼을 안보여주게 했습니다
WS_OVERLAPPEDWINDOW ^ WS_MAXIMIZEBOX ^ WS_MINIMIZEBOX ^ WS_THICKFRAME
이렇게 처리했더니 안보이게 되네요.
API가 비트연산자를 많이 쓰는 가를 알 수 있었네요^^
시간날때마나 API공부닷~
#include
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
HINSTANCE g_hInst;
LPSTR lpszClass="First";
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdLine, 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)WndProc;
WndClass.lpszClassName=lpszClass;
WndClass.lpszMenuName=NULL;
WndClass.style=CS_HREDRAW | CS_VREDRAW ;
RegisterClass(&WndClass);
hWnd=CreateWindow(lpszClass, "점뿌리는 프로그램", WS_OVERLAPPEDWINDOW ^ WS_MAXIMIZEBOX ^ WS_MINIMIZEBOX ^ WS_THICKFRAME, CW_USEDEFAULT, CW_USEDEFAULT, 500, 400, NULL, (HMENU)NULL, hInstance, NULL);
ShowWindow(hWnd, nCmdShow);
while(GetMessage(&Message, 0, 0, 0)) {
TranslateMessage(&Message);
DispatchMessage(&Message);
}
return Message.wParam;
}
void CALLBACK TimerProc(HWND hWnd, UINT uMsg, UINT idEvent, DWORD dwTime)
{
HDC hdc;
int i;
hdc = GetDC(hWnd);
for(i=0;i<100;i++)
SetPixel(hdc,rand()%500, rand()%400, RGB(rand()%256, rand()%256, rand()%256));
ReleaseDC(hWnd, hdc);
}
LRESULT CALLBACK WndProc(HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam){
switch(iMessage) {
case WM_CREATE :
SetTimer(hWnd, 1, 100, (TIMERPROC)TimerProc);
return 0;
case WM_DESTROY :
KillTimer(hWnd, 1);
PostQuitMessage(0);
return 0;
}
return(DefWindowProc(hWnd, iMessage, wParam, lParam));
}