[WinAPI] CreateMutex, 대화상자 중복 실행 방지

오늘은 간단하게 CreateMutex를 사용하여 중복 실행 방지를 알아보도록 하겠습니다.뮤텍스는 공유된 자원에 하나의 쓰레드만 접근할 수 있게 다른 쓰레드의 접근을 막는 방식중 하나입니다.이 방식을 사용하여 보통 중복 실행을 방지하는 기능으로 많이 만듭니다.MFC를 예제로 사용하는 방법을 알아보겠습니다. 프로젝트 생성 후 아래와 같이 “프로젝트명칭”App::IInitInstance()에 코딩해주세요 실행해 보시면 아래와 같이 중복 실행이 방지됩니다.

[WinAPI, Visual C++] DC 프린터에 출력하기, CPrintDialog, StartDoc, StartPage, EndPage, EndDoc

이 글을 보시기 전에 DC 그리기 모르시는 분들은 여기를 먼저 보시기 바랍니다. 이번 글에선 DC로 프린터 출력 하기를 해보겠습니다. 우선 MFC 프로젝트 생성후 버튼 하나 만들어주세요.DC를 프린트 하기전에 우선 출력할 프린터를 선택해야 합니다. CPrintDialog를 사용하면 출력할 프린터를 쉽게 선택할 수 있습니다.CPrintDialog를 사용하는 방법은 아래와 같습니다. 위 코드를 실행해 보면 아래와 같이 프린터를 선택할 수 있습니다. … Read more

[C++] 비트 단위 연산자 – 설명 프로그램

저번 글에서 비트 단위 연산자에 대해서 설명했었습니다.이미지가 아니라 눈으로 보고, 실제로 조작하는 프로그램이 있었으면 좋겠다고 생각해서 만들게 됐네요. 아래 파일을 다운받고 실행 하시면 됩니다. BitwiseTest.exe를 실행 시키면 아래와 같이 실행 됩니다. 저번 글에서 처럼 총 8개의 등이 있고 각각의 등들은 인덱스가 아래와 같이 부여되어있습니다. 원하는 등 아래에 있는 버튼을 클릭하면 아래와 같이, 이미지, bool, byte와 … Read more

[C++] union(공용체) – 비트 필드

오늘은 union, 공용체에 대해 알아보겠습니다.공용체는 구조체와 비슷하지만  공용체 안에 선언된 변수들은 메모리를 공유한다는게 제일 큰 차이가 되겠네요.이것 또한 현재는 많이 사용하지 않지만 과거에 메모리가 부족했을때 많이 사용했습니다.네트워크 통신에서 과부하를 줄이기 위해 패킷을 최대한 줄일 때에도 많이 사용합니다. 사용 방법은 아래와 같습니다. 1Byte를 공용체를 사용하여 비트 단위로 관리하면 선언하는데 작업이 더 걸리지만 사용하는 입장에서는 매우 편하게 사용할 수 있습니다. 위 코드를 이미지화 하면 아래 그림과 같습니다. 실제 예제로 알아보겠습니다사람을 구조체로 선언한다고 합시다.여러가지 신체부위가 있겠지만, 양손(손가락 포함)을 코드로 구현하면 아래와 같습니다. 만약 위와 같이 bool로 선언하면 변수크기가 총 10Byte로 잡히게 됩니다. 이럴때 union으로 표현하면 위 문제를 해결 할 수 있습니다. 공용체는 프로그래머가 무엇을 어떻게 구현해야할 때 최적화 … Read more

[C++] struct(구조체) – 비트 필드

이전 글에서 비트 단위 연산을 통해 비트 데이터를 조작하는 것을 알아봤습니다.사실 비트 단위의 데이터를 조작하는 것은 그렇게 자주 경험할 일이 아닙니다.그냥 이런 코딩 방법도 있구나 알아두기만 하세요 기본적인 선언 방법은 아래와 같습니다. 보통 변수를 사용할 때처럼 사용하지만 비트수를 명시하는게 핵심입니다.구조체를 명시하면 실제 할당된 데이터는 아래와 같습니다. 만약 비트 수를 바이트 단위로 정확하게 하지 않아도 컴파일러에서는 … Read more

