[MFC] 종료 시 자신을 삭제하는 프로그램을 만드는 방법

기획팀에서 1회만 실행되는(종료되면 삭제되는) 프로그램을 만들어 달란 요청이 간간히 들어옵니다.그때마다 어떻게 했더라 매일 검색하고 찾는 나 자신을 보면서 기록합니다. 이번 글에서는 프로그램 종료 시 자기 자신을 삭제하는 프로그램을 만드는 방법에 대해 알아보겠습니다.파일을 삭제하는 API 함수는 있으나, 윈도우에서는 실행 중인 프로그램(자기 자신)의 .exe파일을 삭제 할 수 없으므로,.exe 삭제를 batch 파일에서 해줘야 합니다. 아래는 MFCApplication1.exe에서 batch 파일을 … Read more

[MFC] Grid Control 사용하기

회사 업무로 MFC에 Grid Control을 조사하는 일이 주어져서 정리차 글을 씁니다. MFC에는 Grid Control이 없습니다. 해서 여기저기 찾아보니 아래 링크에 적당한 무료 라이브러리가 있습니다.링크: MFC Grid Control 적당히 잘 사용하면 아래와 같은 그리드를 만들 수 있습니다. 개발 환경은 Visual 2019인데 몇 가지 이슈사항이 있어 위 링크에서 다운받아도 바로 사용할 수가 없습니다.그래서 일부 수정을 해줘야하는데, 글로쓰면 … Read more

[MFC] 툴바 붙이기 – CToolBarCtrl

회사에서 뷰 화면에 메뉴를 ‘이쁘게’ 만들어 달라는 요구사항이 들어왔습니다. MFC 화면에 이쁘게라니.. 요구 사항이니 CToolBarCtrl 사용하여 아래와 같은 화면을 만들어 보겠습니다. 메시지 정의, 멤버 변수&함수 선언 먼저 뷰나 대화상자를 생성한 뒤 헤더파일에 아래와 같이 메시지들을 정의합니다. 멤버 변수도 선언해줍니다. 이 변수들은 생성자와 소멸자에 아래와 같이 코딩해주세요 각 동작에 대한 멤버 함수들도 선언해줍니다. 툴바 생성 우선 툴바를 생성해보겠습니다. CreateToolBar를 아래와 같이 정의해주고, … Read more

[MFC] CListCtrl SetItemData, GetItemData – 아이템에 데이터 저장하기

이번 글에서는 리스트 컨트롤의 SetItemData와 GetITemData에 대해 알아보겠습니다.위 함수는, 리스트 컨트롤의 아이템에 데이터를 설정하거나 가져오는 함수 입니다.예를들어 설명하겠습니다. 아래와 같이 학생 정보를 표시하는 클래스가 정의 되어 있다고 봅시다. 학생에 대한 정보를 아래와 같이 리스트 컨트롤에 표현할 수 있습니다. 이 경우가 제일 일반적인 리스트 컨트롤의 표시 방법입니다.만약에 개인정보 보안이 강화되어 이름과 핸드폰번호를 표시하지 않아야 한다면 어떻게 해야 할까요?아래 코드와 같이 “****”로 암호화 하여 … Read more

[MFC] CEdit, 패스워드 입력 만들기 – SetPasswordChar

사용자에게 문자열을 입력 받을 때 Edit 컨트롤은 텍스트를 표시합니다.하지만 비밀번호 입력처럼 사용자에게 표시하지 말아야 할 경우도 있습니다. 이 경우 아래와 같이 입력되면 안됩니다. 이 경우 CEdit의 SetPasswordChar와 GetPasswordChar 함수를 사용하면 문자열을 안보이게 할 수 있습니다.패스워드 모드로 변경하려면 CEdit 리소스에 암호 속성을 TRUE로 변경합니다. 이 경우 문자열 입력 시 패스워드 처리를 합니다. 패스워드 모드를 해제하고 싶으면 … Read more

