2013/04/30

TextCrawler - 간단하고 편리한 텍스트 파일 변환(바꾸기) 프로그램



OpenCV 64비트용 라이브러리를 만들면서 알게된 프로그램이다. OpenCV가 배포될 때 64비트용 dll과 lib가 배포되지만 32비트용과 64비트용이 이름이 같아 동일 경로에서 사용할 수 없어 이를 구분하기 위해 재 컴파일을 하는데 많은 프로젝트 파일안에 포함되어 있는 이름들을 하나씩 수작업으로 바꾸는 일은 매우 시간이 걸리고 귀찮은 작업이였는데 TextCrawler 를 이용하는 쉽게 해결이 되었다.


프로그램은 간단한 UI로 구성되어 있지만 많은 기능을 포함하고 있다. 파일 또는 폴더를 지정할 수 있고 폴더의 경우 필터링과 예외파일 지정도 가능 하다.


바꾸기는  일반적인 바꾸기 기능과 정규식 그리고 배치 처리도 지원하여 쉽게 바꾸지 작업을 할 수 있다.

 


TextCrawler 포럼

TextCrawler 2.3 Releas

Original Post :
http://neodreamer-dev.tistory.com/702

2013/04/29

VC++ 2008 이후의 프로젝트 메뉴 폰트 크기 변경하기

Visual C++ 2008 이후 정확히 말하면 Feature Pack 이 적용된 SP1 시점부터 인 것 같다.

프로젝트를 생성을 하면 메뉴의 크기가 약간 작게 나온다. 이는 Visual Studio 2008 Feature Pack에 포함된 BCG Soft사의 Control Bar 시스템이 도입이 되었는데 이때문에 기본 폰트 크기가 바뀐 것 같다.



이를 시스템의 기본 폰트로 바꾸기 위해서는 Visual Studio 2008에 추가된 afxGlobalData 를 이용하면 된다.

afxGlobalData 는 AFX_GLOBAL_DATA 구조체로 프로젝트 전반적으로 사용되는 색상이나 브러쉬 커서 등의 리소스를 가지고 있으며 유용한 함수도 포함하고 있다.

LOGFONT logfont = {0};
::SystemParametersInfo( SPI_GETICONTITLELOGFONT, sizeof( LOGFONT ), &logfont, 0 );
afxGlobalData.SetMenuFont( &logfont, TRUE );





아래 이미지에서 위쪽은 프로젝트 처음 생성시의 폰트이고 아래쪽은 시스템 기본 폰트를 적용한 후의 폰트이다. 크기가 살짝 차이가 난다.



&

Original Post : http://neodreamer-dev.tistory.com/701

2013/04/25

Visual C++ 2008, 2010 Samples(2008 Feature Pack)

Visual C++ 2008 Feature Pack 에 포함되어있는 새로운 UI 클래스들을 활용하려 했는데 내용이 상당히 많아 자세한 정보를 찾아 보았다.


MSDN에 문서와 샘플 코드가 공개되어 있다.


Microsoft Visual C++ 2008 SP1 Sample Library

Visual C++ Samples and Related Documentation for Visual Studio 2010&

Original Post : http://neodreamer-dev.tistory.com/700

2013/04/15

멀티 모니터 해상도 확인하기

멀티모니터를 사용하는 경우 각각의 모니터의 해상도와 출력 영역을 확인 하는 방법이다.

EnumDisplayMonitors 함수를 이용하는 것으로 CallBack 함수인 MyEnumDispMonitorProc 에서 각각 모니터의 정보를 처리한다.

void Class::Func()
{
:
vector< CRect > vrcMon;
EnumDisplayMonitors( NULL, NULL, MyEnumDispMonitorProc, (LPARAM)&vrcMon );

for ( int i = 0; i < (int)vrcMon.size(); ++i )
{
TRACE( "Monitor #%d, %dx%d - %dx%d (%dx%d) \n"
, i, vrcMon[i].left, vrcMon[i].top
, vrcMon[i].right, vrcMon[i].bottom
, vrcMon[i].Width(), vrcMon[i].Height() );
}
:
}

