본문 바로가기

프로그래밍

비트연산 고려사항 부호비트, 선언 char m_cStr : 4 ; 이렇게하면 4비트로 인식한다. m_cStr = 8을 넣으면 내부에 1 0 0 0 이 되겠지만, 맨앞은 부호비트로 처리되어 음수처리되더라.. 생각하니 학교다닐때 컴구조에서 배웠던 내용이네..ㅎㅎ 부호있는 정수를 다룰때는 char, signed char 부호없는 정수를 다룰때는 unsigned char 더보기
콘솔창 띄우기 AllocConsole, FreeConsole도 있으나.. 포트란 콘솔과 충돌이 되는것같다.. 이 방법이 괜찮은듯하다. 물론 이건 디버깅모드일때만 적용 #ifdef _DEBUG #pragma comment(linker, "/entry:WinMainCRTStartup /subsystem:console") #endif 더보기
mfc 창움직이기 보통 창을 움직이게 하려면 마우스 왼쪽 버튼을 클릭해서 드래그 하기 때문에, WM_LBUTTONDOWN 메시지를 추가하여 메시지를 핸들링 해줍니다. 그리고 아래의 코드를 입력시켜 주면 됩니다. PostMessage( WM_NCLBUTTONDOWN, HTCAPTION, MAKELPARAM( point.x, point.y)); 즉, Non-Client(NC)영역이 클릭되었고, WPARAM으로 넘어온 값인 HTCAPTION인 타이틀바가 클릭되었다고 메시지를 보내서, 타이틀바가 클릭된 것처럼 흉내를 내는 것이다. 아래는 WM_NCLBUTTONDOWN 메시지에 올 수 있는 WPARAM값의 일부이다.(출처 네이버카페) HTTOP : 크기조정 가능한 윈도우의 위쪽 경계 HTBOTTOM : 크기조정 가능한 윈도우의 아.. 더보기
explicit 묵시적으로 타입변환을 원치않을경우에 사용된다./ 더보기
벡터와 벡터간의 각도구하기 1. 차벡터의 단위벡터화 2. 대상 단위벡터... 3. 내적계산에 의한 cos값 가져온다. 리턴값은 라디안 ... 이 소스는 Zup이다. //회전 OuVec3d& vStartPos = ma_RenderPoints[iSize-2]; OuVec3d vRotate = vEndPos - vStartPos; vRotate.Normalize(); #define RADIAN_TO_DEGREE(x) (180.0f * x/3.141592f) float fangle_x(0), fangle_z(0); fangle_x = RADIAN_TO_DEGREE(acos(vRotate.Dot(OuVec3d(1,0,0)))); glRotatef(fangle_x,0,0,1); fangle_z = RADIAN_TO_DEGREE(acos(vR.. 더보기
템플릿 메타프로그래밍 위키사전에 의하면.. 제네릭 프로그래밍(영어: Generic programming)은 데이터 형식에 의존하지 않고, 하나의 값이 여러 다른 데이터 타입들을 가질 수 있는 기술에 중점을 두는 프로그래밍 방식으로, 프로그래밍 언어에 의해 다른 형태로 실장되고 있다. 템플릿 메타프로그래밍(template metaprogramming)은 템플릿을 사용하는 프로그래밍 기법으로, 컴파일러에게 프로그램 코드를 생성하도록 하는 방식이다. 이러한 기법은 컴파일 시점에 많은 것을 결정하도록 하여, 실행 시점의 계산을 줄여준다. 이 기법은 C++ 프로그래밍 언어에서 주로 사용된다. 장점 늘어나는 컴파일 시간과 좀 더 빨라지는 실행 시간 템플릿 코드는 모두 컴파일 시점에 처리되므로 컴파일 시간이 오래 걸릴 수 있다. 반면, .. 더보기
벡터 min, max... double dAziMax(DBL_MIN), dAziMin(DBL_MAX); vector::iterator pos = max_element(m_AziHistogramDatas.begin(), m_AziHistogramDatas.end()); dAziMax = *pos; pos = min_element(m_AziHistogramDatas.begin(), m_AziHistogramDatas.end()); dAziMin = *pos; double dEleMax(DBL_MIN), dEleMin(DBL_MAX); pos = max_element(m_EleHistogramDatas.begin(), m_EleHistogramDatas.end()); dEleMax = *pos; pos = min_element(m_El.. 더보기
GetMessage와 PeekMessage GetMessage와 PeekMessage 두 함수 모두 WinMain()에서 메세지큐로 부터 메세지를 추출하는 함수이다. 하지만 차이점이 존재한다. GetMessage()함수는 메세지큐에 메세지가 없으면 그냥 그대로 반환 값을 반환 하지도 않고 그대로 대기상태로 있다가 메세지가 생기면 해당 메세지를 추출하고 반환 값으로 1을 리턴한다. 물론 메세지가 있을때 항상 1만 리턴하는 건 아니다. WM_QUIT 메세지가 발생했을때는 0을 리턴한다. while(GetMessage(&msg, NULL, 0, 0) //GetMessage()가 반환 값으로 0을 리턴해야 이 while문을 빠져 나갈수 있다. { if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)) { Tr.. 더보기
FORTRAN DLL과 MFC간 연동중에 해결된사항이나 확인이 안된것 !DEC$ ATTRIBUTES DLLEXPORT::서브루틴명 이것을 !MS$ ATTRIBUTES DLLEXPORT::서브루틴명 으로바꾸고, calling convetion을 디폴트 포트란 dll내부에서 못사용하던 mfc라이브러리를 사용할 수 있게 되었다. 더보기
manifest "응용프로그램 구성이 올바르지 않기 때문에 이 응용프로그램을 시작하지 못했습니다" 에 대한 배포의 문제 응용프로그램을 만들면 라이브러리와 종속성이 생기게 된다.(DLL일경우) 이놈과 맞물려있는 dll을 확인하려면 Dependency Walker를 사용(vs2005에 있더라..) 가장 최근에 이것때문에 문제를 겪었던 파일을 예로들면 내 컴퓨터환경에서 돌아가니 당연히 종속되는 DLL들이 다음과 같이 나올것이다. 하지만 내 PC가 아닌 다른 PC일경우 특히 개발환경이 아닌 PC같은경우 분명히 저 4가지의 DLL중 3가지가 없을것이라 생각된다. 1,2번째는 포트란관련 DLL, 3번째는 crt관련 DLL(CRT는 차후알아볼것) 그것도 모르고 vcredist.exe 재배포버전을 겁나게 깔아재껴도 안된다고 계속 고민.. 더보기