본문 바로가기

Language/MFC

Window 시작표시줄(작업표시줄) 크기 & 위치 구하기 HWND hWndTrayWnd = ::FindWindow("Shell_TrayWnd",""); 또는 unsing unicode 일때 HWND hWndTrayWnd = ::FindWindow(T_("Shell_TrayWnd"),NULL); CRect rect; if(hWndtrayWnd) { ::GetWindowRect(hWndTrayWnd, &rect); } 출처 : http://legendfinger.com/418 더보기
MFC Window해상도(MainMoniter)구하기 CRect 의 변수로 받아온다. 간단하다. CRect rect; GetDesktopWindow()->GetWindowRect(rect); 포인트로 받아올 수 도있다. int x,y; x = GetSystemMetrics(SM_CXMAXTRACK); y = GetSystemMetrics(SM_CYMAXTRACK); 더보기
ShowWindow API의 인자에 지정된 플래그 상수들 ■ Flag ShowWindow API의 인자에 지정된 플래그 상수 플래그 의 미 SW_HIDE 윈도우를 숨기고 다른 윈도우를 활성 상태로 만든다. SW_MAXIMIZE 윈도우를 최대화 한다. SW_MINIMIZE 윈도우를 최소화하고 다른 윈도우를 활성 상태로 만든다. SW_RESTORE 최대/최소화를 원래 상태로 복원한다. SW_SHOW 윈도우를 나타내고 활성 상태로 만든다. SW_SHOWNA 윈도우를 나타내고 활성 상태로 하지 않는다. SW_SHOWDEFAULT 윈도우를 처음 프로그램 시작할 때 지정된 값으로 변경한다. SW_SHOWNORMAL 윈도우를 나타내고 활성상태로 만든다. 최대화/최소화된 경우에는 원래대로 복원한다. SW_SHOWACTIVE 윈도우를 활성 상태로 하지 않는다는 것을 제외하면 .. 더보기
MFC 창 최소화 시키기(최소화시 작업) 기본적으로 MDI SDI에는 최대/최소 버튼이 존재한다. 음....제어가 확실히 먹어 들어갈듯하다. 기본적으로 가능하니까. 하지만 Dialog Base 기반은 옵션에서 선택하지 않으면 최대최소는 존재하지 않는다. 옵션에서 선택을 하여도 최소화가 않된다. 때문에 최소화도 제어를 설정해줘야하는 불편함이 있다. OnSysCommand() 함수를 찾아보라...기본적으로 Message 함수이다. 만일 프로젝트를 만들때 DialogBase 기반의 main Dialog라면 자동으로 되어있다. 모달이나 모달리스등으로 새로 만든 Dialog면 직접 해줘라.... 여기서 if ((nID & 0xFFF0) == IDM_ABOUTBOX) { CAboutDlg dlgAbout; dlgAbout.DoModal(); } else .. 더보기
SetWindowPos()함수 사용방법 SetWindowPos() 를 사용하면 윈도의 크기와 위치를 변경할 수 있다. 우선....부모 윈도우의 (컨트롤) 크기를 변경할때 SetWindowPos(GetParent()->GetSafeHand(), HWND_TOP, 0,0,100,100,SWP_NOMOVE); 마지막 매개변수를 주목하라... 자신의 컨트롤 크기를 변경할때 this->SetWindowPos(NULL,0,0,100,100,SWP_NIMOVE); 핸들을 가지고 놀 수 있다는 것은 C#계열에서는 힘들지만 MFC 에서는 아주 편하고(?) 쉽다. 사실 핸들을 가지고 노는건 아직 많이 어려워.ㅠㅠ SetWindowPos함수의 원형은 두가지로 오버로딩이 되어있다. 1. BOOL SetWindowPos( HWND hWndlnserAfter, //핸.. 더보기
ListControl 에 CheckBox추가하여 사용하기 ListContorl에 CheckBox를 추가 하기 위해서는 ListControl의 스타일을 정의하는 함수에 옵션을 추가 해주면 된다. m_MainList.SetExtendedStyle(LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT | LVS_EX_CHECKBOXES); //빨간부분.! 이후 CheckBox가 선택된 Index를 모두 알고 싶으면..... ListControl의 이벤트 함수 Click을 정의 한후..... NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR; LVHITTESTINFO oInfo; oInfo.pt = pNMListView->ptAction; m_MainList.HitTest(&oInfo); if(oInfo.flags.. 더보기
MFC 상위 폴더경로로 하위 폴더 검색방법(수정안) 영상처리를 하다가 하위 폴더가 아닌 어떤 폴더 안에 모든 폴더를 자동으로 검색해야 할 때가 있어 이리저리 찾아봤었는데 좀 복잡했다.ㅡ0ㅡ 우선 기본적으로 folder를 Search하는 방법과 짬뽕하여 사용하였다. 몇몇 블로그에서 CFileFind만 있으면 해결된다고 나와있는데 코드가 부족.ㅠ! 디렉토리인지 아닌지는 검색할 수 있다만...문제는 다음 폴더로 넘어가는게 문제이고, 하위 폴더에 내가 원하는 파일이 있는가를 알기가 힘들기 때문에 두 가지를 모두 사용하여야 했다. CFileFind cFileFinder;//CFileFind 객체 선언 BOOL End_Of_Folder = false;//폴더의 끝인가를 검사 m_strSelectPath = m_strSelectPath + "\\*.*"; cFileF.. 더보기
VS2005 Add/Remove operation is impossible,because the code element '(null)' is read only버그 6.0을 피해서 2005로 왔는데 버그가 득실득실거린다.ㅋㅋㅋㅋ MS 이색히......... 멤버함수도 않만들어지고 이벤트 함수는 물론 메시지 함수도 않만들어 진다. 임시 해결법으로는... 프로젝트 폴더 안의 ncb 파일과 suo 파일을 지우면 된다... 이것은 SP1에서 해결 되었다고 한다.. 하지만 그렇지 않은 것 같다... MSDN forum에서 디스커션 되었으며 ---------------------------------------------------------------------- http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=83896&SiteID=1 --------------------------------------------------.. 더보기
MouseWheel강제 호출 듀얼 모니터를 사용할때 프로그램을 두 모니터 모우띄울때가 있었다. 그때 각 클래스단위로 모니터 하나씩 화면에 띄우게 되는데 한쪽에서 휠다운이나 휠 업이 일어나면 함께 움직이게 하는 프로그램 코딩중 마우스 휠때문에 엄청 얘먹은 적이 있었는데 휠 이벤트를 이걸로 해결했다지.....ㅋㅋㅋ ::SendMessage() 로 호출하여 다른 클래스의 화면이나 메시지 이벤트를 보낸다. 이때 API함수로 호출을 해야 보내고자 하는 윈도우 나 컨트롤 등의 핸들을 넣을 인자값이 나온다. 처음에 이거몰라서 쫌 짜증났다.ㅡ.ㅡ 데브피아 화이팅이라고 하지...ㅋㅋㅋ SendMessage()(API라고 가정하자)는 많이 써봤을 것이다. SendMessage는 API탭에 보면 있다.ㅋㅋㅋㅋ(또 쓰기 귀찬아.ㅡㅡ) 마우스 휠 함수를 .. 더보기
SendMessage함수 SendMessage 원형 LRESULT SendMessage(UINT Msg,WPARAM wParam, LPARAM lParam); UINT Msg : 보낼 메시지(WM_어쩌구..) WPARAM wParam : 메시지에 관한 부가적인 정보(주로 보낼 메시지에 대한 세부적인 정보) LPARAM lParam : 메시지에 관한 부가적인 정보(wParam에서 다루는 정보 외...) API함수 원형 LRESULT SendMessage(HWND hWnd, UINT Msg,WPARAM wParam, LPARAM lParam); 사용시에 ::SendMessage(....로 해줘야한다. HWND hWnd : 메시지를 보낼 윈도우 핸들 이하 동일~ 더보기