140428_MFC_여러가지 Memo
by 담배맛구마1)afx_msg :: Event Handler Function
afx는 개발팀 이름
2) 전역변수는 앞에 Afx가 붙는다
:: AfxMessageBox(...);
3) API에서는 Message가 WndProc이 처리하는데
MFC는 Message Handler 함수가 처리한다.
4) WM_PAINT On_PAINT
이 둘을 묶는 Macro 추가한다.
BEGIN_MESSAGE_MAP(CMy140319_DragDropView, CView)
// 표준 인쇄 명령입니다.
ON_COMMAND(ID_FILE_PRINT, &CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, &CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, &CView::OnFilePrintPreview)
ON_WM_CREATE()
ON_WM_DESTROY()
ON_WM_LBUTTONDOWN()
ON_WM_MOUSEMOVE()
ON_WM_LBUTTONUP()
END_MESSAGE_MAP()
5) Timer : OS에게 주기적 WM_TIMER Message 발생 요청
i) Timer 설정
UINT SetTimer(UINT nIDEvent, UINT nElapse, TIMERPROC lpTimerFunc=OnTimer())
Timer Number Mili Second Function To Call
ex) SetTimer(1, 1000, NULL); SetTimer(2, 1000, NULL);
ii) List to do
OnTimer(){...}
iii) Timer 해제
BOOL KillTimer( int nIDEvent)
ex) KillTimer(1), KillTimer(2)
tip) Timer의 설정과 해제는 적절한 위치에 있어야 한다.
ex) 시작하자 마자 -> OnCreate
종료할때 -> OnDestroy {Timer는 마지막에 꼭 해제시켜줘야 한다}
6) Drag & Drop
i) OnLButtonDown(UINT nFlags, CPoint point){
point값이 Drag당하는 피사체 범위 안에 있으면 Drag 모드로 Flag값 설정
}
ii) OnMouseMove(UINT nFlags, CPoint point){
Drag 모드이면 -> Drag당하는 피사체의 좌표 이동
}
iii)OnLButtonUp(UINT nFlags, CPoint point){
Drag모드라면 -> Drag당한 피사체의 좌표 고정
}
tip) 범위 상관없이 그냥 Drag 모드인지 아닌지 판단할때는 nFlags값을 검사하면 됨
물론 피사체를 Dragging으로 움직일 때도 nFlags값해도 되지만 일반적인 방법은 아님
MK_CONTROL :: Ctrl키 눌림
MK_SHIFT :: Shift키 눌림
MK_LBUTTON :: 왼쪽 버튼 눌림
MK_RBUTTON :: 오른쪽 버튼 눌림
ex) if(nFlags & MK_LBUTTON){
Dragging
}
else{
Just Moving
}
7)KeyBorad Message
case1) Character Key
1st) WM_KEYDOWN
2nd) WM_CHAR
3rd) WM_KEYUP
case2) Without Character Key
1st) WM_KEYDOWN
2nd) WM_KEYUP
afx_msg void On*(UNIT nChar, UINT nRepCnt, UNIT nFlags){...}
i) nChar :: 눌러진 키의 가상 키 코드(WM_CHAR 발생시에는 문자 키 코드 => OnChar()의 경우란 의미)
VK_LEFT VK_RIGHT VK_UP VK_DOWN etc..
ii) nRepCnt :: 반복된 키의 입력 횟 수
iii)nFlags :: 키보드에 대한 상태정보
8)MFC Class
CObject CCmdTarget CWnd CDialog CDialogEx
CView
CFrameWnd
CDocument
CWinThread CWinApp
9)SDI(Single Document Interface)
CView → C__View
CDocument → C__Doc
CWinApp → C__App
CFrameWnd → C__MainFrame
10)Dialog Based
CWinApp → C__App
CDialogEx(Ex추가됨) → C__Dlg(두개 생성되는데 한개는 도움말용)
OnCreate()
OnInitDialog() :: 대화상자 초기화
OnPaint() :: Client Area(CView인스턴스)가 없기 때문에
OnClose()
OnDestroy()
DoDataExchange() :: 컨트롤과 변수를 연결하는 기능하는 함수 :: DDX라고불림
*Edit Text
CEdit class → DDX_Control :: DDX에서 제공하는 Class 변수 사용
CString class → DDX_Value :: DDX에서 제공하지 않는 CString 같은 Class 변수 사용
UpdateData(True):: 변수 → 컨트롤
UpdateData(False):: 컨트롤 → 변수
11) DDX_Value 방식으로 변수선언하는 Control
Edit Control
Radio Button
CheckBox Button
* UpdateData(TRUE or FAlSE); :: 변수에 넣고 빼기
* Control을 제어 하는 방법
__DataType__ * PointerName = (__DataType__ *)GetDlgItem(ControlName);//변수명은 pCEdit 이런식
ex)
CButton * pCButton = (CButton*)GetDlgItem(IDC_BUTTON_Button1);
CEdit * pCEdit = (CEdit*)GetDlgItem(IDC_EDIT_SOURCE);
CListBox * pCListBox = (CListBox*)GetDlgItem(IDC_LIST_ListBox);
12) DDX_Control 방식으로 변수선언하는 Control
CListBOx
CComboBOx
etc
...
* Control을 제어 하는 방법
DDX_Value 방식과는 달리 그냥 바로 멤버 메소드에 접근 가능하다. 물론 DDX_Value에서 사용하는 방법으로도 사용이 가능하다.
13)
Modal Dialog :: 다른 작업 불가능(보안적으로 ↓; 계속 대기하다가 끊길 수 있기에)
Modeless Dialog :: 다른 작업 가능
14) Modal Dialog 사용
i) Dialog design (IDD_DIALOG_MODAL)
ii) Dialog Class 선언(CModelessDlg)
iii)Main Dialog Class의 cpp에 include <ModelessDlg.h>
iv) Main Dialog Class에 변수 선언
CModalDlg m_ModalDlg;
m_Dlg.DoModal();
15) Modeless Dialog 사용
i) Dialog design (IDD_DIALOG_MODELESS)
ii) Dialog Class 선언(CModelessDlg)
iii)Main Dialog Class의 cpp에 include <ModalDlg.h>
iv) 변수 추가
m_ModlessDlg.Create( 띄어줄 Dialog ID, 부모의 ID)
ex) m_ModlessDlg.Create( IDD_출DIALOG_MODELESS, this);
m_ModlessDlg.ShowWindows(SW_SHOW);
'한아전(독학사)의추억' 카테고리의 다른 글
140428_MFC_Useful Class, Function (0) | 2014.04.28 |
---|---|
140428_MFC_Windows Message (0) | 2014.04.28 |
2학년1학기_운영체제보안 과제/5월 9일까지 전송 (0) | 2014.04.28 |
독학사2단계_자료구조_4장 연결리스트 (0) | 2014.04.27 |
독학사2단계_자료구조_3장 스택과 큐 (1) | 2014.04.27 |
블로그의 정보
정윤상이다.
담배맛구마