[MFC] Progress Control 사용법

이번 글에서는 Progress Control 사용법에 대해 알아보겠습니다.Progress Control은 아래와 같이 사용자에게 진행률을 표시할 때 매우 직관적으로 보여주는 컨트롤입니다. MFC 프로젝트 생성후 도구상자에서 Progress Control을 추가해줍니다. Progress Control을 사용하기 전에 범위를 지정해줘야합니다. 해당 함수는 SetRange 입니다. 범위 지정 값은 0 ~ 65,535까지 할 수 있습니다. Progress Control Bar의 위치를 변경하려면 SetPos를 사용하시면 됩니다. Bar의 현재 위치를 알기위해서는 … Read more

[MFC] WOL(wake on lan) 원격으로 컴퓨터 전원 켜기 구현해보기

WOL(wake on lan)은 컴퓨터가 특정 네트워크 데이터 패킷을 받으면 부팅이 되는 기능입니다.그 특정 데이터 패킷을 매직 패킷이라고 하고, 컴퓨터는 윈도우를 종료하더라도 대기 전력을 사용하여 매직 패킷을 감지합니다.매직 패킷에는 맥 주소가 일정한 규칙으로 입력되어 있는데 컴퓨터에서는 자신의 맥 주소를 비교하여, 같으면 부팅합니다.매직 패킷의 첫 6 Bytes는 0xFF FF FF FF FF FF로 입력 되어 있고, 부팅을 하려는 … Read more

[MFC] 대화상자 ClassName 변경

이번 글에서는 MFC 대화상자 ClassName을 변경하는 방법을 알아보겠습니다.Win32프로그래밍에서는 생성할때 ClassName을 설정해줘서 쉬운데, MFC는 손을 여기저기에 대야합니다. 우선 MFC 프로젝트 생성 해주신 뒤, 아래와 같이 리소스뷰에서 .rc를 클릭하면 우측에 RC노드라 하여 속성이 나타납니다. 여기서 MFC Mode를 False로 변경하셔야합니다. 그 다음으로 대화상자 속성에서 Class Name을 원하는 이름으로 변경해줍니다. 그리고 난후 대화상자 클래스의 생성자에 아래와 같이 코딩합니다. 실행해서 Spy++로 확인해봅니다. 이렇게 ClassName을 지정해서 … Read more

[MFC] DoModal, Modeless 생성 및 차이

DoModal 부모 대화상자가 자식 대화상자를 호출 하고에 자식 대화상자의 작업이 종료될 때 까지 대기합니다.자식 대화상자가 종료되지 않으면 부모 대화상자에 포커스도 설정되지 않습니다.자식 대화상자가 종료되어야 다음 작업을 수행합니다. Modeless 자식 대화상자의 호출과 관련없이 다음 작업을 수행합니다.자식 대화상자를 여러개 호출 가능하며, 프로그래머가 해제도 해야합니다. 우선 프로젝트 생성을 통해 DoModal과 Modeless를 만들어 보도록 하겠습니다.MFC 프로젝트 생성 후(부모창 생성), 추가 -> 클래스를 눌러 MFC … Read more

[MFC] 단축키 추가 – PreTranslateMessage, Accelerator

오늘은 Accelerator을 사용하여 단축키를 추가하는 방법을 알아보겠습니다. 윈도우 응용프로그램은 PreTranslateMessage에서 키 입력을 포함한 여러 가지 메시지들을 볼 수 있습니다.그 메시지들 중에 키 입력하는 것을 해볼텐데, Accelerator를 사용하지 않으면 매우 복잡해지니 Accelerator을 사용해서 개발해보도록 하겠습니다. MFC프로젝트를 생성하신 후 아래와 같이 Accelerator를 리소스에 추가합니다. 그러면 리소스 뷰에 아래와 같이 추가 됩니다. 여기에 ID, 보조키, 키를 아래와 같이 … Read more