C언어,ARM
CTabCtrl_CalSize
안녕1999
2020. 9. 26. 23:35
//CTabCtrl_util.cpp #include "stdafx.h" #include "CTabCtrl_util.h" int CTabCtrl_ShowTabPage(CTabCtrl *pCTabCtrl,int i) { int ipre=-1; if(pCTabCtrl) { TCITEM item; CWnd *pCWnd; item.mask=TCIF_PARAM; ipre=pCTabCtrl->GetCurSel(); if(ipre==i) { //skip } else { if(pCTabCtrl->GetItem(ipre,&item)) { pCWnd=(CWnd*)item.lParam; if(pCWnd) { pCWnd->ShowWindow(SW_HIDE); } } pCTabCtrl->SetCurSel(i); if(pCTabCtrl->GetItem(i,&item)) { pCWnd=(CWnd*)item.lParam; if(pCWnd) { pCWnd->ShowWindow(SW_SHOW); } } } } return ipre; } CWnd *CTabCtrl_ShowCurSelTabPage(CTabCtrl *pCTabCtrl,int bCmdShow) { CWnd *pCWnd; TCITEM ti; int CurSel; ti.mask=TCIF_PARAM; CurSel=pCTabCtrl->GetCurSel(); pCTabCtrl->GetItem(CurSel,&ti); pCWnd=(CWnd*)ti.lParam; if(pCWnd) { pCWnd->ShowWindow(SW_SHOW); } return pCWnd; } void *CTabCtrl_GetCurPage(CTabCtrl *pCTabCtrl) { if(pCTabCtrl) if(pCTabCtrl->m_hWnd)//20140708 { int i; TCITEM item; i=pCTabCtrl->GetCurSel(); item.mask=TCIF_PARAM; if(pCTabCtrl->GetItem(i,&item)) { return (void*)(item.lParam); } } return 0; } int CTabCtrl_GetTabPageIndex(CTabCtrl *pCTabCtrl,char *title) { if(title) if(pCTabCtrl) { int i; int cnt; TCITEM item; char buf[128]; //memset(&item,0,sizeof(item)); item.mask=TCIF_TEXT; item.pszText=buf; item.cchTextMax=sizeof(buf); cnt=pCTabCtrl->GetItemCount(); for(i=0; i < cnt; i++) { if(pCTabCtrl->GetItem(i,&item)) { if(item.pszText) if(item.pszText[0]==title[0]) if(strcmp(item.pszText,title)==0) { return i; } } } } return -1; } void *CTabCtrl_GetTabPage(CTabCtrl *pCTabCtrl,char *title) { void *pPage=NULL; int i; if(pCTabCtrl) { i=CTabCtrl_GetTabPageIndex(pCTabCtrl,title); if(i!=-1) { pPage=CTabCtrl_GetTabPage(pCTabCtrl,i); } } return pPage; } void *CTabCtrl_GetTabPage(CTabCtrl *pCTabCtrl,int i) { void *pPage=NULL; if(i!=-1) if(pCTabCtrl) { TCITEM item; item.mask=TCIF_PARAM; if(pCTabCtrl->GetItem(i,&item)) { pPage=(void*)item.lParam; } } return pPage; } int CTabCtrl_ShowTabPage(CTabCtrl *pCTabCtrl,char *title) { int i; i=CTabCtrl_GetTabPageIndex(pCTabCtrl,title); if(i!=-1) { CTabCtrl_ShowTabPage(pCTabCtrl,i); } return i; } void CTabCtrl_CalSize(CTabCtrl *pCTabCtrl) { if(pCTabCtrl) { RECT r; if(pCTabCtrl->m_hWnd) { //set tabctrl size CWnd *pCWnd; pCWnd=(CWnd*)(pCTabCtrl->GetParent()); void SetWindowSizeNoMoveFit(HWND hwnd_parent,HWND hwnd_control,int right,int bottom); SetWindowSizeNoMoveFit(pCWnd->m_hWnd,pCTabCtrl->m_hWnd,0,0); ::GetClientRect(pCTabCtrl->m_hWnd,&r); pCTabCtrl->AdjustRect(0,&r); TCITEM item; //CWnd *pCWnd; int i; item.mask=TCIF_PARAM; i=0; while(pCTabCtrl->GetItem(i,&item)) { pCWnd=(CWnd*)item.lParam; if(pCWnd) { pCWnd->MoveWindow(&r); } i++; } } } } //tab컨트롤 안의 윈도우를 tab컨트롤 크기에 맞게 조정한다. void CTabCtrl_SizeFitClient(CTabCtrl *pCTabCtrl) { if(pCTabCtrl) { RECT r; if(pCTabCtrl->m_hWnd) { TCITEM item; CWnd *pCWnd; int i; ::GetClientRect(pCTabCtrl->m_hWnd,&r); pCTabCtrl->AdjustRect(0,&r); //tab 사이즈 빼고 실질적인 클라이언트 영역 item.mask=TCIF_PARAM; i=0; while(pCTabCtrl->GetItem(i,&item)) { pCWnd=(CWnd*)item.lParam; if(pCWnd) { pCWnd->MoveWindow(&r); } i++; } } } } void CTabCtrl_CalSize(CTabCtrl *pCTabCtrl,int i) { if(pCTabCtrl) { RECT r; if(pCTabCtrl->m_hWnd) { TCITEM item; CWnd *pCWnd; pCTabCtrl->GetClientRect(&r); pCTabCtrl->AdjustRect(0,&r); item.mask=TCIF_PARAM; if(pCTabCtrl->GetItem(i,&item)) { pCWnd=(CWnd*)item.lParam; if(pCWnd) { pCWnd->MoveWindow(&r); } } } } } void CTabCtrl_AddPage(CTabCtrl *pCTabCtrl,CWnd *pCWnd,char *text) { if(pCTabCtrl) { TCITEM item; int cnt; item.mask=TCIF_TEXT|TCIF_PARAM; cnt=pCTabCtrl->GetItemCount(); item.pszText=text; item.lParam=(LPARAM)pCWnd; pCTabCtrl->InsertItem(cnt,&item); CTabCtrl_CalSize(pCTabCtrl,cnt); CTabCtrl_ShowTabPage(pCTabCtrl,cnt); } } void CTabCtrl_DeletePage(CTabCtrl *pCTabCtrl, int i, void (*delete_func)(void *pDlg), int default_view_page) { if(pCTabCtrl) { //i=pCTabCtrl->GetCurSel(); //if(i > 0) { TCITEM item;CWnd *pCWnd; item.mask=TCIF_PARAM; if(pCTabCtrl->GetItem(i,&item)) { pCWnd=(CWnd*)item.lParam; if(pCWnd) { pCWnd->ShowWindow(SW_HIDE); pCWnd->CloseWindow(); pCWnd->DestroyWindow(); if(delete_func)delete_func(pCWnd); } } pCTabCtrl->DeleteItem(i); if(default_view_page==-1)default_view_page=i-1; if(default_view_page==-1)default_view_page=0; CTabCtrl_ShowTabPage(pCTabCtrl,default_view_page); CTabCtrl_CalSize(pCTabCtrl); } } } void CTabCtrl_DeletePage(CTabCtrl *pCTabCtrl,void *pPage,void (*delete_func)(void *pDlg)) { if(pCTabCtrl) { TCITEM item; int i,cnt; item.mask=TCIF_PARAM; cnt=pCTabCtrl->GetItemCount(); for(i=0; i < cnt; i++) { if(pCTabCtrl->GetItem(i,&item)) if(((void*)item.lParam)==pPage) { CTabCtrl_DeletePage(pCTabCtrl,i,delete_func); break; } } } } void CTabCtrl_DeletePageAll(CTabCtrl *pCTabCtrl,void (*delete_func)(void *pDlg)) { if(pCTabCtrl) { TCITEM item; int i,cnt; item.mask=TCIF_PARAM; cnt=pCTabCtrl->GetItemCount(); for(i=0; i < cnt; i++) { CTabCtrl_DeletePage(pCTabCtrl,0,delete_func);//20140818 페이지 삭제가 제대로 안되는 문제 수정(메모리누수) } } } void CTabCtrl_DeletePage(CTabCtrl *pCTabCtrl,void *pDlg) { if(pCTabCtrl) { TCITEM item; int i,cnt; item.mask=TCIF_PARAM; cnt=pCTabCtrl->GetItemCount(); for(i=0; i < cnt; i++) { if(pCTabCtrl->GetItem(i,&item)) if(((void*)item.lParam)==pDlg) { pCTabCtrl->DeleteItem(i); break; } } CTabCtrl_CalSize(pCTabCtrl); cnt=pCTabCtrl->GetItemCount(); if(cnt) { cnt--; CTabCtrl_ShowTabPage(pCTabCtrl,cnt); } } } void CTabCtrl_AddTabDlg(CTabCtrl *pTabCtrl,void *pDlg,char *tabname) { if(pTabCtrl) { TCITEM item; int cnt; item.mask=TCIF_TEXT|TCIF_PARAM; item.pszText=tabname; item.lParam=(LPARAM)pDlg; cnt=pTabCtrl->GetItemCount(); pTabCtrl->InsertItem(cnt,&item); //g_Data.m_pTabCtrl->SetCurSel(cnt); CTabCtrl_CalSize(pTabCtrl); CTabCtrl_ShowTabPage(pTabCtrl,cnt); } } //실패 : -1 int CTabCtrl_FindTabPage(CTabCtrl *pTabCtrl,void *pDlg) { if(pTabCtrl) { TCITEM item; int cnt; int i; item.mask=TCIF_PARAM; //item.pszText=tabname; cnt=pTabCtrl->GetItemCount(); for(i=0; i < cnt; i++) { if(pTabCtrl->GetItem(i,&item)) { if((void*)(item.lParam)==pDlg) { return i; } } } } return -1; } void CTabCtrl_ChangeTabName(CTabCtrl *pTabCtrl,void *pDlg,char *tabname) { int i; i=CTabCtrl_FindTabPage(pTabCtrl,pDlg); if(i!=-1) { TCITEM item; item.mask=TCIF_TEXT; item.pszText=tabname; pTabCtrl->SetItem(i,&item); CTabCtrl_CalSize(pTabCtrl,i); CTabCtrl_ShowTabPage(pTabCtrl,i); } } char *CTabCtrl_GetTabName(CTabCtrl *pTabCtrl,void *pDlg,char *buf,int len) { int i; i=CTabCtrl_FindTabPage(pTabCtrl,pDlg); if(i!=-1) { TCITEM item; item.mask=TCIF_TEXT; item.pszText=buf; item.cchTextMax=len; pTabCtrl->GetItem(i,&item); return item.pszText; } return NULL; }