'MFC'에 해당되는 글 10건

  1. 2008/07/02 Visual Studio의 유용한 단축키 모음~ (4)
  2. 2008/06/17 CString과 char*간의 변환 (4)
  3. 2008/06/12 Dialog에 카메라 영상 띄우는 간단한 기본소스
  4. 2008/06/10 Microsoft Platform SDK 설치 및 세팅
  5. 2008/05/20 다이얼로그의 배경색 바꾸기 (2)
  6. 2008/05/17 타이틀바가 없는 다이얼로그의 이동
  7. 2008/05/08 다이얼로그 기반 프로그램에서 실행과 동시에 다이얼로그 감추기
  8. 2008/04/22 Dialog의 class name 강제로 바꿔서 사용하기
  9. 2008/03/26 윈도우 해상도 정보 가져오기
  10. 2008/03/19 MFC에서 현재 실행 중인 응용프로그램 목록 얻어오기 (2)
2008/07/02 21:09

Visual Studio의 유용한 단축키 모음~

Visual Studio에서 자주 사용되는 단축키 모음입니다.
다 쓰지는 않겠지만 몇 개 정도 알아두면 도움이 되겠지요...^^;;

Ctrl + Space : 인텔리센스 출력
Ctrl + F5 : 빌드 후 프로그램 실행
F5 : Debugging 모드로 작동
F9 : Break Point
Ctrl + F2 : 북마크
F2 : 북마크로 이동
F10 : Debugging 모드로 작동하되 엔트리 포인트부터 시작
Ctrl + F10 : Debugging 모드로 작동하되 커서의 위치까지
Alt + F8 : 들여쓰기 정리
Ctrl + Shite + Space : 현재 가르키고 있는 함수의 매개변수 보기
Alt + B -> E : Clean
Alt + B -> R : Rebuild All
Ctrl + E : 현재 괄호랑 맞는 괄호를 찾아준다.
Alt + F7 : Project Setting
Ctrl + H : 바꿈
Ctrl + F : 찾기
Alt + E -> I : 여러파일에서 찾기
Ctrl + W : 클래스 위자드 (MFC 코딩시에만 사용)
Alt + 2 : output 윈도우
Alt + 0 : Workspace 윈도우

Alt + MouseMove : 컬럼 Selection

Tab 들여쓰기
Shift+Tab 내어쓰기
F4 다음 에러메세지로 이동
Alt+F8 들여쓰기 자동 조정
Ctrl+Shift+F8 열 블럭
Ctrl+F 찾기
Ctrl+F3 현재 커서에 있는 단어로 찾기
Ctrl+H 찾아 바꾸기
F3 다음 단어 찾기
Ctrl+Shift+F3 이전 단어 찾기
Alt+E+I 프로젝트 내의 모든 파일에서 찾기
Ctrl+] 괄호 짝 찾기
Ctrl+F2 북마크 설정
F2 설정된 북마크로 이동
F9 현재 커서위치에 BreakPoint를 설정/해제
Ctrl+B 브레이크 포인트 관리 메뉴
Ctrl+Spacebar 멤버목록 팝업창
Ctrl+T 현재 커서에 있는 단어의 툴팁정보 보기
Ctrl+U 모두 소문자로
Ctrl+Shift+U 모두 대문자로
Ctrl+Shift+8 Tab은 ^ 로 공백은 . 으로 보여줌

Debug 모드 작동중
F10 : Step Over (다음줄로)
F11 : Step Into (함수 안으로 들어감)
F5 : 다음 BreakPoint 까지 작동
Alt + 7 : Call Stack 윈도우
Alt + 3 : Watch 윈도우
Shift + F11 : 현재 루틴에서 빠져나온다.
Shift + F5 : 강제로 디버깅 모드 종료

크리에이티브 커먼즈 라이선스
Creative Commons License
Trackback 0 Comment 4
2008/06/17 15:08

CString과 char*간의 변환

- CString을 char* 로 변환하기

1. memcpy 사용하기

CString str = "test";
unsigned char st[30];
memcpy(st, (unsigned char*)(LPCTSTR)str,i);

2. strcpy 사용하기

CString strData = "test";
int length = strData.GetLength();
char* st = new char[length];
strcpy(st, strData.GetBuffer(0));

3. 형변환 사용하기

CString str;
str = "test";
char* st = LPSTR(LPCTSTR(str));

- char* 를 CString으로 변환하기

CString클래스의 Format함수를 사용

char st[] = "test";
CString str;
str.Format("%s", st);
크리에이티브 커먼즈 라이선스
Creative Commons License
Trackback 0 Comment 4
2008/06/12 10:04

Dialog에 카메라 영상 띄우는 간단한 기본소스

OpenCV를 이용해 Dialog에 카메라 영상을 띄우는 간단한 소스이다.
말 그대로 영상을 띄우기만 하는 소스이다. ㅋ
카메라 연결과 관련된 부분은 Connect_camera 함수이고
CallBack함수 내에서 IplImage구조체를 이용하여 영상 데이터를 가지고
하고 싶은 걸 맘대로 하면된다.
카메라 선택창이 뜨지 않고 PC에 기본으로 설정된 카메라와 바로 연결된다.
뭐 하나 할때마다 카메라 연결 세팅하는게 귀찮아~ㅋ





크리에이티브 커먼즈 라이선스
Creative Commons License

'Programming Tips > OpenCV' 카테고리의 다른 글

OpenCV Library의 구성.  (0) 2008/06/30
Dialog에 카메라 영상 띄우는 간단한 기본소스  (0) 2008/06/12
OpenCV를 이용한 카메라 Calibration ToolBox  (0) 2008/05/20
IplImage 구조체  (0) 2008/04/16
OpenCV Library  (0) 2008/03/15
Trackback 0 Comment 0
2008/06/10 09:43

Microsoft Platform SDK 설치 및 세팅

Microsoft사의 최신 Platform SDK이다.
뭐...이런 저런 용도로 많이 쓰이겠지만 이번에 GDI+를 쓸 일이 생겨서 설치를 했다...ㅋ
기본경로로 설치를 하게 되면 아래와 같은 경로를 가지게 될 것이다.
비주얼 스튜디오에 세팅을 할 때 착오없으시길....ㅎㅎ

"C:\Program Files\Microsoft Platform SDK"






비주얼 스튜디오에 세팅은 Tools->Option메뉴로 들어가서
Show directories for 부분에 include files에서는 아래 그림과 같이
사용자 삽입 이미지

























Show directories for 부분에 Library files에서는 아래 그림과 같이 해주면 된다.
사용자 삽입 이미지

크리에이티브 커먼즈 라이선스
Creative Commons License
Trackback 0 Comment 0
2008/05/20 18:23

다이얼로그의 배경색 바꾸기

다이얼로그 기반으로 프로그램을 하다보면 회색의 우중충한 다이얼로그 색 때문에 내 기분까지 우울해진다...
사실 그렇지는 않지만 언젠가 필요할 다이얼로그의 배경색을 바꾸는 법은 다음과 같이 OnEraseBkgnd() 함수의 재정의를 통해서 가능하다.

BOOL XXXXXXX::OnEraseBkgnd(CDC* pDC)
{
  CRect winRC;
  GetClientRect(winRC);
 
  CBrush bkBrush(RGB(0, 0, 100));
  CBrush* pOldBrush = pDC->SelectObject(&bkBrush);
  pDC->Rectangle(winRC);
  pDC->SelectObject(pOldBrush);
 
  return TRUE;
}

OnEraseBkgnd()가 Class Wizard의 Message Map에 나타나지 않을 경우에는 맨 뒤의 Class Info 탭의 Advanced Options의 Message filter를 Window로 바꾼 후 다시 Message Map으로 돌아가면 찾을 수 있다.
OnEraseBkgnd()를 추가한 후 위와 같은 코드를 넣어준후 bkBrush()안의 RGB값을 바꾸면 원하는 색깔로 다이얼로그의 배경을 바꿀 수 있다.

주의 할 점은 OnEraseBkgnd()를 추가했을 때 return값이 다음과 같은데

return CDialog::OnEraseBkgnd(pDC);

저 부분을 return TRUE;로 바꾸는 것을 잊지 말자는 것...

크리에이티브 커먼즈 라이선스
Creative Commons License
Trackback 0 Comment 2
2008/05/17 12:54

타이틀바가 없는 다이얼로그의 이동

