본문 바로가기

Developement/C/C++

(71)
개발 능력의 저능화를 이끄는 대한민국 언젠가 부터 Android 의 영향 덕분인지 일반 PC (노트북 포함) 의 Linux kernel 이 3.x 를 넘어섰습니다. 회사에서는 특정 컴파일러의 dependency 때문에 kernel 을 바꾸질 못하고 있는데 한참이나 후진 Centrino (Dothern) CPU 를 쓰는 노트북에서 요즘 가장 인기 좋은 Linux Mint 를 쓰게 된 것이 사실 좀 뭔가 아이러니 한 느낌이 듭니다. Linux kernel 역사에 2.3, 2.4 와 2.6 은 천지개벽 수준의 발전 이었는데 3.x 를 넘어서는 그 차이를 잘 모르게 된것 또한 시대의 흐름이 보이지 않게 된듯 한 착각이 들기도 합니다. 처음 대학에 입학하던 1996년을 되돌아 보면 그때 부터 이 좁은 대한민국이란 나라에서는 뭔가 항상 특정 조건대로 ..
Porcess ID 로 해당 윈도우의 HWND 를 얻고 BMP 로 저장. 윈도우 프로그래밍을 하다보면 가끔 다른 윈도우의 화면을 갈무리 해야 하는 경우가 생깁니다. (Capture 처럼) 이럴때 아래의 코드 중 HWND GetHandleFromPID(DWORD pid); 함수를 사용하면 간단히 해당 프로그램의 HWND 를 얻을 수 있습니다. #include #include "winproc.h" typedef struct _ProcessCallbackData { DWORD m_pid; HWND m_hwnd; } ProcessCallbackData; BOOL CALLBACK EnumProc(HWND hwnd, LPARAM lParam) { DWORD pid = 0; ProcessCallbackData *pcbd = (ProcessCallbackData *)lParam; if ( ..
FLTK 1.3.x 를 위한 smooth image scaler: fl_smimg FLTK 1.3.x 버젼을 쓰면서 부족한 부분이 있다면 바로 Fl_Image 의 copy() 함수를 통한 scale 기능이라 하겠습니다. 실제 내부에서 이 scale 엔진은 GraphicDriver의 resize 를 호출 하는데 이 부분은 실제 nearest resize 가 수행 되므로 뭔가 부드럽게 연산이 처리된 형태의 이미지를 얻을수가 없게 됩니다. 이를 해결하기 위해 만든 것이 fl_smimg 이며, 이 소슨는 FreeImage Library 3 의 resize 부분을 추출 해서 FLTK 에 맞게 변경 하였으며, 그 적용은 아래 처럼 됩니다. 이미지는 인터넷에 도는 것을 임의로 사용하였는 상태 입니다. (우주선 이미지는 Mass Effect 의 Normandy 호 입니다 ) 먼저 Fl_Window ..
MCU 를 위한 고정 소수점 간단 연산기 intfloat 이 소스는 100% free 이며 알아서 바꿔 쓰던지, 기능을 개선 하던지 마음대로 인 ALU 로 수행 되는 간단한 고정 소수점 처리기 입니다. 수행 할 수 있는 것은 고정소수점을 정수로 더하고, 빼고, 나누고, 곱하고 입니다. 정확히는 각도 계산을 위해 만들어진 것인지라 고정 소수점을 고정 소수점 자체로 나누는 기능은 없지만 어느정도 쓸모 있어 보입니다. 많은 버그를 내장하고 있을지 모르므로 가져다 쓰시는 분이 어느정도 검증 절차 밟아 쓰시는 것은 꼭 필수 입니다. 아래 파일의 압축을 풀면 intfloat.h 와 c 파일이 있으며, 왠만한 MCU 용 compiler 에서는 문제 없이 컴파일 됩니다.test.c 는 함수 확인용 이며, M-Sys 나 gcc(MinGW) 를 기본으로 시스템으로 쓰시는 분들에..
Windows 에서 HDD 의 제조 번호와 Volume serial 을 알아 오는 소스 ( MinGW 호환 ) PC 내에서 고유한 ID 정보를 가져 오는 방법중 하나를 들라면 보통 LAN 카드의 MAC 주소나 HDD 의 제조사 모델 정보와 고유 제조번호를 선택 할 수 있습니다. LAN 카드나 HDD 는 교체가 쉽게 가능하나, OS 를 설치 해야 하는 조건을 생각하면 오히려 HDD 가 좀 더 unique 한 정보를 만들수 있어 보이길래 만든 유틸리티 소스 입니다. MinGW 에서도 빌드 될수 있도록 만든 것이라 NTDDDISK.H 가 없어도 되도록 만들었습니다만, 조건이 컴파일시 (또는 프로젝트 매니저에) -DNO_NTDDDISK_H 를 지정해야 합니다. 해당 소스는 완전 공개이며, Code::Blocks 프로젝트로 만들어진 예제까지 포함 입니다. 경우에 따라서는 VisualStudio 에서 수정해서 쓰시는데 지장..
FLTK 연재. 지금 부터 소개하는 FLTK 는 1998 년 부터 시작되어 온 GPL-V2 기반의 라이센스를 가진 GUI 라이브러리 입니다.각 OS 마다 구비되어 있는 GCC 를 이용해서 build 할수 있음은 물론, Windows 에서는 MSVC 를 통해서 개발을 이어 나갈 수 있기도 합니다. 대표 싸이트 : http://www.fltk.org/index.php FLTK 의 경우는 C++ 의 상속 개념을 통해 여러 종류의 Fl_Widget 이라 불리는 Component 를 유기적으로 만들 수 있으며, 각 platform마다 빌드시, 거의 모든 동작환경이나 형태가 동일한 GUI 를 만들수 있는 좋은 라이브러리 입니다. 특히 OpenGL 을 일부 사용하는 GUI 에서 거의 완벽한 대부분의 component 들을 사용할 수..
Windows API, 윈도우 에서 Drag Drop 으로 파일 목록 받기. 간단히 Windows 에서 파일을 Drag&Drop 으로 받는 방법들을 쓰는 프로그램들이 더러 있습니다. 이를 Windows API 로만 처리 하려면 다음과 같은 코드가 필요 합니다. 먼저, DragAcceptFiles() API 로 이벤트를 받을 Windows Handle 을 등록 합니다. DragAcceptFiles( hWindow, TRUE ); 이는 최초 WM_CREATE 부분에서 처리하는 방법을 써도 되나, 부분적으로 해당 이벤트를 받지 않고 싶을때 FALSE 대입으로 처리 할 수도 있습니다. 해당 이벤트는 WinMain() 에서 WM_DROPFILES 로 넘어 오게 됩니다. 이때 취해야 하는 인자는 wParam 으로 다음과 같이 처리 할 수 있습니다. BOOL CALLBACK DialogPro..
FLTK 1.3.x 용 Fl_TransBox component 이 component 는 투명한 Dimming 처리된 배경을 가진 Overlay 화면을 만들기 위해 만든 custom component class source code 로서, Fl_Box 를 상속받아 만들었습니다. 사용은 간단 합니다. 일반 Window 또는 Group 등 위에 이 Fl_TransBox 로 만든 component 를 생성 후, invisible 처리 해 놓고. 만들어진 component 를 보이도록 처리하면 되는데, 이때 Fl_Group 으로 묶어서 처리 하면 좀 더 효과적인 visual 을 만들수 있게 됩니다. 투명도는 set_alpha( unsgined char a ); 로 지정할 수 있으며, 0 부터 255 사이의 값으로 조절 됩니다. param 으로 넘어 가는 값이 0 이면 투명,..