블로그 이미지
안녕1999

카테고리

전체 (3067)
자바스크립트 (20)
안드로이드 (14)
WebGL (4)
변비 (17)
정치,경제 (35)
C언어,ARM (162)
컴퓨터(PC, Note Book, 윈.. (41)
전자회로, PCB (27)
유머,안웃긴,GIF,동영상 (118)
국부론60 (71)
모듈(PCB) (3)
건강 (2)
FreeCAD (25)
PADS (43)
퇴직,퇴사,구직,취업 활동 (3)
C# (86)
엑셀 (8)
워드 (0)
LabView (6)
레고 (30)
FPGA (0)
Total
Today
Yesterday

달력

« » 2025.1
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

공지사항

최근에 올라온 글

CTabCtrl_CalSize

C언어,ARM / 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;
}

'C언어,ARM' 카테고리의 다른 글

DLL  (0) 2020.09.26
AVR Studio err  (0) 2020.09.26
다이얼로그 창의 자식창 영역좌표 얻기  (0) 2020.09.26
excel RoundDown  (0) 2020.09.26
ANSI 유니코드 문자열 코드 변환 쉽게  (0) 2020.09.19
Posted by 안녕1999
, |

최근에 달린 댓글

글 보관함