타이틀바가 없는 다이얼로그 또는 타이틀바가 아니라 다른 부분을 클릭해도
다이얼로그의 이동이 가능하게 해야 할 경우
다음과 같이
OnLButtonDown() 내에서
PostMessage를 이용하여 다음과 같은 메시지를 발생시키면 이동이 가능하다.

PostMessage(WM_NCLBUTTONDOWN, HTCAPTION, MAKELPARAM(point.x, point.y));

WM_NCLBUTTONDOWN은 wParam으로 주어진 곳의 클라이언트을 클릭했다고 하더라도 클라이언트 영역이 아닌 곳을 클릭한 것과 같은 효과를 주며 wParam이
HTCAPTION이므로 클라이언트 영역을 클릭했어도 타이틀바를 클릭한 것과 같은 효과를 주는 것이다.

wParam으로 가능한 여러가지 값들은 다음과 같다.

HTTOP : 크기조정 가능한 윈도우의 위쪽 경계
HTBOTTOM : 크기조정 가능한 윈도우의 아래쪽 경계
HTLEFT : 크기조정 가능한 윈도우의 왼쪽 경계
HTRIGHT : 크기조정 가능한 윈도우의 오른쪽 경계
HTTOPLEFT : 크기조정 가능한 윈도우의 왼쪽 위 경계
HTTOPRIGHT : 크기조정 가능한 윈도우의 오른쪽 위 경계
HTBOTTOMLEFT : 크기조정 가능한 윈도우의 왼쪽 아래 경계
HTBOTTOMRIGHT : 크기조정 가능한 윈도우의 오른쪽 아래 경계

HTMINBUTTON , HTREDUCE: 최소화 버튼
HTMAXBUTTON, HTZOOM : 최대화 버튼
HTCLOSE : 닫기 버튼
HTMENU : 메뉴
HTSYSMENU : 시스템 메뉴
HTCLIENT : 클라이언트 영역

크리에이티브 커먼즈 라이선스
Creative Commons License
Trackback 0 Comment 0
2008/05/08 18:06

다이얼로그 기반 프로그램에서 실행과 동시에 다이얼로그 감추기

다이얼로그를 domodal로 띄울 때 실행과 동시에 다이얼로그를 트레이로 내리거나 감추어야 할 경우 일반적으로 사용하는 방법으로 윈도우를 보이지 않게 하려면

ShowWindow(FALSE);

와 같이 하면 되지만  다이얼로그 기반의 프로그램에서는 DoModal 함수가 내부적으로 WM_SHOWWINDOW 메시지를 사용하여 윈도우를 띄워버리기 때문에 OnInitalDialog나 OnCreate 처리기에서 인위적으로

ShowWindow(SW_HIDE);

라고 코딩을 해놓아도 해당 작업이 무시되어 버린다.
이러한 문제가 발생하는 이유는 DoModal 함수가 내부적으로 메시지 루프를 형성하기 직전에 SendMessage를 이용하여 대화상자를 출력시키는 방법을 사용하기 때문이다. SendMessage를 보낸 쪽은 받는 쪽의 처리기가 작업을 완료할 때까지 다른 작업을 수행하지 않는다는 것은 알고 있을 것이다. 따라서 OnInitalDialog, OnCreate함수 내에서 윈도우를 보이지 않게 하는 코드를 추가한다고 하여도 대화상자는 출력된다.
이럴 경우에는 PostMessage를 사용하여 해결이 가능하다.
PostMessage는 SendMessage와는 다르게 사용자가 지정한 메시지를 메시지 대기열에 넣어놓기만하고 계속 작업을 수행하게 된다. 따라서 대기열에 넣어둔 메시지가 실행되려면 최소한 메시지를 받는 윈도우가 메시지 루프를 형성한 후가 되고 위와 같은 상황에서는 자신이 자신에게 메시지를 전달하는 방식이므로 다이얼로그가 메시지 루프를 형성하기 전에는 PostMessage에 의해 메시지 대기열에 들어가있는 메시지는 수행되지 않는다.
DoModal함수가 메시지 루프를 형성하기 전에 WM_SHOWWINDOW 메시지를 이용하여 다이얼로그를 출력시키더라도 메시지 루프가 형성되고나면 메시지 대기열에 들어가있던 메시지에 의해 다이얼로그를 감출 수가 있다.

