GSI

(펌) - http://fefene.tistory.com/88

34. ToolBar에 ComboBox붙이기
  CComboBox m_combo; //객체생성
  ID 등록 => view 메뉴 => resource symbol => new => ID_COMBO
  oncreate 에 내용 추가 (콤보를 만들고 표시하는 내용)
  m_wndToolBar.SetButtonInfo(10,IDC_COMBO,TBBS_SEPARATOR,150); 
  //툴바의 10번째버튼을 편집한다
  CRect itemRect; //콤보를넣을 사각형을 만든다
  m_wndToolBar.GetItemRect(10,&itemRect); //툴바의 10번째 버튼을 사각형에 넣는다
  itemRect.left+=5; //앞여백
  itemRect.right+=5; //뒤여백
  itemRect.bottom+=100; //콤보가열릴 공간확보
   m_combo.Create(WS_CHILD|WS_VISIBLE|CBS_DROPDOWN,itemRect,&m_wndToolBar,IDC_COMBO);
  //콤보박스를 툴바에 붙여준다
   m_combo.AddString("이름"); //내용추가
   m_combo.SetCurSel(0); //셀 선택

35.  Toolbar에 수동으로넣은 ComboBox 사용하기
  afx_msg void [안내]태그제한으로등록되지않습니다-xxOnSelectCombo(); //원형
  ON_CBN_SELCHANGE(IDC_COMBO,[안내]태그제한으로등록되지않습니다-xxOnSelectCombo) //메세지맵에 추가
  CMainFrame *pMain=(CMainFrame *)GetParent(); //메인프레임 주소참조
  CComboBox *pCom=(CComboBox *)(pMain->m_wndToolBar.GetDlgItem(IDC_COMBO));
  //콤보박스의 주소를 가져온다, 접근할 때 메인프레임 -> 툴바 -> 콤보박스 의 순서로 가야한다
  int n=pCom->GetCurSel(); //현재선택된 셀의 인덱스를 가져온다
  if(n==CB_ERR) return; //선택된셀이 없으면 중지한다
  CString str;
  pMain->m_combo.GetLBText(n,str); //선택된셀의 Text를 가져온다

36. UPDATE_COMMAND 사용하기
  pCmdUI->Enable(TRUE); //버튼 활성화
  pCmdUI->SetText((bAdd)?"취소":"신규"); //버튼의 text 설정
  pCmdUI->SetCheck(TRUE); //버튼 체크

37. 프로그램정보저장
  CWinApp::GetProfileString(섹션명,항목명,기본값); // 함수를 사용한다. (문자열)
  CWinApp::GetProfileInt(섹션명,항목명,기본값); //불러올때사용 (숫자) 
  CWinApp::WriteProfileString(섹션명,항목명,값); //저장할때 사용 (문자열)
  CWinApp::WriteProfileInt(섹션명,항목명,값); //저장할때 사용 (숫자)
  //불러올때 사용할함수
  void CMainFrame::ActivateFrame(int nCmdShow) //프로그램 실행후 프레임생성될때 실행
  //저장할 때 WM_DESTROY 메시지 사용

38. 컨트롤바 표시하기
  CMainFrame *pMain=(CMainFrame *)GetParent(); //MainFrame 주소가져오기
  //툴바를 bTool2 에따라 보이고 감춘다
  pMain->ShowControlBar(&pMain->m_wndToolBar,bTool1,FALSE);

39. Window 창크기,위치정보 저장하기
  MainFrame 의 WM_DESTROY 에
    WINDOWPLACEMENT w;
    this->GetWindowPlacement(&w); //윈도우의 정보를 저장한다.
    CString strRect;
    strRect.Format("%04d,%04d,%04d,%04d", //04d 는 4자리 확보하고 남은건 0으로 채워라
         w.rcNormalPosition.left,w.rcNormalPosition.top,
         w.rcNormalPosition.right,w.rcNormalPosition.bottom); //윈도우의 위치,크기 확보..
        
        BOOL bMax,bMin; //윈도우의 상태를 저장하기위한 변수
        //w.falg 는 이전상태의 정보를 가지고 잇다!!
        if(w.showCmd==SW_SHOWMINIMIZED)           //최소화 상태
        {
                bMin=TRUE;
                if(w.flags==0) //falg 값이 0 이면 이전 상태가 보통상태이다!!
                        bMax=FALSE;
                else   //이전상태가 최대화 상태
                        bMax=TRUE;
        }
        else                            
        {
                if(w.showCmd==SW_SHOWMAXIMIZED) //최대화상태
                {
                        bMax=TRUE;
                        bMin=FALSE;
                }
                else //보통 상태
                {
                        bMax=FALSE;
                        bMin=FALSE;
                }
        }
        AfxGetApp()->WriteProfileString("WinStatus","Rect",strRect);
        AfxGetApp()->WriteProfileInt("WinStatus","Max",bMax);
        AfxGetApp()->WriteProfileInt("WinStatus","Min",bMin);


//읽어올차례..
ActivateFrame 함수로 가서
        WINDOWPLACEMENT w;  //윈도우의 상태를 저장하는 구조체..
        BOOL bMax,bMin;               //최대,최소상태를 저장할 변수
        CString strRect; //창크기를 받아올 변수
        strRect=AfxGetApp()->GetProfileString("WinStatus","Rect","0000,0000,0500,0700");
        bMin=AfxGetApp()->GetProfileInt("WinStatus","Min",FALSE);
        bMax=AfxGetApp()->GetProfileInt("WinStatus","Max",FALSE);
        int a=atoi(strRect.Left(4)); //문자열을 int 로 바꿔준다.
        int b=atoi(strRect.Mid(5,4));     //atoi 아스키 값을 int형으로 바꿔준다..
        int c=atoi(strRect.Mid(10,4));
        int d=atoi(strRect.Mid(15,4));
        w.rcNormalPosition=CRect(a,b,c,d);
        if(bMin)
        {
                w.showCmd=SW_SHOWMINIMIZED;
                if(bMax)
                {
                        w.flags=WPF_RESTORETOMAXIMIZED  ;
                }
                else
                {
                        w.flags=0;
                }
        }
        else
        {
                if(bMax)
                {
                        w.showCmd=SW_SHOWMAXIMIZED;
                }
                else
                {
                        w.showCmd=SW_SHOWNORMAL;
                }
        }
        this->SetWindowPlacement(&w); //설정된 값으로 윈도우를 그리게 한다..
        
        //CFrameWnd::ActivateFrame(nCmdShow); //이건 반드시 주석처리한다..

Posted by gsi
: