반응형 C & C++/MFC 컨트롤199 모달리스 창이 항상 위에 있는 문제 해결 모달로 다이얼로그를 만들면 포커스를 항상 잡아먹기 때문에 모달리스로 만드는 경우가 많다. 이렇게 하면 부모 다이얼로그로 포커스는 넘어가지만 정작 모달리스 창이 더 위에 보이는 경우가 있다. 일반적인 경우 다음과 같이 모달리스를 생성한다. status_dlg->Create(IDD_STATUS_DIALOG, this); 하지만 다음과 같이 하면 모달리스 창이 뒤로 갈 수 있다. status_dlg->Create(IDD_STATUS_DIALOG, CWnd::GetDesktopWindow()); 2011. 12. 16. Slider 포커스 이동 - 슬라이더 MFC에서 마우스휠이나 키보드 입력을 처리하다보면 꼭 생기는 문제가 slider control등이 그 키에 반응을 한다는 것이다. 예전에 키보드의 방향키에 의해서 silder control이 옮겨질 때는 pretranslate message에서 아예 return을 시키는 편법을 썼었는데 마우스 휠은 그렇게 하기 귀찮더라. 그래서 devpia를 뒤지던 중 고마우신 분이 아주 cool하게 4줄자리 소스를 써 주셨다. HWND hWnd = ::GetFocus(); HWND NextWnd; NextWnd = ::GetNextDlgTabItem(m_hWnd, hWnd, TRUE); ::SetFocus(NextWnd); 해당 Item의 바로 옆으로 포커스가 옮겨지게 된다. 2011. 12. 16. 드레그 앤 드랍 (Drag and Drop) 구현 - 리스트 다음 소스는 Windows API 정복에 나와있는 드래그 앤 드롭 소스을 바탕으로, MFC 버전으로 변경한 것이다. 리스트뷰 자체는 드래그에 관련된 기능을 가지고 있지 않으며, 이미지 리스트의 드래그 기능을 빌려서 사용하므로 먼저 이미지 리스트에 충분히 익숙해 있어야 한다. 시작하기 앞서, 사용 멤버 변수 bool m_bDrag; /**< 현재드래그중인지체크플래그*/ INT m_nOldTarget; /**< 이전드래그선택항목 */ INT m_nSource; /**< 드래그중인항목*/ CListCtrl m_ctrlList; /**< 리스트컨트롤*/ CImageList *m_pDragImage; /**< 드래그중나타낼이미지리스트*/ 1. 드래그 시작 void CListDragDropDlg::OnLvnBegi.. 2011. 12. 16. 버튼 누름효과 - 버튼 버튼의 포인터를 얻으셔서 WM_LBUTTONDOWN과 WM_LBUTTONUP메시지를 보내면 버튼을 실제로 누른 효과와 버튼을 눌렀을 때 이벤트를 처리하는 효과를 동시에 보실 수 있습니다. 밑에서 IDC_BUTTON1은 실제 버튼의 컨트롤 ID입니다. CButton *pButton=(CButton*)GetDlgItem(IDC_BUTTON1); pButton->SendMessage(WM_LBUTTONDOWN, 0 ,0); pButton->SendMessage(WM_LBUTTONUP, 0 ,0); 2011. 12. 15. Exteded Combo 를 이용한 콤보박스에 이미지 넣기 - 콤보 상자 사용하고자 하는 헤더파일에 아래와 같이 추가합니다. private: COMBOBOXEXITEM m_cmb_item; CImageList m_image_list; 그리고 OnInitDialog()부분에는 아래와 같이 추가합니다. CString str; m_image_list.Create(IDB_BITMAP, 16, 16, RGB(255, 255, 255)); m_cmb_ex.SetImageList(&m_image_list); // 확장 콤보박스 항목에서 사용하는 이미지 형식은 COMBOBOXEXITEM 구조체를 사용한다. for(int i = 0; i < 5; i++){ // COMBOBOXEXITEM 구조체의 mask멤버를 사용한다. m_cmb_item.mask = CBEIF_IMAGE | CBEIF_S.. 2011. 12. 14. Edit 점프 기능 - 에디트 박스 그림과 같이 에디트 컨트롤이 5개 있는 화면이라고 가정해 보자.. 위 화면에서 시리얼 키를 입력받는 다고 가정할 때.. 숫자영어로 조합된 5개 문자씩을 각각의 에디트에 입력받으려면 어떻게 구현해야 할까? 또한 에디트 하나에 5개의 문자가 입력되면 어떻게 자동으로 다음 에디트로 넘어갈까? 요런 자동화가 되어있지 않다면 하나씩 입력하고 5개 확인하고 탭 누르고 또 입력하고 탭 누르고.. 그렇게 간단한건 아니지만 사용자 편의를 제공해야 하는 입장이라면 구현해야 할것이다. 아래는 WM_KEYDOWN메시지 하나로 몽땅 처리한 구조이다. 여러가지 방법이 존재하겠지만.. 이렇게도 구현할 수 있음을 보여주는 샘플이므로 참조해보자. 코드 자체가 난해하거나 어려운것이 아니므로, 하나씩 의미를 파악해 보면서 이렇게도 사용할.. 2011. 12. 14. 이전 1 2 3 4 5 6 7 8 ··· 34 다음 반응형