OnInitalDialog함수의 맨 아래쪽에 다음과 같은 코드를 넣어주면 실행과 동시에 다이얼로그가 숨겨진다.

PostMessage (WM_SHOWWINDOW,FALSE, SW_OTHERUNZOOM);

크리에이티브 커먼즈 라이선스
Creative Commons License
Trackback 0 Comment 0
2008/04/22 20:43

Dialog의 class name 강제로 바꿔서 사용하기

MFC를 이용해 여러 개의 다이얼로그를 가지는 프로그램을 만들 때
한쪽 다이얼로그에서 다른 어떤 다이얼로그로 메세지를 날려줘야할 상황이 생기면 유용한
팁입니다. 특히나 메세지를 받는 쪽 다이얼로그가 캡션이 없는 다이얼로그고 클래스 네임을 이용해서 핸들을 얻어야 할 때 말이죠.

SendMessage를 이용해서 특정 다이얼로그로 이벤트를 날릴려면 먼저 FindWindow함수를 이용해서 받는 쪽 다이얼로그의 핸들을 얻어와야겠죠.

FindWindow( LPCTSTR lpszClassName, LPCTSTR lpszWindowName );

FindWindow함수의 원형은 위와 같습니다. 앞 쪽의 인자가 클래스 네임이 되고, 뒤 쪽의 인자가 윈도우의 캡션입니다. 하지만 위에서 말씀드렸다시피 다이얼로그의 캡션이 없기 때문에 클래스 네임을 이용해서 찾아야겠지요. 하지만 Visuak Studio의 Spy++를 이용해서 클래스 네임을 찾아보면 아래와 같이 나옵니다. 아마 다이얼로그 기반으로 만들면 모두 저런 식으로 나올겁니다.

사용자 삽입 이미지

#32770은 CDialog의 상속을 받아 만들어진 다이얼로그의 기본 클래스 네임입니다. 저런 클래스 네임으로는 정확한 핸들을 얻을 수 없습니다.

하지만 강제적으로 다이얼로그의 클래스 네임을 바꿔서 사용하면 정확한 핸들을 얻을 수 있게 되겠죠. 강제적으로 클래스 네임을 바꾸는 방법은 아래와 같습니다.

1. 프로젝트에 삽입한 다이얼로그를 클래스로 추가합니다.
사용자 삽입 이미지
저는 CCaliibDlg라는 이름의 클래스로 추가하였습니다.
그림이 조잡하지만 어쩌겠습니까...ㅡㅡ;;

2. 해당 프로젝트 폴더 내의 .rc 확장자의 리소스 파일을 메모장으로 열어서 다음과 같이 CLASS 속성을 추가하고 클래스 네임으로 사용할 이름을 넣어줍니다.
사용자 삽입 이미지

3. 다음으로 해당 다이얼로그 클래스의 생성자에 다음과 같은 코드를 추가합니다.
사용자 삽입 이미지

4. 컴파일 후 실행을 시키고 Spy++로 찍어보면~

사용자 삽입 이미지
위의 그림처럼 클래스 네임이 나오게 됩니다. 그럼 저 클래스 네임을 이용해서 핸들을 얻어 사용하면 되겠죠.

크리에이티브 커먼즈 라이선스
Creative Commons License
Trackback 0 Comment 0
2008/03/26 16:15

윈도우 해상도 정보 가져오기

윈도우 해상도 정보를 가져오는 방법으로 간단하게
두 가지를 들 수 있습니다.

1) CRect rect;                     //윈도우 해상도를 저장할 Rect형 변수
    GetDesktopWindow()->GetWindowRect(rect);

저렇게 하면 변수 rect에 윈도우 해상도가 저장이 됩니다.

2) int x, y;
    x = GetSystemMetrics(SM_CXMAXTRACK);
    y = GetSystemMetrics(SM_CYMAXTRACK);

저렇게 해주면 x와 y에 각각 윈도우 해상도의 가로와 세로 값이 저장됩니다.
간단하네요 ㅋ
크리에이티브 커먼즈 라이선스
Creative Commons License
Trackback 0 Comment 0
2008/03/19 18:39

MFC에서 현재 실행 중인 응용프로그램 목록 얻어오기