본문 바로가기

Google AdSense

분류 전체보기18

오목 ```C++ #define X_COUNT 19 #define Y_COUNT 19 #define START_X 50 #define START_Y 50 #define INTERVAL 26 #define HALF_INTERVAL INTERVAL / 2 #define XPOS(x) (START_X + (x) * INTERVAL) #define YPOS(y) (START_Y + (y) * INTERVAL) unsigned char g_dol[Y_COUNT][X_COUNT]; unsigned char g_step; void OnPaint(HWND ah_wnd) { PAINTSTRUCT ps; HDC h_dc = BeginPaint(ah_wnd, &ps); for (int x = 0; x 2020. 9. 12.
Brush Handle값 받아서 테두리없는 사각형패턴 이제 Pen, Brush로 선, 도형 색상이든 그림을 그릴때 무엇을 색상이든 크기등을 조정할 수 있게되었다. 차차 필요한 것은 알아가기로 하자. LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { if (uMsg == WM_DESTROY)PostQuitMessage(0); else if (uMsg == WM_LBUTTONDOWN) { HDC h_dc = ::GetDC(hWnd); HBRUSH h_brush; const wchar_t* p_style_string[6] = { L"HS_BDIAGONAL",L"HS_CROSS",L"HS_DIAGCROSS", L"HS_FDIAGONAL",L"HS_HORIZONTAL",L"H.. 2020. 9. 9.
Pen Handle값 받아서 Pen이나 Brush 다르게 그리는 것 LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { if (uMsg == WM_DESTROY)PostQuitMessage(0); else if (uMsg == WM_LBUTTONDOWN) { HDC h_dc = ::GetDC(hWnd); HPEN h_pen; const wchar_t* p_style_string[6] = { L"PS_SOLID",L"PS_DASH", L"PS_DOT",L"PS_DASHDOT",L"PS_DASHDOTDOT",L"PS_NULL" }; int pen_style[6] = { PS_SOLID,PS_DASH,PS_DOT,PS_DASHDOT, PS_DASHDOTDOT,PS_NULL }; SetBk.. 2020. 9. 9.
BitBlt,WM_CLOSE 왼쪽 마우스키를 누르면 비트맵 복사해서 만든 다른 윈도우(클라이언트)에 출력하는 코드 LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { if(uMsg == WM_DESTROY)PostQuitMessage(0); else if(uMsg == WM_LBUTTONDOWN){ HDC h_wnd_dc = ::GetWindowDC(NULL); HDC h_dc = GetDC(hWnd); BitBlt(h_dc, 0, 0, 300, 200, h_wnd_dc, 50, 50, SRCINVERT); ReleaseDC(hWnd,h_dc); ReleaseDC(NULL); } return DefWindowProc(hWnd,uMsg,wPara.. 2020. 9. 7.
마우스로 사각형 움직이기 전체적인 구조의 코드는 너무 기니깐, LRESULT CALLBACK WndProc()함수의 코드만 적도록 하겠다... //전역변수 int g_is_clicked = 0; RECT g_rect = { 50, 50, 50, 50 }; POINT g_prev_pos; LREULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { if(uMsg == MW_DESTROY)PostQuitMessage(0); else if(uMsg == WM_PAINT){ PAINTSTRUCT ps; HDC h_dc = BeginPaint(hWnd,&ps); Rectangle(h_dc,g_rect.left,g_rect.top,g_rect.right,g_re.. 2020. 9. 6.
선그리기 WndProc함수에서 윈도우를 벗어난 클라이언트안의 선의 좌표를 기억하여 윈도우를 클라이언트가 벗어나도 선이 지워지지 않도록 하는 코드를 추가했다. PAINT는 메세지큐가 아닌 메세지테이블, 메세지큐보다 우선순위가 뒤인 메세지들을 저장하는 구조다. 더 이론적으로 복잡하겠지만 내가 이해하고 짠 코드는 이러하다. 또한 BeginPaint()와 EndPaint()를 쓴다면 CPU점유율이 낮아진다. 이는 .. 메세지테이블은 우선순위가 낮은 메세지들을 관리하는 테이블로 Flag성 메세지를 관리한다. 그래서 메세지테이블에 있는 메세지가 1이면 처리하고, 처리 후 0으로 바꿔 메세지가 중복처리되지 않도록 관리한다. GetDC로 DC값을 받게되면 메세지테이블에 있는 메세지들이 다 1로 되어있어 CPU가 모든메세지를 중.. 2020. 9. 5.
핸들(HANDLE) 핸들이란 구조는 운영체제에서 제공하는 리소스를 제공하기 위해 사용하는데, 마우스 커서, 색깔, 메모장같은 프로그램의 디자인같은 것들의 프로그램의 함수도 어딘가의 메모리에 저장되어 있을 것이다. 콜백함수처럼 라이브러리 프로그래머들이 소스는 보여주기 싫고 대신 적절한 어딘가에 함수포인터를 집어넣어서 너희가 필요한 함수를 만들어서 내가 라이브러리 함수안에 있는 함수포인터에 집어넣어 사용하라라고 하는 구조가 '콜백함수'인데, 운영체제에서 이런 콜백함수를 사용하게 되면 포인터로 그 메모리의 주소를 알게 되어 그 메모리에 직접 접근할 수 있고 그렇게 되면 다양한 오류가 나기 때문에.. Window OS에서는 메모리주소대신 HANDLE값이라는 정수값을 대신 준다. 해서 그 HANDLE값으로 다양한 리소스를 사용할 수.. 2020. 8. 30.
2차원 메모리 동적할당 (C++) new, delete를 사용해서 동적할당을 하고 메모리를 해체해보았다. 다시금 포인터배열의 구조를 익힐 수 있었다. 1. new (int*[3]); 과 new int * [3]; , new int [3]과 new (int[3]);의 차이 2.*(*(p+2) + 3)의 구조 3. 왜 delete, 메모리해제할때 동적할당된 일반변수 즉 *(*(p+0) + 0)은 해제해주지 않고 포인터변수만 메모리해제 해주는가? ex ) for (i = 0; i 2020. 8. 27.
20.08.26 아침명상 20분 완료! 그전까진 호흡을 알아차리려 애썼다. 애쓰다보니 잘 호흡에 집중이 안되면 몸에 불쾌한 느낌이 솟아오르고, 그로 다른 그 감정과 연관된 생각들이 떠오르기 시작했다. 난 원래 많이 예민한 편이였는데 단체생활을 하면서 사람들의 행동하나까지도 배려가 없다고 생각하면 불쾌감이 들었다. 명상을 하며 호흡에 집중이 안되 짜증이나 몸에 불쾌한 느낌이 들면 그런 생각들이 들었다. 그래서 어쩌면 항상 내가 가슴이 답답하고 몸에 불쾌한 느낌이 있는 이유도 그 때문이 아닐까 생각해봤다. 그리고 호흡에 집중력이 떨어지면 생각의 강물에 휩쓸려 허우적됬다, 영양가없는 생각들인데도 말이다. 해서 그럴때마다 강물에서 빠져나올려고 호흡에 다시 집중했다. 어쩔땐 생각이란 강물에 허우적대는 내 자신을 그저바라보았다. .. 2020. 8. 26.