[MFC] 컨트롤 탭 순서 변경하기

MFC 프로그램을 만들다 보면 대화 상자의 컨트롤의 탭 순서가 이리저리 움직일 때가 있습니다.아래와 같은 경우가 대표적인 경우입니다. 이렇게 탭 순서가 무작위로 되어있으면 사용자 편의성을 전혀 고려하지 못합니다. 그럴 경우 리소스 뷰에서 Ctrl + D를 누르게 되면 아래와 같이 대화상자에 컨트롤 마다 조그만 번호가 표시됩니다. 이 상태에서 원하는 탭 순서대로 마우스 왼쪽 클릭을 하게 되면 숫자가 변경됩니다. … Read more

[C++] 비트 단위 연산자

1. 들어가기 전에.. 옛날 초창기 땐 컴퓨터는 현재와 많이 달랐습니다. 겉모양 뿐만 아니라 메모리 용량도 적었고, 가격도 비쌌습니다.그래서 과거의 개발자들은 메모리를 조금이라도 덜 사용하는 방법을 고민합니다. 2. 예시 상황 아래 그림과 같이 집에 8개의 등이 있다고 가정합니다. 등이 켜진 것을 1, 꺼진 것을 0으로 표현한다고 합니다. 이것을 코드로 표현한다고 하면 아래와 같이 8개의 bool 로 … Read more

[WinAPI] AlphaBlend, 투명 출력

오늘 알아볼 AlphaBlend 함수는 투명도를 출력하여 출력하는 함수 입니다.함수 원형은 아래와 같습니다. BLENDFUNCTION 구조체는 선언하여 아래와 같이 사용합니다. 예제 코드는 아래와 같습니다.CImage를 이용하여 Temp HDC에 저장하고, AlphaBlend를 이용하여 투명도를 조절하여 HDC에 출력합니다. 이미지를 출력하는 테스트 예제로 제가 좋아하는 가수, 아이유 사진으로 해봤습니다. 일반적인 BitBlt를 사용하면 아래와 같이 출력합니다. 하지만 BLENDFUNCTION에 투명도를 입력해서 AlphaBlend를 사용하면 아래와 … Read more

[WinAPI] 작업표시줄 아이콘 제거, 프로그램 투명하게 하기, GetWindowLong, SetWindowLong, SetLayeredWindowAttributes 활용

안녕하세요, 오늘은 작업표시줄의 아이콘을 제거하고, 프로그램을 투명하게 하는 방법을 알아보겠습니다.예제는 MFC로 하겠습니다. 1. 작업표시줄 아이콘 제거 MFC 프로젝트를 생성해주시고 확인 버튼을 더블 클릭 하신 뒤 아래와 같이 코딩합니다. 같이 코드를 짜서 실행하면 아래와 같이 작동합니다. 보시는 것처럼 좌측 하단에 MFC 아이콘이 작업표시줄에서는 사라집니다.저는 전/후 비교를 위해서 확인 버튼에 구현했지만, OnInitDialog에 하시면 대화상자가 생성되면서 아이콘이 제거 됩니다. 2. … Read more

[WinAPI] GetBitmapBits, SetBitmapBits 사용 예제

오늘은 GetBitmapBits과 SetBitmapBits을 알아보겠습니다. Bitmap에 실제 데이터를 읽어오고 데이터로 Bitmap을 설정하는 함수 입니다. HBITMAP에 대해 잘 모르시는 분들은 HBITMAP에 대한 개념을 익히시고 생성하는 법까지 알고 보시는 것을 추천합니다. 1. GetBitmapBits GetBitmapBits 함수가 성공하면 리턴 값은 버퍼에 복사 된 바이트 수입니다.  GetBitmapBits 함수가 실패하면 리턴 값은 0입니다. 2. SetBitmapBits SetBitmapBits 함수가 성공하면 리턴 값은 비트 맵 비트 설정에 사용 된 바이트 수입니다. SetBitmapBits 함수가 실패하면 리턴 값은 0입니다. … Read more