분류 전체보기 (35) 썸네일형 리스트형 MFC, Popup context menu MFC 기반에서의 context popup menu 띄워보자. XXX.cpp 에서 (오른쪽 버튼이 눌렸을 때라 가정) void XXXXX::OnRButtonDown(UINT nFlags, CPoint point){CMenu menu; // 팝업 메뉴를 생성한다.menu.CreatePopupMenu();menu.AppendMenu(MF_STRING, ID_MENU1, _T("Menu 1"));menu.AppendMenu(MF_STRING, ID_MENU2, _T("Menu 2")); CPointpt = point;ClientToScreen(&pt);menu.TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, pt.x, pt.y, this); menu.DestroyMenu(.. 메모리 누수 (클래스 상속) 디버깅하면서 한참을 해맸던 경험을 쓴다.visual studio로 프로젝트를 만들고 memory leak이 발생되었다는 warning 뜨길래 찾기 시작. #ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#endif 이런 메크로를 소스파일 마다 추가해서 해 봤지 그런데 찾아지는 것도 있지만 대다수 소스파일 이름은 나오지 않았다. _CrtSetReportMode(_CRT_ERROR, _CRTDBG_MODE_DEBUG);_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);_CrtDumpMemoryLeaks();_CrtSetBreakAlloc(13952.. Virtual list control (리스트 아이템 가상화?) https://msdn.microsoft.com/ko-kr/library/ye4z8x58.aspx위 페이지에 잘 설명되어 있다. 뭐 일단 그렇고.. 우선 이게 무엇을 하는 것인지 보자.일단 virtual이라 해서 특별히 하는 것은 없다. 기본적인 list control을 사용하는 방법에 약간의 차이를 둔 것이다. 기본적으로 list item 추가할 때에는 InsertItem 함수 같은 기본 함수들을 이용하는데이 함수를 이용하면 편하게 입력하고 삭제도 할 수 있다. 그런데 문제는 list control 자체적으로 가질 수 있는 item의 양은 한계가 있을 것이고 문제는 추가 및 삭제할 때 Control을 다시 그릴 때에도 많은 부하를 가질 수 있다.그에 반해 virtual list는 자기가 그릴 item .. Loading system icon 실제로는 dll 파일에 icon이 들어있고 해당 dll은 shell32.dll 이다. 아이콘 바꾸려고 할 때 특정 dll, exe를 선택하면 내장되어 있는 icon을 설정할 수가 있는 것 처럼 Win32 프로그래밍 내부에서도 동일하게 dll 파일을 열고 icon을 얻오올 수 있다. HINSTANCE hDll;hDll = LoadLibrary(_T("SHELL32.dll"));HICON hIcon = LoadIcon(hDll, MAKEINTRESOURCE(1));HICON hIconSm = LoadIcon(hDll, MAKEINTRESOURCE(2)); MFC Control Focusing & Arraw Keys 컨트롤을 만들고 방향키를 눌러 특정 동작이 되도록 하고 싶었는데 그게 잘 안되었다.결국 구글링을 했고 방법을 찾았다.https://support.microsoft.com/en-us/kb/104637 골자는 UINT TestCtrl::OnGetDlgCode(){return DLGC_WANTARROWS | DLGC_WANTALLKEYS | DLGC_WANTCHARS;}WM_GETDLGCODE 라는 메시지가 올 때 위와 같이 TestCtrl는 dialog로부터 방향키, 모든키, char 를 받겠다는 의미다.이렇게 수정하면 기본적으로 WM_KEYDOWN, WM_KEYUP 등의 메시지가 상속받은 window로 전달이 된다.우선 이렇게 해서 기본 루틴을 이용할 수 있게 되었고 Focus는 어떻게 하는가. 일반적으로.. QT build static library QT creator로 static library를 만들 때 단순하게 Template 를 app이 아닌 lib로 하면 된다.TEMPLATE = app -> TEMPLATE = lib이와 같이 설정하면 linux의 경우에는 lib뒤에 프로젝트 파일명이 붙는다.예를 들면 abc.pro 라면 libabc.so.1.0.0 이라는 파일이 만들어 진다.물론 여기에 link 파일도 같이 만들어진다.QT에서는 기본적으로 버전 정보를 붙여서 library를 만들게 되어 있고 VERSION = 2.1.1 이런 식으로 버전의 이름을 지정할 수도 있다. 혹 버전 정보를 붙이고 싶지 않다면 아래와 같이 config에 추가하면 된다. CONFIG += unversioned_libname lib Prefix가 기본적으로 붙게 되어 .. Visual Studio : DLL 경로, 환경변수 설정 방법 1. DLL 경로 설정Solution Explorer 에서 프로젝트를 선택하고 오른쪽 버튼 누르면 아래에 Properties 선택.Debugging 옵션에서 Environment 편집윈도우 시스템에서 기본적으로 DLL은 환경 변수 PATH의 경로를 탐색한다.그래서 PATH를 변경해 원하는 디렉토리를 선택한다.EX> PATH=test/dlls;%PATH% 2. 환경변수위와 같다 사실 Environment 은 환경변수를 설정하기 위한 곳이다.PATH도 환경변수의 일종이다.혹 원하는 환경변수를 실행 시에 설정하고 싶다면 임의의 변수와 값을 설정하면 된다.EX>PATH=test/dlls;%PATH%TEST_ENV=1여기서 TEST_ENV 라는 변수와 그 값을 1로 설정한 경우이다. 이와 같이 설정하여 Test할.. FFMPEG : get duration ffmpeg에서 미디어의 재생 시간을 읽는 방법을 소개한다. 거두절미하고 기본 코드는 아래와 같다. AVFormatContext* pFC; int ret; pFC = avformat_alloc_context(); ret = avformat_open_input(&pFC, filename, NULL, NULL); if (ret duration); 자 중요한 건.. 이제부터다. 실제로 open 함수 이후에 정보를 읽을 수 있을 것으로 생각되지만. 몇몇 contents에서는 duration 값을 읽었을 때 0으로 나오는 경우가 있다. 이럴 때는 avformat_find_stream_info() 함수를 호출해야한다. 다시 말하면 .. 이전 1 2 3 4 5 다음