반응형 훈, IT 공부/C,C++,MFC40 [궁금점]winApi WriteFile 함수의 동작 WriteFile 윈도우 API WriteFile BOOL WriteFile( // 반환값 : 성공이면 TRUE HANDLE hFile, // 파일 핸들 LPCVOID lpBuffer, // 기록할 데이터가 저장된 버퍼 DWORD nNumberOfBytesToWrite, // 기록할 최대 바이트수 LPDWORD lpNumberOfBytesWritten, // 실제로 기록한 바이트 수를 받을 변수의 주소 LPOVERLAPPED lpOverlapped // OVERLAPPED 구조체 주소 ); WriteFile은 윈도우 환경에서 파일에 출력할때 사용된다. 실험 WriteFile을 사용하던 중 신기한 경우를 찾아내어서 작성해본다. 파일의 인코딩이 변경된다?? 라는 것에 대한 의문점이다. ▲ 인코딩 파일 인코딩.. 훈, IT 공부/C,C++,MFC 2018. 6. 2. 궁금점, 파일을 읽을때 NULL 문자를 읽을까? NULL 문자!? 0x00 최근에 계속 프로젝트를 하다가 상사분의 조언을 들었다. 프로젝트의 특정 부분에 관한 말씀이셨는데, 파일을 Read하는 부분이었다. MFC에서 CFile을 이용해서 읽던 중 항상 읽어드리는 데이터를 저장하는 버퍼를 크기보다 'nLen+1' 하나 더 크게 항상 생성하였다. 이 부분에 의문의 두시고 질문은 하신 것이다. 나는 당연히 항상 기존문자열의 길이+1을 하여 저장을 하였기에 생각을 못했지만 실무자의 눈에는 썩 좋은 코드로 생각이 되지 않으셨던 것이다. 물론 유동적으로 사용하는 버퍼이면 NULL은 넣는것은 당연하지만 한번 읽는데 사용하는 버퍼의 경우에는 굳이 한바이트 더 넣어줄 이유는 없다는 것이다. 나의 경우에는 직접 경험하고 봐야지 기억을 하는 타입이라서 곧바로 나름 실험에.. 훈, IT 공부/C,C++,MFC 2018. 5. 31. [MFC] WM_MOUSEHOVER, WM_MOUSELEAVE 메시지 이용방법 MFC 마우스관련 메시지 핸들러 헷갈리는 부분 정리해봅니다. WM_MOUSEHOVER, WM_MOUSELEAVE WM_MOUSEHOVER, WM_MOUSELEAVE 메시지는 일반 메시지 처럼 메시지 함수를 추가한다고 해서 메시지를 처리하는 것이 아니라. WM_MOUSEMOVE 메시지 핸들러 안에서 TrackMouseEvent()함수를 이용하여 약간의 특별한 설정을 해주어야만 메시지가 발생하는 구조를 갖는다고 합니다. TrackMouseEvent()함수는 아래와 같이 4가지 메시지를 발생시킵니다. WM_NCMOUSEHOVER, WN_NCMOUSELEAVE, WM_MOUSEHOVER, WM_MOUSELEAVE 그러므로 WM_MOUSEMOVE 메시지를 처리하는 클래스에서 TrackMouseEvent()함수를 .. 훈, IT 공부/C,C++,MFC 2018. 5. 7. [MFC]MFC 버튼을 이용한 프로젝트 #1 버튼 추가 + 사이즈조절 MFC 프로젝트 2018.04.30 MFC 22일차 MFC의 이해를 위해서는 프로젝트를 진행하는것이 굉장히 도움이 된다. 단순히 공부를 할 때와는 다르게 실력이 늘어나는 것을 느낄 수 있을 것이다. 구글의 도움을 받으면서 이곳 저곳 삽질을 하다 보면 어느 순간 이해를 하면서 어떻게 해야하는지 보이게 될 것이다. 이 프로젝트는 다음 프로젝트와 연결되어서 진행한다. 윈도우 메시지의 이해와 함수들의 이해를 위해서는 복사 붙여넣기 방식 코딩은 절대 하면 안된다. 반드시 함수 하나하나 이해하고 넘어가야 한다. 반복하다보면 어느순간 손이 익을 것이라 생각한다. 절대 생각없이 코딩을 하면 안된다. 코드를 작성하기 위해서 어떤 함수와 메시지컨트롤 들이 필요한지는 몇 분 소요하던지검색 및 공부 후 진행하는 것을 추천한다.. 훈, IT 공부/C,C++,MFC 2018. 5. 7. [MFC] Dialog 크기조절 관련 함수,메시지 다이얼로그에서 숫자 두개를 입력해서 곱한 값만큼 버튼을 출력하고 버튼은 윈도우의 크기에 따라 커지거나 작아지게 만드는 프로젝트를 하던중 확실하게 알아야할 것 같은 함수들때문에 정리를 해보았습니다. ● OnSize vs OnSizingvoid OnSize(UING nType, int cx ,int cy) WM_SIZE -- 윈도우창의 크기가 변경되고 나서 발생하는 메시징이다. 호출되는 함수로는 OnSize() 가 있다. 크기조절이 완료되고 발생하는 메시지 이기 때문에 실시간 변경은 불가능하다. 라고 하지만 실제로 사용해보면 실시간으로 WM_SIZE 메시지가 호출된다.... void OnSizing(UINT fwSide, LPRECT pRect) WM_SIZING -- 사용자가 윈도우 창의 크기조절부분에 마.. 훈, IT 공부/C,C++,MFC 2018. 5. 1. [MFC] DC, CDC 관련하여 정리 DC도 헷갈리고 CDC도 헷갈리고 HDC를 받아오기 CDC를 받아와서 뭘하는지 헷갈리는 부분이 많아서 정리한 글을 바탕으로 정리해보았습니다. 잘정리 되어있는 사이트 링크 걸어두었으니 부족한 부분들은 참조부탁드립니다. DC(Device Context) 관련 기본적으로 Windows는 세가지 동적 연결 라이브러리로 구성된다. - 메모리와 프로그램을 관리하는 Kernel ( 신의영역 ) - 유저인터페이스와 Window를 관리하는 User ( 인간의 영역 ) - 화면처리와 그래픽을 담당하는 GDI CDC 를 알기전에 DC에 대해서 먼저 알아보겠다. GDI 는 Graphic Device Interface 이다. ( 그래픽 장치 접근혹은 접속 ) GDI 는 화면에 어떠한 접근하는 것을 담당한데 화면에 글을 쓰거나 .. 훈, IT 공부/C,C++,MFC 2018. 5. 1. [MFC] MFC 실행순서( 생성 ~ 소멸 ) MFC 실행구조 MFC 구조에 대해서는 잘 알아야 나중에 MDI가 나와도 당황하지 않을 것입니다. 기초부터 탄탄하게 만드는 것이 핵심이라 생각합니다. 분발하여 MFC 이겨봅시다. MFC 구조 CTempApp::CTempApp() ------ App 클래스 변수가 전역변수로 선언되어있으므로 제일 먼저 생성자가 호출된다CTempApp::InitInstance() ------ MFC 코드에 숨겨진 AfxWinMain함수에서 호출된다. (프로그램의 설정정보 로딩, 파라미터 처리등을 담당)CTempDoc::CTempDoc(void) ------ InitInstance()에 의해 Document 객체가 제일먼저 생성된다CMainFrame::CMainFrame(void)CMainFrame::LoadFrame() --.. 훈, IT 공부/C,C++,MFC 2018. 4. 30. [MFC] 각클래스 객체 포인터 얻어오기 MFC 정리가 필요해서 끄적끄적 작성하고 코드로 쳐보고 해보았습니다. 추가해야하는 부분은 점차 수정해나가겠습니다. MFC 로 프로젝트 생성하였다는 가정하에 정리합니다. 프로젝트명 Test CTestApp(CWinApp 상속) - 프로그램의 생성을 담당하는 영역, 프로그램 초기화관련CMainFrame(CFrameWnd상속)- 겉 프레임을 윈도우 담당하는 클래스 CTestDoc(CDocument상속) - 문서의 저장 열기 등등, 문서 담당하는 클래스 CTestView(CView상속) - 화면을 담당하는 클래스CTestDlg(CDialog상속) - 도움말 대화상자 클래스 ● CTestApp 포인터 얻어오기 CTestApp은 CWinApp를 상속받는다. 어느곳에서나 CTestApp의 포인터를 얻고자 한다면 Af.. 훈, IT 공부/C,C++,MFC 2018. 4. 28. [MFC]Document Template MFC Templatehttps://msdn.microsoft.com/ko-kr/library/sa2c737c.aspx▲ MSDN 참조 ● GetFirstDocTemplatePosition() # 구문 POSITION GetFirshDocTemplate() const; # 설명Gets the position of the first document template in the application 첫번째 문서템플릿에서 포지션을 얻어와라 # 반환값A POSITION value that can be used for iteration or object pointer retrieval; NULL if he list is empty.반환은 POSITION 형식으로 반복적으로 사용가능하다 혹은 객체의 포인터를 받는다.. 훈, IT 공부/C,C++,MFC 2018. 4. 28. [C++ STL]vector 백터란 C++ STL(Standard Template Library) 에서 제일 중요한 라이브러리 두가지가 있는데 그것이 과 이다. 이중에 vector에 대하여서 정리를 해야할것같아서 올려본다. ● vector STL(Standard Template Library)▲ 무기로 사용되는 "Vector" 요즘들어서 vector 벡터 하면 떠오르는 것이 "배틀그라운드" 에 등장하는 총의 종류다. ㅎㅎ 헛소리는 여기까지 하고 넘어가자. 벡터라는 단어의 사전적인 뜻은 "크기와 방향으로 정해지는양" , "(질병의 )매개체" , "(비행기의)진로" 명시되어있다. 프로그래밍적으로도 사용되고 수학적인 개념으로도 사용된다. 우리는 프로그래밍적으로 접근할 것이다. C++에서 사용하는 STL으로써 스택의 구조와 유사하기도 하고 단일 .. 훈, IT 공부/C,C++,MFC 2018. 4. 21. [프로그램]강아지와 병아리 ( 다리개수 ) +손코딩연습 강아지와 병아리 숫자맞춰!! ▲ 핸드메이드 이번에 소개하는 게임은 강아지와 병아리의 총합과 강아지와 병아리의 다리개수 만 가지고 계산하여서 각각 강아지와 병아리가 몇마리씩 나타나게 되는지 알고리즘을 작성하는 프로그램입니다. 옛날에 이런문제를 봤던 기억이 있는데, 이번에는 컴파일러로 바로 작성하는것이 아니라 손코딩을 하고난 뒤에 컴파일러에 옮겨보고 컴파일 해보는 방법으로 진행 해볼 것입니다. 부지런히 손코딩을 하게 되면, 자질구레한 오류들을 잡을 수 있고, 자신의 본래의 실력이 드러나게 되고, 또한 실력또한 성장 할 수 있을 것입니다. ● 강아지와 병아리는 몇마리 있는가요? ▲ 강아지와 병아리 문제 조건 1. 강아지와 병아리의 합 1000 이하, 다리의 합 4000 이하의 음이 아닌 정수가 입력되어야한다... 훈, IT 공부/C,C++,MFC 2018. 2. 28. [C/C++] C++에서의 클래스와(Class) C언어 에서의 구조체 비교해보자 C++ Class vs C Struct + Function()C언어를 배우셨다는 전제하에 설명을 드리는점 양해부탁드립니다.# C++ 에서의 클래스에 대한 간단한 이론C++은 객체지향언어 입니다. 말그대로 객체를 지향하는 언어라는 말이죠. 객체로 코드를 작성 하지않고 절차로 해도 되지만, 우리는 객체를 지향한다... 머 요딴 말인거같습니다. C++에서는 "클래스(Class)" 라는 것이 있는데, 매우 중요히 다루어 질것입니다. "클래스(Class)" 를 알기전에 객체(Object)란 무엇인지 부터 간단한 개념만 이해하고 넘어가겠습니다. 객체란(Object)객체란 : 우리가 계속해서 배웠던 "변수" 들과 앞에서 배울 "메소드(Method)" 라는 것이 모여서 "어떤한 동작을 하거나 기능" 을 하는 것을 말합.. 훈, IT 공부/C,C++,MFC 2018. 1. 31. 이전 1 2 3 4 다음 반응형