반응형 C & C++/MFC 컨트롤199 [Edit] 한글입력을 받고싶지 않을때 1.요약 특정 컨트롤에서 영문만 입력 받고자 할때에는 IME의 사용을 중지하면 됩니다. 2.본문 IME 즉, Input Method Editor 라고 해서 현재 우리는 한글을 입력하기 위해서 윈도우에서 제공하는 한글 입력기를 사용하고 있습니다. 과거, 도스 상에서는 도깨비라는 에뮬레이터를 많지도 않은 메모리에 로드해서 사용했었는데, 하여튼 참 편하게 됐습니다. 특정 컨트롤에서 영문만 입력 받기 위해서는 IME 를 사용하지 않도록 설정하면 됩니다. 제공되는 함수로는, ImmAssociateContext() 이며 이 함수를 사용하여 IME 의 사용여부를 설정할 수 있습니다. HIMC ImmAssociateContext( HWND hWnd, HIMC hIMC ); 3.예제 #pragma comment(lib,.. 2011. 3. 27. [Tip] 트레이 아이콘 사라지는 버그 1. 요약 요즘 나오는 프로그램에서는 대부분 TrayIcon을 제공합니다. 단순히 프로그램 리스트(태스크 바)에 나오는 것보다는, TrayIcon이 사용자에게 보다 더 편리한 UI를 제공하기 때문입니다. 그런데, 익스플로어(인터넷 익스플로어가 아닙니다.)의 버그 때문에 과 같이 종종 TrayIcon이 Tray에서 사라지는 경우가 있습니다. 하지만, 몇몇의 프로그램은 사라지지 않고 계속 남아있는 경우도 볼 수 있습니다. 그럼 우리의 프로그램도 익스플로어와는 상관없이 계속 트레이에 있으려면 어떻개 해야할까요? 익스플로어는 자신이 죽었다가 새로 시작되는 경우 현재 보이는 모든 윈도우에게 멧세지를 보내주는데, 우리는 이 메시지를 등록하여 사용함으로써 트레이 아이콘이 사라지는 버그를 막을 수 있습니다. 2. 본문.. 2011. 3. 27. [Tip] 윈도우에 Focus 가지 않게 하기 1.요약 가끔식 특정윈도가 포커스를 가지지 않기를 원할때가 있습니다. 아주 간단한 방법이긴하지만 여기에 소개하겠습니다. 2.본문 윈도가 포커스를 가지면 WM_SETFOCUS 메시지가 발생합니다. 이때 들어오는 값으로 이전에 포커스를 가진 윈도의 핸들이 넘어옵니다. 특정 윈도에 포커스를 가지지 못하게 할려면 WM_SETFOCUS에 넘어오는 이전 포커스를 가진 윈도에 다시 SetFocus()를 하면 됩니다. 3.예제 void CMyWnd::OnSetFocus(CWnd* pOldWnd) { CWnd::OnSetFocus(pOldWnd); // TODO: Add your message handler code here if (pOldWnd->GetSafeHwnd()) pOldWnd->SetFocus(); } 2011. 3. 27. [Tip] 메뉴에 '최근 사용한 파일 목록' 만들기 1.요약 Dialog Based 로 만든 프로그램의 메뉴에 '최근 사용한 파일 목록'을 만들어 봅시다. 2.본문 SDI/MDI 의 경우 Doc/View 구조에 의해서 MFC 가 '최근 사용한 파일'에 대한 리스트를 메뉴에 보여주는 기능을 제공하고 있습니다. 하지만, 이러한 방법은 SDI/MDI 의 경우에만 제공되고 있기 때문에 Dialog Based 프로그램에서는 정상적으로 작동하지 않습니다. 따라서 CMRUList 라는 클래스를 만들어서 그 기능을 구현해 보았습니다. CMRUList 는 아래와 같은 함수들을 제공합니다. // nFileNum 번째 위치한 메뉴의 Path 를 얻습니다. CString GetFilePath(int nFileNum, BOOL *pbEnable = NULL); CString G.. 2011. 3. 27. [Tip] 연결 프로그램 찾기 다이얼로그 띄우기 1.요약 Explorer 에서 파일 아이콘을 더블클릭할 경우 파일의 확장명에 따라 연결되어 있는 프로그램이 동작하게 되어 있다. 하지만 연결되어 있는 프로그램이 없을 경우 "연결 프로그램 찾기" 다이얼로그가 화면에 나타나게 할 수 있습니다. 2.본문 파일 아이콘에 연결된 프로그램이 없을 경우 연결 프로그램을 지정하도록 "연결 프로그램 찾기" 다이얼로그를 프로그램적으로 띄우는 방법은 ShellExecuteEx API 를 Call 할 때 "Openas" 를 파라미터로 사용하면 된다. 우선 ShellExecuteEx를 Call하기 전에 FindExecutable API를 사용하여 파일의 프로그램 연결여부를 우선 알아보도록 한다. 만약 연결된 응용프로그램이 있을경우 SHELLEXECUTEINFO structur.. 2011. 3. 27. [Dialog] 단일문서(SDI),다중문서(MDI),대화 상자 기반(Dialog)의 초기 처리 윈도우가 뜨기 전에 해야할 작업이 있을 때가 있다. 윈도우가 뜨기 시작할 때 호출되는 함수는 단일문서(SDI), 다중문서(MDI)와 같은 함수가 호출되지만 대화 상자 기반(Dialog)의 경우는 다른 함수가 호출된다. //////////////////////////////////////////////////////////////////////////////////////////////// ◆ 단일문서(SDI), 다중문서(MDI) View가 Document에 처음으로 연결된후, View가 처음 뜨기전에 호출 되어짐 C***View파일 void CStartProcessView::OnInitialUpdate() { // : // : // : } OnInitialUpdate()와 디폴트로 선언되지 않으므로 C*.. 2011. 3. 27. 이전 1 ··· 26 27 28 29 30 31 32 ··· 34 다음 반응형