이전 과정
https://push-back.tistory.com/10?category=1004907
메인 다이얼로그 SKP
KakaoTalk_FindChatDlg.cpp
메인 UI 컨트롤
값을 보내고 전시만 하며 데이터 처리는 하지 않는다.
멤버변수 생성
IDC_EDIT_WHO, IDC_EDIT_FILE_PATH, IDC_LIST_SHOW에 멤버 변수를 생성한다.
CKakaoTalkFindChatDlg::CKakaoTalkFindChatDlg(CWnd* pParent /*=nullptr*/)
: CDialogEx(IDD_KAKAOTALK_FINDCHAT_DIALOG, pParent)
, m_FilePath(_T(""))
, m_Imposter(_T(""))
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CKakaoTalkFindChatDlg::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
DDX_Control(pDX, IDC_LIST_SHOW, m_lstShow);
DDX_Text(pDX, IDC_EDIT_FILE_PATH, m_FilePath);
DDX_Text(pDX, IDC_EDIT_WHO, m_Imposter);
}
OnInitialDialog()
다이얼로그 처음 수행 시
리스트 컨트롤 초기화 및 칼럼 생성을 하고
큐를 비운다.
BOOL CKakaoTalkFindChatDlg::OnInitDialog()
{
CDialogEx::OnInitDialog();
// 시스템 메뉴에 "정보..." 메뉴 항목을 추가합니다.
// IDM_ABOUTBOX는 시스템 명령 범위에 있어야 합니다.
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != nullptr)
{
BOOL bNameValid;
CString strAboutMenu;
bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
ASSERT(bNameValid);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
// 이 대화 상자의 아이콘을 설정합니다. 응용 프로그램의 주 창이 대화 상자가 아닐 경우에는
// 프레임워크가 이 작업을 자동으로 수행합니다.
SetIcon(m_hIcon, TRUE); // 큰 아이콘을 설정합니다.
SetIcon(m_hIcon, FALSE); // 작은 아이콘을 설정합니다.
// TODO: 여기에 추가 초기화 작업을 추가합니다.
// 리스트 컨트롤(LIST_SHOW) 초기화
CRect rt; // 리스트 컨트롤 크기
m_lstShow.GetWindowRect(&rt);
m_lstShow.SetExtendedStyle(LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT); // 리스트 컨트롤에 선 표시
m_lstShow.InsertColumn(0, TEXT("날짜"), LVCFMT_LEFT, rt.Width() * 0.2); // 첫번째 행
m_lstShow.InsertColumn(1, TEXT("뭐래했냐믄"), LVCFMT_LEFT, rt.Width() * 1-0.2); // 두번째 행
qData_Imposter_all.empty();
return TRUE; // 포커스를 컨트롤에 설정하지 않으면 TRUE를 반환합니다.
}
BEGIN_MESSAGE_MAP
1. IDC_BUTTON_UPLOAD_FILE 눌렀을 때 이벤트
2. IDC_BUTTON_SHOW 눌렀을 때 이벤트
BEGIN_MESSAGE_MAP(CKakaoTalkFindChatDlg, CDialogEx)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_BUTTON_UPLOAD_FILE, &CKakaoTalkFindChatDlg::OnBnClickedButtonUploadFile)
ON_BN_CLICKED(IDC_BUTTON_SHOW, &CKakaoTalkFindChatDlg::OnBnClickedButtonShow)
// ON_NOTIFY(NM_CUSTOMDRAW, IDC_LIST_SHOW, OnCustomdrawList)
END_MESSAGE_MAP()
OnBnClickedButtonUploadFile()
1. IDC_BUTTON_UPLOAD_FILE 눌렀을 때 이벤트
파일 검색기를 띄운다. 선택 가능 확장자는 .txt 외 모든 파일 가능
// 'UPLOAD' 버튼 클릭 이벤트
// 파일을 업로드 할 수 있도록 다이얼로그 띄어준다.
void CKakaoTalkFindChatDlg::OnBnClickedButtonUploadFile()
{
static TCHAR BASED_CODE szFilter[] = _T(".txt 파일(*.txt) | *.txt;|모든파일(*.*)|*.*||");
CFileDialog dlg(TRUE, _T("*.txt"), _T("txt"), OFN_HIDEREADONLY, szFilter);
if (IDOK == dlg.DoModal())
{
CString pathName = dlg.GetPathName();
SetDlgItemText(IDC_EDIT_FILE_PATH, pathName);
}
}
OnBnClickedButtonShow()
2. IDC_BUTTON_SHOW 눌렀을 때 이벤트
CFind 함수를 불러와 데이터 추출을 하고
임포스터가 실존하면 큐에 담아 ShowList()로 리스트 컨트롤에 뿌린다.
void CKakaoTalkFindChatDlg::OnBnClickedButtonShow()
{
// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
CString strFilePath; // 파일 경로
CString strImposter; // 임포스터 이름
GetDlgItemText(IDC_EDIT_FILE_PATH, strFilePath);
GetDlgItemText(IDC_EDIT_WHO, strImposter);
CFind FindImposter;
FindImposter.SetFile(strFilePath, strImposter);
if (FindImposter.IsExist)
{
m_lstShow.DeleteAllItems();
qData_Imposter_all = FindImposter.qData_Imposter;
ShowList();
}
else
{
MessageBox(_T("존재 하지 않는 임포스터"));
}
}
ShowList()
리스트 컨트롤에 데이터를 뿌리는 함수
큐에서 데이터를 꺼내 날짜, 채팅을 전시한다.
같은 날짜에서 채팅이 여러 개인 경우, 최초 날짜만 표기한다.
TYPE_IN, TYPE_OUT, TYPE_KICK인 경우, 무조건 날짜를 표기한다.
else는 나중에 타입이 추가될 때를 대비하여 남겨둠
void CKakaoTalkFindChatDlg::ShowList()
{
stImposterInfo ImposterInfo;
int nQSize = qData_Imposter_all.size();
int DateSave = 0;
int nCount = 0;
for (int i = 0; i < nQSize; i++)
{
ImposterInfo = qData_Imposter_all.front();
qData_Imposter_all.pop();
CString strChat, strDate;
strChat = ImposterInfo.cTalk;
int nDate = ImposterInfo.nDate;
strDate.Format(_T("%d-%d-%d"), nDate/10000, (nDate-((nDate/10000)*10000))/100, nDate-((nDate/100)*100));
// 타입에 따라
if ((ImposterInfo.nType == TYPE_IN)||(ImposterInfo.nType == TYPE_OUT)||(ImposterInfo.nType == TYPE_KICK))
{
m_lstShow.InsertItem(nCount, strDate);
m_lstShow.SetItemText(nCount, 1, strChat);
nCount++;
DateSave = nDate;
}
else if (ImposterInfo.nType == TYPE_CHAT)
{
(DateSave == nDate) ? m_lstShow.InsertItem(nCount, _T("")) : m_lstShow.InsertItem(nCount, strDate);
m_lstShow.SetItemText(nCount, 1, strChat);
nCount++;
DateSave = nDate;
}
else
{
// Type : Date, Else...
}
}
}
다음 과정
https://push-back.tistory.com/12?category=1004907
'뚝딱쓰' 카테고리의 다른 글
카카오톡 특정 인물 대화 내역 보기 - 개발 #3 (0) | 2022.02.12 |
---|---|
카카오톡 특정 인물 대화 내역 보기 - 개발 #1 (0) | 2022.02.12 |
카카오톡 특정 인물 대화 내역 보기 (0) | 2022.02.05 |
댓글