본문 바로가기
C & C++/MFC 컨트롤

[Tip] 인텔리젼스 구현

by izen8 2011. 4. 4.
반응형



 Edit박스같이 보이는 입력창에 글자를 입력하면 parsing을 해서 그 단어가 들어간

리스트를 보여준다, 그것을 구현할려면, ComboBox로는 부족한 감이 있다,

아이콘 같은 것을 넣을려면, ComboBox를 상속받아서 서브클래싱을 하면 되긴하다,

하지만 초보자 입장에서 서브클래싱과 클래스재정의는 압박으로 다가온다,

 그래서 간단하게 EditBox와 다이얼로그를 이용한 인텔리센스 구현법을 알아보자,

일단 EditBox를 추가한다, 그리고 클래스 위자드에서 EN_UPDATE 메시지를 오버라이딩한다,

 
  1. void CVKStarterDlg::OnUpdateRunedit()    
  2. {   
  3.     // Some code here   
  4.   
  5.     ...   
  6.   
  7.     OnIntellisense();   
  8.   
  9.     // Some code here   
  10.   
  11.     ...   
  12.   
  13. }  


이렇게 해놓고 이제 OnIntellisense()를 구현해보자,

 일단 다이얼로그를 하나 추가하고, 크기를 알맞게 조절한다,( MoveWindow()에서 조절하지만 크기를 정확히 )

그리고 해당하는 아이콘과 실제 경로는 프로그래머가 알아서 해야한다, (코드가 길어서 넣기 뭐하다,)

 
  1. void CVKStarterDlg::InitIntellisense()   
  2. {   
  3.     m_ctrlRunEdit.GetWindowRect( &m_EditRect );   
  4.   
  5.     m_pIntellisense = new CVKIntellisense( this, m_pLinkedList, m_pOptionDlg->   
  6.                                          GetMaxOut(), m_pOptionDlg->GetSearchNum());   
  7.     m_pIntellisense->Create( IDD_DROPLIST, this );   
  8.     m_pIntellisense->GetWindowRect( &m_Rect );   
  9.     m_pIntellisense->MoveWindow( m_EditRect.left, m_EditRect.bottom,    
  10.                                             m_EditRect.Width(), m_Rect.Height());   
  11.     m_pIntellisense->ShowWindow( SW_HIDE );   
  12. }   
  13.   
  14. void CVKStarterDlg::OnIntellisense()   
  15. {   
  16.     m_nBlendIntel = m_pOptionDlg->GetBlendIntel();   
  17.     AnimateWindow( m_pIntellisense->m_hWnd, m_nBlendIntel,    
  18.                                                  AW_SLIDE | AW_VER_POSITIVE );   
  19. }  


 InitIntellisense()에서 다이얼로그를 초기화 해준다, 모달리스형태이다.

 그리고 OnIntellisense()에서 AnimateWindow()를 사용해준다,

 Timer를 이용해서 MoveWindow()로 구현할 수도있지만, 간단하게 API를 제공하므로 사용하여도 무방하다,

 저 코드는 인텔리센스가 내려오는 코드이다,

 만약 작업이 끝나고 다시 올라가는 루틴을 작성할려면 간단하게,

 AnimateWindow()의 인자인 AW_VER_POSITIVE를 AW_VER_NEGATIVE로 바꿔주면된다,

 이렇게 하여서 간단한 인텔리센스가 완성되었다,
반응형

댓글