[MFC] 프로젝트


Dev&Prog

Written by 블럭 on 2013. 11. 24. 15:58

 윈도우 프로그래밍의 학기말 프로젝트
우리조는 최근 문제가 되고 있는 성범죄자에 관한 주제로 성범죄자 관리 및 예방 시스템을 구현중이다.
현재 나와있는 전자발찌의 부족한 기능에 살을 붙히고 창의적인 기능을 추가해 제출할 예정이다.

어제 본격적으로 시작을 하고 마일스톤에 올리는데 올리자마자 해결, 해결, 해결 떠서 정말 뿌듯하다!!!
svn을 사용하면서 정말 개발자가 된 느낌을 받아서 그런지 하루종일 새벽이 되어가는데도 MFC만 만지고 있다.
정말 정말 내가 생각한 기능이 눈앞에서 보여질 때의 짜릿함이란 !! 이 짜릿함에 어떻게 코딩을 그만두랴!!
하지만 ... 나의 젤 문제는 쓸떼 없이 여러언어를 접하고 있다는 것.. 너무 짜릿함만 느끼고 있는 건 아닐련지

Revision.7
1. 배경음 추가
2. 경고문구 출력 후 경찰 등장

Revision.8
1. 더블 버퍼링 구현

Revision.9
1. 도로 위 자동차를 랜덤하게 생성
 // car_Time은 랜덤함수 측정용

Revision.11
1. 미니맵 구현

Revision.12
1. 메뉴에 리셋버튼 추가

Revision.15
1. 모달리스 <-> 뷰 상호 통신

Revision.16
1. 비프음 추가 == 수정중

Revision.17
1. Draw 영역 분할
 - 모든 맵에서 공통적으로 출력하는 DrawImage
 - 각 맵에서 각각으로 출력되는 DrawMonitor

 Hint
 >> 어느맵을 선택하던지 미니맵은 보여야 하므로 DrawImage에 맵을 구현
 >> 각 맵마다 맵과 등장인물 등의 다른 요소가 보여야 하므로 DrawMonitor에 구현

[MFC] 윈도우 크기 고정 및 스타일


Dev&Prog

Written by 블럭 on 2013. 11. 23. 23:44

윈도우 생성시 크기조절 및 스타일 설정  

CMainFrame::PreCreateWindow(CREATESTRUCT& cs){
//...................... 
 cs.cy = 600;    

 cs.cx = 600; 
 cs.style &= ~WS_THICKFRAME;     //스타일, 프레임 크기 조절 비활성화
 cs.style &= ~WS_MAXIMIZEBOX;    //최대화 버튼 비활성화

//.........................
 }

 

[AnkhSVN] Visual Studio 2010 svn


Dev&Prog

Written by 블럭 on 2013. 11. 23. 18:43

지원 버전 Visual Studio 2013, 2010, 2008, 2005, 11

다운 링크 : http://visualstudiogallery.msdn.microsoft.com/E721D830-7664-4E02-8D03-933C3F1477F2

AnkhSVN을 설치 후 Visual Studio를 실행하게 되면 View - Repository Explorer 가 생성된다.
svn폴더에서 프로젝트를 불러오려면 File - Open - Subversion Project을 선택 한다.
그리고 계정 입력을 하면 프로젝트가 열린다.
수정이 완료되면 Commit을 코멘트와 함께 올릴 수 있으며
팀작업시 다른 팀원이 프로젝트를 수정 후 Commit하였다면 Update를 통하여 수정 된 코드를 볼 수 있다. 

[MFC] 더블 버퍼링


Dev&Prog

Written by 블럭 on 2013. 11. 23. 12:10

메모리DC를 이용한 더블 버퍼링!
기본적으로 화면에 깜빡거리는 현상을 제거하기 위해 사용 된다고 한다.
onDraw에서 그림이 그려지는데, 그 과정에 배경이 지워졌다 그려졌다 하는 그 부분이 우리에겐
깜빡임 현상으로 보이는 것이다.
이러한 현상을 제거하기 위해 메모리 DC에 화면을 그리고 한번에 화면으로 빠르게 복사 해주는것이
메모리DC를 이용한 더블 버퍼링이다!!


void CMy1121Pro2View::OnDraw(CDC* pDC)

{
 CMy1121Pro2Doc* pDoc = GetDocument();
 ASSERT_VALID(pDoc);
 if (!pDoc)
  return;
 
 
    CRect rect;
    GetClientRect(&rect);
 
    // 메모리 DC와 Bitmap 생성.
    CDC memDC;
    CBitmap *pOldBitmap, bitmap;
 
    // 메모리DC와 Bitmap의 호환되는 DC객체 생성 
    memDC.CreateCompatibleDC(pDC);
 
    // 마찬가지로 화면 DC와 호환되는 Bitmap 생성
    bitmap.CreateCompatibleBitmap(pDC, rect.Width(), rect.Height());
 
    pOldBitmap = memDC.SelectObject(&bitmap);
    memDC.PatBlt(0, 0, rect.Width(), rect.Height(), WHITENESS);
 
 
    // 메모리 DC에 그리기
    DrawImage(&memDC);
 
    // 메모리 DC -> 화면 DC로 복사
    pDC->BitBlt(0, 0, rect.Width(), rect.Height(), &memDC, 0, 0, SRCCOPY);

 

    //메모리 DC, Bitmap 삭제
    memDC.SelectObject(pOldBitmap);

    memDC.DeleteDC();
    bitmap.DeleteObject();

}

// CxxxxxxxView 그리기
void CxxxxxxxxView::DrawImage(CDC *pDC)
{
   // OnDraw 내용 그리기!!
}

 

 

 

CBrush나 CPen이랑 비슷한거 같다.
교수님은 책에도 나와있는 이 좋은 기능을 왜 알려주시지 않았을까....

#include<stdio.h>
#include<stdlib.h> #include<string.h> // 아래 프로그램을 위한 기본 헤더 파일들

#define MAX_STACK_SIZE 100 // 스택의 최대 사이즈를 상수값 100으로 선언한다.

typedef char element; // element를 char 타입으로 사용하게끔 정의한다.
typedef struct { // 구조체 타입을 정의
element stack[MAX_STACK_SIZE]; // (element) char stack[100];
int top;
} StackType; // 이 구조체는 StackType이란 이름을 사용한다.

int is_full(StackType *s){  // 스택이 full인지 검사하는 함수 구조체 StackType 포인터 s선언
return (s->top==(MAX_STACK_SIZE-1)); // 스택->top의 값이 ==(100-1)이면 return 1;
}                                             // s->top==(99) 아니면 return 0;

void init(StackType *s){  // 스택 초기화 함수
s->top = -1; // 스택->top에 -1을 대입
}

int is_empty(StackType *s){ // 스택이 비어있는지 체크 return (s->top==-1); // 스택->top == -1 (초기화 시킨 값과 같으면) return 1;

} // 비어있지 않으면 return 0; void push(StackType *s, element item){ // 스택에 밀어넣기 (스택구조포인터, 값)      if (is_full(s)){ // 스택이 full ?      printf("공백에러"); // "공백에러" 출력      return;     } else s->stack[++(s->top)] = item; // ! full > 스택-> (element stack[MAX_STACK_SIZE];) } // stack[++(스택->top)] = 받아 온 item값; // ++는 선위연산자이므로 s->top값을 우선 증가 시킨 후 item의 값을 대입 시킨다. // stack[-1] 에서 stack[0]=item값; element pop(StackType *s){ // 스택에서 꺼내기 / char pop(StackType *s);     if (is_empty(s)){ // 빈 스택 체크      printf("공백에러");      exit(1);     } else return s->stack[(s->top)--]; // 스택의 값을 리턴 후 배열을 감소시킨다.(후위) } element peek(StackType *s){ // 스택에서 값확인 / char peek(StackType *s);      if(is_empty(s)){ // 빈 스택 체크      printf("공백에러");      exit(1);     }      else return s->stack[s->top]; // 스택의 값을 리턴만 시킨다. } int prec(char op){ //연산자의 우선순위를 정하는 함수 switch(op){ case'(':case')':return 0; // 우선순위 0 < 1 < 2; case'+':case'-':return 1; case'*':case'/':return 2; } return -1; // 없으면 -1 반환. } void infix_to_postfix(char exp[]){ int i=0; char ch, top_op; int len=strlen(exp); // len 변수에 exp길이를 체크하여 값을넣는다. StackType s; //구조체 s를 선언. init(&s); // 초기화함수 init을 이용 s의 주소를 넘겨주어 초기화한다. for(i=0;i<len;i++){ // i<문자의 길이 ch=exp[i]; // ch=exp[0] "("를 저장으로 시작 switch(ch){ case'+': case '-' : case '*' : case '/' : while(!is_empty(&s) && (prec(ch)<=prec(peek(&s)))) // 빈스택이 아니고(0) && 우선순위가 ch<=현재 스택의 값인 동안 printf("%c",pop(&s)); //스택에서 꺼내어 출력한다. push(&s, ch); //현재 ch의 값을 스택에 밀어넣는다. break; //빠져나가기. case '(': push(&s, ch); break; case ')': // ")"의 경우 top_op = pop(&s); //top_op의 변수에 스택의 값을 꺼내어 저장 while(top_op!='('){ //top_op의 변수가 "("가 아닐 동안 printf("%c", top_op); // top_op의 값을 출력 top_op=pop(&s); // top_op의 값을 스택에서 계속꺼내어 저장 } break; default: printf("%c",ch); //경우가 없을 때 기본적으로 ch를 출력시킨다. break; } } while(!is_empty(&s)) //빈스택이 아닐동안 (스택이 빌때까지) printf("%c", pop(&s)); // 스택에서 꺼내어 출력 } main(){ infix_to_postfix("(2+3)*4/2"); // 구하게 될 메인 식 }

결과

   23+4*2/

생성자


Dev&Prog/객체지향언어

Written by 블럭 on 2013. 4. 6. 19:13

 

생성자의 정의
 생성자는 '구축자'라는 의미를 갖는다. 생성자는 클래스의 객체가 메모리 상에 생성될 때, 즉 객체가 구축되는 시점에서 자동적으로 호출되는 멤버 함수이기 때문이다.

생성자는 클래스명과 동일한 이름의 멤버 함수로 정의하고 반환값의 형태를 지정하지 않는다.
(void도 지정하지 않는다) 이러한 형태는 C++컴파일러가 생성자를 식별할 수 있고, 그것을 자동적으로 호출하는 코드를 컴파일 시에 생성할 수 있다.

안드로이드 로그인


Dev&Prog/Android

Written by 블럭 on 2013. 2. 24. 00:02

  requestWindowFeature(Window.FEATURE_NO_TITLE);

없애고자 하는 Layout의 Activity중 Oncreate 매서드 부분에 윗 구문을 집어넣으면 된다

또한 전체화면을 원할경우 아래 내용을 manifest에 추가한다.

android:theme="@android:style/Theme.NoTitleBar.Fullscreen" >