728x90
형님, 우주여행 3장 스타트합니다!!!! 🚀✨ MFC로 우주를 정복할 시간! 이제 본격적으로 실용적이고 복잡한 윈도우 애플리케이션을 만들어보겠습니다!! 마치 우주선에 탑승한 듯! 미래를 여는 C++의 세계로!! 🌌💥
3장: MFC로 우주를 여행하는 애플리케이션 만들기!
이번엔 파일 입출력, 멀티 스레딩, 그리고 복잡한 UI 컨트롤을 다뤄볼 거예요! 형님, 이건 진짜 우주를 떠나는 것처럼 멋지고 흥미로운 과정이에요! 우주선의 엔진을 가동할 준비 되셨죠?! 🚀💨
1. 파일 입출력! 📂📝
형님, 이제 파일을 다뤄볼 거예요! 텍스트 파일을 읽고 쓰는 방법을 배우면, 파일을 통해 데이터를 처리하는 엄청난 프로그램을 만들 수 있어요! 데이터를 파일에 기록하거나, 파일에서 읽어와서 처리하는 작업을 할 거예요!
파일 읽고 쓰기 코드!
#include "stdafx.h"
#include <afxwin.h> // MFC 핵심 헤더 파일
#include <fstream> // 파일 입출력을 위한 헤더
class CMyWinApp : public CWinApp {
public:
virtual BOOL InitInstance();
};
class CMyWnd : public CFrameWnd {
public:
CMyWnd();
afx_msg void OnButtonClick();
DECLARE_MESSAGE_MAP()
private:
void WriteToFile(CString text);
CString ReadFromFile();
};
BEGIN_MESSAGE_MAP(CMyWnd, CFrameWnd)
ON_COMMAND(1, &CMyWnd::OnButtonClick)
END_MESSAGE_MAP()
CMyWnd::CMyWnd() {
Create(NULL, _T("Hello, MFC with File IO"));
// 버튼 생성
CButton* pButton = new CButton;
pButton->Create(_T("Save to File"), WS_CHILD | WS_VISIBLE, CRect(50, 50, 200, 100), this, 1);
}
void CMyWnd::OnButtonClick() {
// 텍스트를 파일에 저장
WriteToFile(_T("Hello, File IO in MFC!"));
// 파일에서 읽은 텍스트를 출력
CString fileText = ReadFromFile();
AfxMessageBox(fileText); // 파일에서 읽은 텍스트를 메시지 박스로 출력
}
void CMyWnd::WriteToFile(CString text) {
std::ofstream outFile("example.txt"); // 파일 열기
outFile << (LPCTSTR)text; // 텍스트 쓰기
outFile.close(); // 파일 닫기
}
CString CMyWnd::ReadFromFile() {
std::ifstream inFile("example.txt"); // 파일 열기
CString fileText;
char buffer[100];
if (inFile.is_open()) {
inFile.getline(buffer, 100); // 파일에서 한 줄 읽기
fileText = CString(buffer); // 읽은 내용을 CString으로 변환
inFile.close(); // 파일 닫기
}
return fileText;
}
BOOL CMyWinApp::InitInstance() {
CMyWnd* pFrame = new CMyWnd;
m_pMainWnd = pFrame;
pFrame->ShowWindow(SW_NORMAL);
pFrame->UpdateWindow();
return TRUE;
}
설명:
- WriteToFile(): 텍스트를 example.txt 파일에 저장하는 함수입니다! 텍스트 파일을 만들고, 내용을 기록해요.
- ReadFromFile(): example.txt 파일에서 내용을 읽어서 반환하는 함수입니다! 파일 입출력의 기본적인 흐름을 배우게 됩니다!
2. 멀티 스레딩! 🧠⚡
형님, 이제 멀티 스레딩의 세계로 떠나볼까요? 멀티 스레딩은 여러 개의 작업을 동시에 처리할 수 있게 해줘요! 마치 우주선에 여러 명의 승무원이 동시에 일을 하는 것처럼요! 멀티 스레드를 활용하면 비동기 작업, 멀티태스킹이 가능해져요!
멀티 스레드 예시 코드!
#include "stdafx.h"
#include <afxwin.h> // MFC 핵심 헤더 파일
#include <thread> // 멀티 스레딩을 위한 헤더
class CMyWinApp : public CWinApp {
public:
virtual BOOL InitInstance();
};
class CMyWnd : public CFrameWnd {
public:
CMyWnd();
afx_msg void OnButtonClick();
DECLARE_MESSAGE_MAP()
private:
void DoWork(); // 멀티 스레드에서 실행할 함수
};
BEGIN_MESSAGE_MAP(CMyWnd, CFrameWnd)
ON_COMMAND(1, &CMyWnd::OnButtonClick)
END_MESSAGE_MAP()
CMyWnd::CMyWnd() {
Create(NULL, _T("Hello, MFC with Multi-threading"));
// 버튼 생성
CButton* pButton = new CButton;
pButton->Create(_T("Start Thread!"), WS_CHILD | WS_VISIBLE, CRect(50, 50, 200, 100), this, 1);
}
void CMyWnd::OnButtonClick() {
// 새로운 스레드 생성
std::thread t(&CMyWnd::DoWork, this);
t.detach(); // 스레드를 백그라운드에서 실행
}
void CMyWnd::DoWork() {
// 멀티 스레드에서 실행될 작업
for (int i = 0; i < 5; ++i) {
CString message;
message.Format(_T("Running in thread: %d"), i);
AfxMessageBox(message); // 메시지 박스로 출력
Sleep(1000); // 1초 대기
}
}
BOOL CMyWinApp::InitInstance() {
CMyWnd* pFrame = new CMyWnd;
m_pMainWnd = pFrame;
pFrame->ShowWindow(SW_NORMAL);
pFrame->UpdateWindow();
return TRUE;
}
설명:
- std::thread: C++11부터 제공되는 스레딩 라이브러리로, 멀티 스레드를 쉽게 사용할 수 있어요.
- DoWork(): 이 함수는 새로운 스레드에서 실행되어, 1초 간격으로 메시지를 출력합니다!
이제 비동기 처리와 동시 작업 처리를 배웠으니, 더 복잡한 작업을 동시에 처리할 수 있어요! 🚀🔥
3. 고급 UI 컨트롤 다루기! 🖥️🛠️
형님, 이제 더 복잡한 UI 컨트롤을 다뤄봅시다! 콤보 박스, 리스트 박스, 다양한 메뉴 등을 사용해서 프로그램을 보다 직관적이고 멋지게 만들어 봅시다!
콤보 박스와 리스트 박스 예시 코드!
#include "stdafx.h"
#include <afxwin.h> // MFC 핵심 헤더 파일
class CMyWinApp : public CWinApp {
public:
virtual BOOL InitInstance();
};
class CMyWnd : public CFrameWnd {
public:
CMyWnd();
afx_msg void OnButtonClick();
DECLARE_MESSAGE_MAP()
private:
CComboBox m_comboBox; // 콤보 박스를 위한 멤버 변수
CListBox m_listBox; // 리스트 박스를 위한 멤버 변수
};
BEGIN_MESSAGE_MAP(CMyWnd, CFrameWnd)
ON_COMMAND(1, &CMyWnd::OnButtonClick)
END_MESSAGE_MAP()
CMyWnd::CMyWnd() {
Create(NULL, _T("Hello, MFC with ComboBox and ListBox"));
// 콤보 박스 생성
m_comboBox.Create(CBS_DROPDOWN | WS_CHILD | WS_VISIBLE, CRect(50, 50, 200, 80), this, 1);
m_comboBox.AddString(_T("Option 1"));
m_comboBox.AddString(_T("Option 2"));
m_comboBox.AddString(_T("Option 3"));
// 리스트 박스 생성
m_listBox.Create(WS_CHILD | WS_VISIBLE | LBS_STANDARD, CRect(50, 100, 200, 200), this, 2);
m_listBox.AddString(_T("Item 1"));
m_listBox.AddString(_T("Item 2"));
m_listBox.AddString(_T("Item 3"));
}
void CMyWnd::OnButtonClick() {
CString comboText, listText;
m_comboBox.GetLBText(m_comboBox.GetCurSel(), comboText); // 선택된 콤보 박스 항목
m_listBox.GetText(0, listText); // 리스트 박스의 첫 번째 항목
CString message;
message.Format(_T("ComboBox: %s, ListBox: %s"), comboText, listText);
AfxMessageBox(message); // 선택된 값들을 출력
}
BOOL CMyWinApp::InitInstance() {
CMyWnd* pFrame = new CMyWnd;
m_pMainWnd = pFrame;
pFrame->ShowWindow(SW_NORMAL);
pFrame->UpdateWindow();
return TRUE;
}
설명:
- CComboBox: 콤보 박스는 여러 항목 중에서 선택할 수 있게 해주는 UI 컨트롤입니다!
- CListBox: 리스트 박스는 여러 항목을 나열해두고 선택할 수 있는 컨트롤입니다!
이제 콤보 박스와 리스트 박스를 사용해서 사용자 인터페이스를 더 풍성하게 만들 수 있어요! 😎💥
728x90
'반도체 > MFC' 카테고리의 다른 글
[우주여행] 6장: C++에서 멀티스레딩과 동기화! (0) | 2024.12.17 |
---|---|
[우주 여행 ] 4장: MFC로 시스템을 설계하고, 고급 기능을 구현하기!! (0) | 2024.12.17 |
[우주여행] 2.MFC로 실용적인 애플리케이션 만들기! (0) | 2024.12.17 |
[우주여행] 2. MFC란 무엇인가? (0) | 2024.12.17 |
[우주여행] 1. C++의 세계로 첫 발을 내딛다! 🚀 (0) | 2024.12.17 |