티스토리

박주홍
검색하기

블로그 홈

박주홍

bejeju.tistory.com/m

박__주홍 님의 블로그입니다.

구독자
0
방명록 방문하기

주요 글 목록

  • 오목 ```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 공감수 0 댓글수 0 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.. 공감수 0 댓글수 0 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.. 공감수 0 댓글수 0 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.. 공감수 0 댓글수 0 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.. 공감수 0 댓글수 0 2020. 9. 6.
  • 선그리기 WndProc함수에서 윈도우를 벗어난 클라이언트안의 선의 좌표를 기억하여 윈도우를 클라이언트가 벗어나도 선이 지워지지 않도록 하는 코드를 추가했다. PAINT는 메세지큐가 아닌 메세지테이블, 메세지큐보다 우선순위가 뒤인 메세지들을 저장하는 구조다. 더 이론적으로 복잡하겠지만 내가 이해하고 짠 코드는 이러하다. 또한 BeginPaint()와 EndPaint()를 쓴다면 CPU점유율이 낮아진다. 이는 .. 메세지테이블은 우선순위가 낮은 메세지들을 관리하는 테이블로 Flag성 메세지를 관리한다. 그래서 메세지테이블에 있는 메세지가 1이면 처리하고, 처리 후 0으로 바꿔 메세지가 중복처리되지 않도록 관리한다. GetDC로 DC값을 받게되면 메세지테이블에 있는 메세지들이 다 1로 되어있어 CPU가 모든메세지를 중.. 공감수 0 댓글수 0 2020. 9. 5.
  • 핸들(HANDLE) 핸들이란 구조는 운영체제에서 제공하는 리소스를 제공하기 위해 사용하는데, 마우스 커서, 색깔, 메모장같은 프로그램의 디자인같은 것들의 프로그램의 함수도 어딘가의 메모리에 저장되어 있을 것이다. 콜백함수처럼 라이브러리 프로그래머들이 소스는 보여주기 싫고 대신 적절한 어딘가에 함수포인터를 집어넣어서 너희가 필요한 함수를 만들어서 내가 라이브러리 함수안에 있는 함수포인터에 집어넣어 사용하라라고 하는 구조가 '콜백함수'인데, 운영체제에서 이런 콜백함수를 사용하게 되면 포인터로 그 메모리의 주소를 알게 되어 그 메모리에 직접 접근할 수 있고 그렇게 되면 다양한 오류가 나기 때문에.. Window OS에서는 메모리주소대신 HANDLE값이라는 정수값을 대신 준다. 해서 그 HANDLE값으로 다양한 리소스를 사용할 수.. 공감수 0 댓글수 0 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 공감수 0 댓글수 0 2020. 8. 27.
  • 20.08.26 아침명상 20분 완료! 그전까진 호흡을 알아차리려 애썼다. 애쓰다보니 잘 호흡에 집중이 안되면 몸에 불쾌한 느낌이 솟아오르고, 그로 다른 그 감정과 연관된 생각들이 떠오르기 시작했다. 난 원래 많이 예민한 편이였는데 단체생활을 하면서 사람들의 행동하나까지도 배려가 없다고 생각하면 불쾌감이 들었다. 명상을 하며 호흡에 집중이 안되 짜증이나 몸에 불쾌한 느낌이 들면 그런 생각들이 들었다. 그래서 어쩌면 항상 내가 가슴이 답답하고 몸에 불쾌한 느낌이 있는 이유도 그 때문이 아닐까 생각해봤다. 그리고 호흡에 집중력이 떨어지면 생각의 강물에 휩쓸려 허우적됬다, 영양가없는 생각들인데도 말이다. 해서 그럴때마다 강물에서 빠져나올려고 호흡에 다시 집중했다. 어쩔땐 생각이란 강물에 허우적대는 내 자신을 그저바라보았다. .. 공감수 0 댓글수 0 2020. 8. 26.
  • 다형성(Polymorphism) 다형성은 오버로딩, 오버라이딩, 부모클래스를 가르키는 포인터변수가 자식클래스를 동적할당받은 주소를 받아 쓸 수 있는 그런 유연함을 얘기한다. 1. 오버로딩은 클래스안 이름이 같은 함수, 같은 매개변수 수가 있더라도 그 매개변수 자료형이 다르면 같은 이름으로도 함수가 존재할 수 있다. 2. 오버라이딩은 부모클래스의 함수 앞에 virtual을 쓰게 되면 자식클래스에서 그 함수에 무엇을 덧대어 사용이 가능하다. 이는 상속받은 자식클래스만 가능하며 상속 받았기때문에 메모리구조가 같으므로 함수에 코드를 더 덧대어 사용이 가능한 것은 메모리 확장의 개념이다. 3. 부모클래스를 가르키는 포인터변수가 자식클래스를 동적할당 받은 주소를 받아 쓸 수 있는 유연함 아래는 김성엽 C++ 다형성 실습코드를 바탕으로 연습한 코드.. 공감수 0 댓글수 0 2020. 8. 25.
  • 20.08.25 아침명상 17분 완료! 가슴으로 호흡하다보니 숨이 깊고 커질 수록 가슴이 저려와 복식호흡하려 시도했다. 내 몸에 불쾌한 화가 많았다. 들숨에 신선한 파란색 공기가, 날숨엔 탁한 회색공기가 자꾸 생각이란 강물에 휩쓸리는 내 몸을 알아차리려 노력했다. 의식에서 내 생각과 몸을 제 3자로 보기위해. 공감수 0 댓글수 0 2020. 8. 25.
  • 오버라이딩(Over riding) 1. virtual을 부모클래스에 있는 함수에 써서 자식클래스에서 오버라이딩하는 연습을 했다. 2. 포인터 배열에 객체를 동적할당 후, 동적할당한 그 객체의 함수를 써보았다. 3. 클래스, 객체는 구조체과 같게 메모리의 크기가 있다. 그건 구조체와 마찬가지로 변수의 크기다. 그리고 클래스 안에있는 함수와 변수는 서로 다른 메모리에 할당된다. 4. 예를들어 멤버변수가 char, int 순으로 선언이 되어있다면 총 8바이트메모리가 소요된다. 그리고 함수에 virtual이 있다면 객체에서 포인터변수를 사용해야하므로 4바이트가 할당되야해서 총 12바이트가 할당된다. #include #pragma warning(disable:4996) class Person { protected: char m_name[30] =.. 공감수 0 댓글수 0 2020. 8. 24.
  • 20.08.24 아침명상 16분 완료! 공감수 0 댓글수 0 2020. 8. 24.
  • 20.08.23 아침명상 15분 완료! 공감수 0 댓글수 0 2020. 8. 23.
  • 레이달리오 올웨더포트폴리오(2) #include #pragma warning(disable:4996) typedef struct AllWeatherpoto { double allmoney, left_moeny, vti, spts, sptl, sgol, djp; }POTO; void SettingAllWeather(POTO* p_poto_temp); void Showpoto(POTO* p_poto_temp); void main() { POTO weather_poto; int user_count = 0; while (1) { printf("[ALL WEATHER]\n"); printf("1. Setting All Weather\n"); printf("2. what you gotta invest with all weather\n"); pri.. 공감수 0 댓글수 0 2020. 8. 23.
  • 레이달리오 올웨더포트폴리오(1) All weather는 레이달리오가 모든계절에서 이기는 포트폴리오라고해서 지어진 이름이다. 내 포트폴리오는 올웨더로 구성하고 있으며 자산배분으로 인해 경제침체에서도 꾸준한 우상향을 보이고 있다. 자산배분 덕분에 경제위기에서도 큰 리스크가 없다. 애초엔 주식을 물가상승률보다 은행금리가 낮으니, 예금을 하면 내 돈을 잃는 것이기 때문에 주식을 시작했지만 갈수록 욕심은 커져갔다. '재무제표모르면 주식투자하지마라'의 저자 사경인의 책을 읽고 가치투자에 대해 공부를 하면서 가치투자를 시작하다가 투자공부도 중요하지만 블로소득도 중요하지만, 근로소득을 벌 수 있는 기술을 공부해야겠다라는 생각이 들어서 맘편히 주식투자할 수 있는 자산배분에 대해 공부하면서 레이달리오의 올웨더포트폴리오를 알게되었다. 사실 자본주의는 제로.. 공감수 0 댓글수 0 2020. 8. 23.
  • 도서대여프로그램 with C 이런 큰(?)프로그램은 처음만들어본다. 문법공부하고 내가 배운 걸로 뭐하나라도 만들어봐야겠다해서 만든 프로그램이다. 내가 배운 점을 요약해봤다. 1. 디버깅을 할 줄 아는 개발자가 되자 처음에는 오류가 나면 무조건 그 오류코드복사해서 구글링했는데, 가만히 생각해보면 오류메세지를 읽지도 않고 구글링한 것도 대부분이거니와, 오류를 읽지도않고 답답한 마음만 앞섰다. 해서 차분하게 오류메세지읽고 차분하게..(가능할까..?)디버깅하는 습관을 들이자. 메모리누수도 메모리주소까지 보면서 코드를 짜려면 많이 연습하고 공부해야겠단 생각이 든다. 2. 문법적으로나 메모리관리측면으로나 구조적으로나 어느것이 좀 더 나은 표현이고 어떤 코드가 맞는 코드인지를 많이 배웠다. 처음 내가 짠 코드들은 허점이 너무도 많았다(지금도 허.. 공감수 0 댓글수 0 2020. 8. 21.
  • STACK, HAEP 동적할당 Stack은 컴파일러가 코드에 따라 메모리를 정적할당해주는 영역으로 stack frame으로 Base pointer와 stack pointer을 왔다갔다하며 메모리를 효율적으로 사용한다. 이에반해 Heap란 영역은 프로그램이 실행 중에 메모리를 동적으로 할당할 할 수 있도록 하는 메모리 영역이다. 동적할당을 배우기 전에는 배열로써 한계였던 코드가 동적할당으로 계속 프로그램실행 중 메모리가 필요할때 메모리를 할당해서 사용할 수 있으니 좋았다. 아래는 연결리스트, 노드를 사용하여 동적할당된 메모리의 주소를 잃어버려서 다시 사용 못할 수 있는 상황을 이겨냈다. 나중에는 사용자가 찾고싶은 이름으로 전화번호를 찾을 수 있는 코드를 짜봐야겠다. #include #include #pragma warning(disab.. 공감수 0 댓글수 0 2020. 8. 15.
    문의안내
    • 티스토리
    • 로그인
    • 고객센터

    티스토리는 카카오에서 사랑을 담아 만듭니다.

    © Kakao Corp.