BOOL CALLBACK Class::MyEnumDispMonitorProc(HMONITOR hMon
, HDC hDC, LPRECT pRect, LPARAM lParam)
{
vector< CRect >* pVRcMon = (vector< CRect >*)lParam;

MONITORINFOEX mi;
mi.cbSize = sizeof(MONITORINFOEX);
GetMonitorInfo( hMon, &mi );

TRACE(
"Monitor Info (%s)(%s) \n"
" Monitor %dx%d - %dx%d (%dx%d) \n"
" Work %dx%d - %dx%d (%dx%d) \n"
, CStringA(mi.szDevice)
, (mi.dwFlags == MONITORINFOF_PRIMARY)? "Primary": ""
, mi.rcMonitor.left, mi.rcMonitor.top
, mi.rcMonitor.right, mi.rcMonitor.bottom
, abs(mi.rcMonitor.right - mi.rcMonitor.left)
, abs(mi.rcMonitor.bottom - mi.rcMonitor.top)
, mi.rcWork.left, mi.rcWork.top
, mi.rcWork.right, mi.rcWork.bottom
, abs(mi.rcWork.right - mi.rcWork.left)
, abs(mi.rcWork.bottom - mi.rcWork.top)
);

CRect rcMon = CRect( pRect );
pVRcMon->push_back( rcMon );

return TRUE;
}

Output:
Monitor Info (\.\DISPLAY1)(Primary)
Monitor 0x0 - 2560x1440 (2560x1440)
Work 0x0 - 2560x1400 (2560x1400)
Monitor Info (\.\DISPLAY2)()
Monitor 2560x416 - 3840x1440 (1280x1024)
Work 2560x416 - 3840x1440 (1280x1024)
Monitor #0, 0x0 - 2560x1440 (2560x1440)
Monitor #1, 2560x416 - 3840x1440 (1280x1024)




EnumDisplayMonitors function on MSD

Original Post :
http://neodreamer-dev.tistory.com/699

2013/04/07

OpenCV 2.4.5

OpenCV 2.4.5 버전이 올라왔다.


아직 홈페이지에는 정식 공지가 올라오지 않았지만 SourceForge에는 2.4.5 버전이 윈도우즈와 안드로이드를 비롯한 여러 플랫폼을 지원하는 파일이 등록이되었다.

로드맵 상으로 2.4 버전의 마지막 버전이라고 알고 있는데 마지막 일지는 모르겠다.


바뀐점을 찾아 보려 했지만 보이지 않았다. 공지가 올라와야 알 수 있을 것 같다.


OpenCV on SourceForg

Original Post :
http://neodreamer-dev.tistory.com/698

OpenCV 디버깅을 위한 Visual Studio Plugins

OpenCV를 하면서 가장 불편한 것 중 하나는 IplImage 변수 내용을 확인할 수 없어 매번 파일로 저장을 하여 그 내용을 확인했었는데 오늘 우연히 Visual Studio Plugin 을 알게 되었다.


이 Plugin 은 메모리 상태의 OpenCV 변수(cv::Mat, CvMat, IplImage)의 내용을 확인할 수 있다.


아쉬움 점 이라면 이 Plugin 이 지원하는 Visual Studio 의 버전이 Visual Studio 2012 Professional 에 Update 1 이상을 요구한다.


Image Watch: viewing in-memory images in the Visual Studio debugge

Original Post :
http://neodreamer-dev.tistory.com/697

키보드 상태 확인하기


키보드 상태를 확인하는 API함수는 GetAsyncKeyState() 함수와 GetKeyState() 함수가 있다.

두 함수의 차이는 메시지큐를 거치냐의 여부 이다.

GetAsyncKeyState() 함수는 메시지큐를 거치지 않고 지금 키가 눌렸는지 확인 하고 GetKeyState() 함수는 메시지 큐를 거쳐서 키보드의 상태를 확인하는 함수 이다. 키보드 메시지 처리 후 키보드 상태를 확인하고자 할 경우는 GetKeyState() 즉각적인 키보드 상태를 확인하고자 할 경우 GetAsyncKeyState()를 사용하는 것이 좋다.




함수의 결과는 키가 눌려지지 않은 상태일 경우 0x0000을 반환하며 0x8000은 현재 키가 눌려진 상태를 의미하며 0x0001은 이전 호출과 이전 호출 사이에 키가 눌려진 적이 있는지 여부 이다.


GetKeyState on MSDN

GetAsyncKeyState on MSDN <

Original Post : http://neodreamer-dev.tistory.com/696