반응형
MFC 기반 서버 소켓부터 모달리스 다이얼로그, 쓰레드 코드, 성능 타이밍, 메뉴 처리 정리!
1. MFC 서버 초기화 & 소켓 기반 통신
핵심 클래스: CSocket, CArchive
예제 코드:
void CServerSocket::OnAccept(int nErrorCode) {
CDataSocket* pClient = new CDataSocket;
Accept(*pClient);
AfxGetMainWnd()->PostMessage(WM_USER_ACCEPT, (WPARAM)pClient, 0);
CSocket::OnAccept(nErrorCode);
}
팁: CArchive로 Serialize 기반 직렬화 송수신 구현 시 안정적입니다.
2. 범용 서버/데이터 소켓 구조
핵심 설계: UM_ACCEPT 메시지를 통한 이벤트 처리, Serialize 메서드 구현
예제 코드:
void CMyData::Serialize(CArchive& ar) {
if (ar.IsStoring()) {
ar << m_strData;
} else {
ar >> m_strData;
}
}
팁: 데이터 처리 클래스를 CObject 상속하여 Serialize 인터페이스 구현
3. 모달리스 대화상자에서 View 자동 업데이트
핵심 동작: 다이얼로그 → View 포인터 참조 → Invalidate() 호출
예제 코드:
void CInputDlg::OnBnClickedApply() {
UpdateData(TRUE);
m_pView->Invalidate();
}
팁: 생성 시 m_pView는 다이얼로그의 생성자에서 전달받아 초기화
SMALL
4. 쓰레드 예제 – MFC & WinAPI 연동
핵심 API: AfxBeginThread, WaitForSingleObject
예제 코드:
UINT ThreadFunc(LPVOID pParam) {
for (int i = 0; i < 1000000; ++i) {}
return 0;
}
void CMainFrame::StartMyThread() {
CWinThread* pThread = AfxBeginThread(ThreadFunc, NULL);
}
팁: 쓰레드 내부에서 UI 접근 시 PostMessage() 사용 권장
5. MFC 윈도우 핸들 가져오기 (AfxGetApp)
핵심 개념: AfxGetApp()->m_pMainWnd, GetActiveView()
예제 코드:
CWnd* pMainWnd = AfxGetApp()->m_pMainWnd;
CView* pView = ((CFrameWnd*)pMainWnd)->GetActiveView();
팁: 특정 뷰의 컨트롤 접근이나 메시지 전달에 활용 가능
6. 고정밀 시간 측정 – QueryPerformanceCounter
핵심 함수: QueryPerformanceFrequency, QueryPerformanceCounter
예제 코드:
LARGE_INTEGER freq, start, end;
QueryPerformanceFrequency(&freq);
QueryPerformanceCounter(&start);
// 타이밍 측정 대상 코드
Sleep(500);
QueryPerformanceCounter(&end);
double duration = (double)(end.QuadPart - start.QuadPart) / freq.QuadPart;
팁: 타이밍 로그 기록용 유틸 클래스로 래핑해 사용하면 재사용성 높음
7. MFC 메뉴 메시지 처리 정리
핵심 매크로: ON_COMMAND, ON_COMMAND_RANGE, ON_UPDATE_COMMAND_UI
예제 코드:
BEGIN_MESSAGE_MAP(CMyView, CView)
ON_COMMAND_RANGE(ID_MENU_ITEM1, ID_MENU_ITEM5, OnMenuRange)
END_MESSAGE_MAP()
void CMyView::OnMenuRange(UINT nID) {
AfxMessageBox(_T("선택된 메뉴: ") + std::to_wstring(nID).c_str());
}
팁: 그룹 단위 메뉴 처리 시 유지보수 및 확장성 우수
반응형
'취미생활 > 프로그래밍' 카테고리의 다른 글
C++/MFC 자주 발생하는 에러 & 해결법 (2) | 2025.07.09 |
---|---|
SAS 엑셀 Import 시 한글 깨짐 해결과 변수명 자동 변환 (2) | 2025.07.08 |
SAS 옵션 코드들 (2) | 2025.07.07 |
SAS 9.4에서 여러 개의 SAS 파일 자동 실행하는 방법 (1) | 2025.07.05 |
CSV·텍스트·Access 파일을 Excel로 변환하기 (2) | 2025.07.05 |