본문 바로가기

LAB/Project

MFC 작업 관리자 만들기

학교 기말고사로 MFC를 이용해 무었이든 만들라고해서.....


여튼 처음 해보지만 여러 블로그들을 찾아보면서 너무 헤매서 찾고자 하시는 분들에게 유용한 정보가 될거 같습니다.




기본 적인 틀은 다음과 같습니다.




작업 관리자처럼 꾸며보고자 했으나? 사실상 그정도까지 실력은 안되고....  추가적으로 진행이 된다면 수정해서 올리도록 하겠습니다.


기본적인 기능으로는 List Control을 이용해서 실행되고 있는 프로세스 이름, PPID, PID, 경로 를 출력해주고.

툴바에서는 해당 Item을 저장해주고, 갱신하고, 종료하는 기능입니다.

또한 해당 프로세스를 클릭하면 새로운 다이얼로그를 출력하고 해당 프로세스의 정보를 출력해줍니다.




그리고 새로운 다이얼로그에서는 해당 프로세스를 죽이는 기능도 수행합니다.



Step by Step 형식으로 하나씩 알아보도록 하겠습니다.




이 과정은 모두 다이얼로그 기반입니다.

프로젝트 만드실때 대화상자기반으로 만드시면 됩니다.


- 리스트 컨트롤 만들기

다이얼로그에서 리스트 컨트롤은 쉽게 만들 수 있습니다.



오른쪽에 보시면 리소스 뷰 라는 곳을 볼 수 있는데 처음 만드실때는 IDD_AOUTBOX와 IDD_프로세스명_DIALOG가 존재합니다.


IDD_프로세스명_DIALOG를 선택하고 왼쪽의 도구 상자를 클릭하여 list control를 드래그하여 폼에 위치시킵니다.



적당한 크기로 리스트 컨트롤를 설정해주고 오른쪽 아래의 속성창에서 다음과 같이 설정해줍니다.


ID: IDC_LIST_ProcessList

Border: False

View: List


위와 같이 설정하면 사진과 같이 나타나게 됩니다.


그 후 클래스 뷰를 선택하고 CProcessExplorerDlg 를 오른쪽 마우스 클릭 - 추가 - 변수 추가 를 선택합니다.






저는 현재 변수를 만들어 줬기 때문에 위와 같이 나오는데, 처음 만드실 때 컨트롤 변수를 체크해주시고 변수 이름을 m_ProcessList로 한 후 마침을 눌러줍니다.


솔루션 탐색기 - ProcessExplorerDlg.h를 확인해보면

CListCtrl m_ProcessList;가 추가된 것을 확인 할 수 있습니다.




다이얼로그 기반에서는 OnInitDialog() 에서 모든 처리를 해주어야 합니다.

솔루션 탐색기 - ProcessExplorerDlg.cpp에서 List Control에 들어갈 칼럼을 만들어줍니다.


변수 추가에서 만들었던 m_ProcessList를 이용해서 만드는데, 다음과 같이 입력합니다.


m_ProcessList.InsertColumn(0, _T("컬럼이름"), LVCFMT_LEFT, 180);


첫번째 값은 순서를 나타냅니다. 0번부터 시작 합니다.

두번째 값은 해당 컬럼의 이름을 출력해줍니다. 

마지막 값은 해당 컬럼의 크기를 정해줍니다.


그 후 해당 List Control을 띄우기 위해서 스타일을 정해줍니다.

m_ProcessList.ModifyStyle(LVS_TYPEMASK, LVS_REPORT);


위 소스를 넣지 않으면 List Control이 나타나지 않습니다.


즉 저와 같은 방식으로 만들고자 한다면 다음과 같은 소스 코드를 작성합니다.


m_ProcessList.InsertColumn(0, _T("Process Name"), LVCFMT_LEFT, 180);

m_ProcessList.InsertColumn(1, _T("PPID"), LVCFMT_LEFT, 50);

m_ProcessList.InsertColumn(2, _T("PID"), LVCFMT_LEFT, 50);

m_ProcessList.InsertColumn(3, _T("Path"), LVCFMT_LEFT, 600);

m_ProcessList.ModifyStyle(LVS_TYPEMASK, LVS_REPORT);

m_ProcessList.SetExtendedStyle(LVS_EX_DOUBLEBUFFER | LVS_EX_GRIDLINES|LVS_EX_FULLROWSELECT);







- 툴바 만들기


툴바는 프로그램의 버튼과 같습니다.




현재 구현한 기능은 해당 리스트를 저장하고, 갱신하고, 해당 프로그램을 종료를 구현했습니다.

먼저 해당 툴바를 만드는 방법을 알아보도록 하겠습니다.



리소스 뷰 - ProcessExplorer.rc - 오른쪽 마우스 - 리소스 추가 를 선택해줍니다.



새로 만들기를 눌은 후 리소스 뷰 - Toolbar를 확인하면 IDR_TOOLBAR1이 생성된 것을 볼 수 있습니다.




여기서 중요한 부분은 해당 아이콘이 순차적으로 만들어져야 한다는 것입니다. 이부분은 뒤에서 설명하도록 하겠습니다.




ProcessExplorerDlg.h에서 다음과 같이 소스코드를 추가해 줍니다.



그리고 ProcessExplorerDlg.cpp에 다음과 같은 소스코드를 추가해줍니다.



그리고 다음 소스코드를 추가해줍니다.



ON_COMMAND_RANGE(ID_BUTTON_SAVE, ID_BUTTON_EXIT, OnNew)


여기서 혼동하지 말아야 하는 부분은 ID_BUTTON_SAVE와 ID_BUTTON_EXIT 입니다. 이 부분은 아이콘을 만들면 기본적으로 ID_BUTTON임의의숫자 형식으로 만들어지는데 

이것을 수정한 것입니다.


Resource.h에서 찾아보면 다음과 같이 나타납니다.



위 사진처럼 값이 순차적으로 되어있습니다. 위에서 이유를 말해준다고 했는데 바로 이 이유가 ON_COMMAND_RANGE에서 전부다 설정해주기 위함입니다.

첫번째 SAVE 부터 EXIT까지를 말합니다.

그리고 OnNew 함수에서 해당 툴바 기능을 수행하는 것 입니다.



그리고 ProcessExplorerDlg.cpp에 다음 함수를 추가해줍니다.



그리고 OnNew에서 기능을 사용해야 하기 때문에 if문을 이용해 사용합니다.



해당 버튼을 눌으면 Resource.h에서 정의된 값이 넘어가게 되는데 nID의 값이 해당 버튼이면 기능을 수행하도록 합니다.


컴파일시 에러가 발생한다면 ProcessExplorerDlg.h에 afx_msg void OnNew(UINT nID);를 추가합니다. OnDestroy()도 마찬가지입니다.




- 상태바 만들기

상태바도 위의 그림처럼 CStatusBarCtrl m_StatusBar;를 선언해줍니다.



strPartDim 배열이 있는데 각 값은 상태바의 크기를 나타냅니다.





===========

여기까지 폼의 형태를 구현했습니다. 각각 기능을 넣는 부분은 프로그래머마다 다를 테니 추가적으로 구현해 보시길 바랍니다.

'LAB > Project' 카테고리의 다른 글

Active X Bug hunting  (0) 2016.09.21