목록2016/12 (15)
삽이 부서질 때까지 삽질
어쩌다 계기가 되서 utmp, wtmp parser를 만들어 봤는데요.윈도우에서 작동하도록 제작했어요. 이 파서는 uinx나 linux에서 사용자 계정 접속이나 로그아웃 등의 기록을 볼 수 있도록 해주는거에요. 로그 경로 utmp /var/run/utmp wmp /var/log/wtmp utmp는 w 명령어로 확인가능하며 현재 접속한 리스트를 바이너리 형태로 저장하고 있고,wtmp는 last 명령어로 확인가능하며 지금까지 접속한 모든 기록을 바이너리 형태로 저장하고 있어요. 이렇게 말이죠 ㅎㅎ 이걸 아래처럼 보여주도록 제작했어요. 사용법은 간단하게 파일명만 주면 알아서 파싱해요.불편점이나 개선점이 있으시면 덧글로 남겨주세요.[코드 수정도 환영이에요!!]수정해서 올릴게요!! utmp5 기준으로 작성되서 버..
업 캐스팅은 자식 클래스 객체가 부모 클래스 타입으로 변환되는 걸 업캐스팅이라고 한다. 솔직히 이렇게 말하면 잘 못알아 먹겠다...그래서 예제를 보며 간단히 설명해죠. 여기서 부모 클래스는 A 자식 클래스는 B 입니다.시선을 가지고 이해했더니 편해서 시선을 가지고 설명할게요. A 클래스 타입으로 a를 생성했죠. 그러니 저희의 시선은 A 를 보고 있다고 생각하겠습니다.그런데 B 클래스를 A 클래스에 대입했죠. 하지만 저희는 계속 A를 보고 있는 겁니다.시선은 A인데 B를 가지고 놀려니까 에러가 발생하는 거죠. 음...설명만으로는 난해할 수 있으니그림으로 표현할게요.시선이 A 즉, 파란 부분만 보고 있으니 B가 대입이 되어 있어도 B는 관심도 없는 거죠. 이해하기 쉬웠으려나 모르겠네요 ㅎㅎ;...
저번 글에서 이번글로 넘어오신 분들은 순서가 참... ㅋㅋㅋㅋ이럴건데 그냥 쓰고 싶은 것만.. 메소드 오버로딩은 cpp 개념과 같지만...java 버전으로 하나 만들죠 ㅋㅋㅋ 메소드 오버로딩은 같은 이름의 메소드가 있을 때 메소드의 파라미터가 다르면 같은 이름이여도 됩니다.같은 이름이여도 여러개를 만들 수 있는 거죠. 위 두개의 사진의 차이점을 아시겠나요??첫번째 사진은 int를 2번 호출하였고, 아래 사진은 int 한번, double 한번을 호출하였습니다.이유는 구분이 안되기 때문에 컴파일러가 int 형으로 인식하고 int 형으로 넣었기 때문입니다.즉, 구분이 힘들면 컴파일러에 정의된 값에 따라 호출한다는 것이죠. ㅎ 그리고 메소드 오버 로딩 주의 사항이 있습니다. 바로 메소드의 이름이 같고 인자의 개..
자바에도 c/cpp 처럼 while, for, do~while 이 존재해요.이번 글에서는 for만 설명하고 나머지는 구글링 하시기를...요청글이 오면 쓰겠어요!![덧글이 하나도 없는 세상 ㅎ] for(시작 ; 조건 ; 증감){//루틴} 이렇게 작동합니다.시작에는 초기화 해주는 값. int i = 0 이라던가 i = 0 이라던가 등등...사용자가 시작하기 원하는 값이 존재하겠죠.하지만 처음 시작하는 분들이 가장 많이 사용하는 i = 0 으로 시작해볼게요. 배열을 시작하면 가장 친근한 1 ~ 9 출력하기!c랑 다른 점이 있다면 배열에 .length를 하면 길이를 반환한다는 점??...하면서 신기했어요... [cpp로 하면 이렇게...] 뭐... 다시 java로 넘어와서 1차 배열은 아래처럼도 표현이 가능하죠..
전 글에서 언급했던 두 개의 도큐먼트 타입을 지원하는걸 만들어볼게요.맛보기 1 글에서 사용했던 프로젝트를 사용하니 없으시면 그 글을 보시고 만드시면 되겠습니다.[MDI 맛보기 1 글 보러가기] 먼저 글자 이외에 클릭하면 원을 찍는 새로운 도큐먼트를 만들어볼게요.MFC 클래스를 추가해주세요. 새로운 도큐먼트니 CDocument와 View가 필요하겠죠. 원을 저장하는 CircleDoc.h에서 CArray 를 만들어주고 CircleDoc.cpp 에서 초기화를 해줍니다. CircleView.cpp 에 왼쪽 클릭하면 발생하는 메세지 핸들러를 추가하고 좌표를 저장하는 코드를 작성합니다.그리고 OnDraw에 원을 출력하는 코드를 작성합니다. 리소스 뷰 전환 후 String에 IDR_Circle_Type 를 추가합니다..
MDI 에 대해서 찾아보면 복잡해서 잘 사용을 안한다고 하네요... ㅋㅋㅋ심지어 MSDN 에 보면... 이런 글이... MDI가 두개의 도큐먼트 템플릿을 가질 때 이렇게 된다고 하네요. 저 구성도를 MDITest 창으로 보면 이렇게 되겠네요.[MFC MDI 맛보기 1 글 보러가기] 템플릿 1:1에서 쓴글이 템플릿 1:2 에서도 똑같이 써지는걸 알 수 있죠.첫번째 그림 오른쪽 도큐먼트 템플릿처럼 되어 있는 경우 같네요.[틀리면 지적해주세요!! 혼자 독학하다보니...] 다음에는 두개의 도큐먼트 타입을 생성해볼게요.
지금까진 Single Document Interface 를 사용했다면 지금은 Multiple Document Interface 를 사용해볼게요.가장 간단히 할 수 있는 뷰에 글자를 써보죠!! 다중 문서로 작업하기 위해서 설정이 약간 바뀌었다. 응용 프로그램 종류 다중 문서 중 탭 문서해제 문서 템플릿 속성 파일 확장명 mdi 사용자 인터페이스 기능 클래식 메뉴 사용도킹 가능한 클래식 도구 모음 고급 기능 인쇄 및 인쇄 미리 보기를 제외하고 해제 다중 창에서 입력하기 위해서 MDITestDoc.h 에 CArray를 추가하고 MDITestDoc.cpp 에 OnNewDocument에서 초기화를 하자.[프로젝트 이름이 MDITest 입니다. 여기는 사용자 프로젝트 이름에 따라 변할 수 있습니다.] 그리고 글자를..
이전 글을 가지고 정적 분할 윈도우를 제작해보겠습니다. [동적 분할 윈도우 글 보러 가기] 왼쪽에는 마우스 클릭으로 원을 그리고, 오른쪽에는 글자를 입력하게 제작해보겠습니다. SplitDocumentDoc.h 에 문자열을 저장하기 위한 CArray를 선언하고 SplitDocumentDoc.cpp 에서 초기화 시켜줍니다. 키보드 입력 받는 클래스를 추가하겠습니다.이때 c++ 클래스 추가가 아닌 MFC 클래스 추가해야합니다!! 그리고 글자를 쓰기 위한 메세지 핸들러 WM_CHAR 를 추가한 뒤 코드를 작성합니다. 그리고 화면에 글자를 출력하도록 OnDraw에 작성합니다. 그리고 MainFrm.cpp 에 OnCreateClient 함수를 수정해서 정적 분할 윈도우로 만든다. 이때 CreateStatic에서 가..
클릭한 곳에 도형이 생기고 화면이 분할이 되도록 만들어보자.응용 프로그램 종류 단일 문서프로젝트 스타일 : MFC 표준비주얼 스타일 전환 사용 사용자 인터페이스 기능 클래식 메뉴 사용도킹 가능한 클래식 도구 모음 사용분할 창 고급 기능 인쇄 및 인쇄 미리 보기 클릭한 곳에 도형이 생기게 좌표를 저장하는 변수를 추가하자. 생성이 될 때 초기화 되도록~ 왼쪽 클릭하면 도형이 생기도록 코드를 추가하자. 분할 윈도우를 사용하면 뷰가 두 개 이상이 되기 때문에 Invalidate 대신 UpdateAllViews 함수를 이용해 모든 뷰가 화면을 갱신하게 만들어야한다. 마지막으로 출력하게 하는 OnDraw에 출력되게 만든다.
응용 프로그램 종류 단일 문서프로젝트 스타일 : MFC 표준비주얼 스타일 전환 사용 문서 템플릿 속성 파일 확장명 : sdi 사용자 인터페이스 기능 클래식 메뉴 사용도킹 가능한 클래식 도구 모음 사용 고급 기능 인쇄 및 인쇄 미리 보기만 체크 vs2013 이상에서는 안해도 되지만 vs2010 이나 vs2012 을 사용하면 CoInitialize 함수를 추가해줘야 문서 파일을 마우스로 클릭해서 프로그램을 실행할 경우 에러가 발생하지 않는다고 한다.. [이 에러 때문에 많은 고생을...] sdi 확장명으로 저장했다가 키거나 아니면 드래그 앤 드롭을 하여 파일을 열면 저장한 이름으로 열리는 것을 확인할 수 있다.[제목 없음으로 저장한 뒤 열면 이렇게~] [이렇게도 뜨기도하고] 이제 SDI 에서 부가적인 기능을..