MFC에서 더블버퍼링 사용하기. 이걸 왜 지금까지 안올려놨었지 -.-?;; 일단 제일 중요한건 헤더 파일에 CBitmap m_Bitmap; 를 선언 하는 것. 이 비트맵에 객체를 생성하고 이것저것 해줄 것임. 우선 아래와 같이 Bitmap에 그림을 그려줌. void CDlgXXX::MakeMemBitmap(void) { CClientDC dc(this); //실제 dc CBitmap* pOldBmp; //oldbmp CDC MemDC; //메모리DC m_Bitmap.DeleteObject(); //기존꺼 지워줌 m_Bitmap.CreateCompatibleBitmap(&dc, 500, 200); //새로 만들어줌 MemDC.CreateCompatibleDC(&dc); //memDC도 새로 만들어줌 pOl..
오오 멋지당
GetWindowRect GetClientRect ScreenToClient MoveWindow....등등등... 항상 복잡하다.. 이제 SetWindowPos같은건 잘 안 쓰고 MoveWindow를 잘 쓰니깐 얘를 설명하면 0,0으로 이동 시키면 현재 프로그램의 최 좌측 상단에 달라 붙는 다는 것이다. 그리고 width랑 height까지 바꿔버리니까 주의해야 한다. GetWindowRect를 하면 현재 화면 전체에서의 컨트롤 위치를 가져온다. 이놈을 이제 ScreenToClient 해주면 ('화면 전체'에서 '클라이언트의 좌표')로 바꿔주는 것이다. 즉 MoveWindow를 써줄려면 다음과 같은 순서로 진행해야한다. CWnd* pObject = this->GetDlgItem( IDC_BUTTON1 );..
MFC로 짠 프로그램 아이콘 바꾸기는 참 간단하다. 그냥 프로젝트 솔더의 res경로에 있는 아이콘 파일을 대체시켜 주면 된다. 예를 들어 프로젝트에 사용중인 아이콘 파일 이름이 RoterIconWidget.ico 로 돼있다면, 그냥 쓰고싶은 아이콘 이름을 RoterIconWidget.ico로 바꿔서 저걸로 바꿔주면 된다. 참고로 Dialog에서는 아래와 같은 것을 써주면 Dialog의 아이콘을 바꿀 수 있다. HICON hIcon = LoadIcon(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDI_ICON1) ); this->SetIcon( hIcon, FALSE ); 그런데.. 이렇게 바꾸고.. 리빌드 올을 하고나서 프로그램을 Ctrl+F5로 실행했는데... 바뀌질 않는다..
소스는 아래와 같음. Windows의 Temp 디렉토리를 가져와서 prefixstring을 붙인 새 tmp파일의 주소값을 리턴한다. CString CClassName::GetTempFilePath(LPCTSTR pszPrefixString) { CString strPath; if(GetTempPath(_MAX_PATH,strPath.GetBuffer(_MAX_PATH+1)) != 0) { strPath.ReleaseBuffer(); CString strTempFile; if(GetTempFileName( strPath, pszPrefixString, 0, strTempFile.GetBuffer(_MAX_PATH+1) ) != 0) { strTempFile.ReleaseBuffer(); return str..
DLL프로젝트가 여러개 있다. 예를 들어 A와 B 이렇게 두개가 있다. 둘다 resource.h가 있고, 각자의 rc파일이 있다. 그런데.. B에서 LoadString으로 String Table에 있는 것을 읽어오려했는데.. 오잉..? A에 있는 스트링 테이블 값을 참조한다. 우째 이런일이? 이를 해결하기 위해선 MFC Extension DLL로 DLL을 만든 경우, LoadString이나 LoadBitmap시에 어느 리소스에서 값을 가져오는지를 알아야 한다. DLL과 그를 호출한 EXE가 있을 경우, 리소스 아이디가 중복 되는 경우에는 LoadXXX 함수는 EXE의 리소스에서 값을 읽어오게 된다. http://support.microsoft.com/kb/600771/ko에 따르면 "이것은 MFC에서 r..
그림을 넣고 그 아래에 가로로 스크롤바를 달아서 그림을 좌우로 스크롤 되게 할 경우 적당한 스크롤바의 인포는 다음과 같이 설정한다. int nScrollBarSize = m_nSize - DISPLAY_WIDTH + m_nSize/10; //스크롤바의 크기 때문에 이렇게 조금 빼줘야 한다. nScrollBarSize = nScrollBarSize>0?nScrollBarSize:0; SCROLLINFO si; si.fMask = SIF_ALL; si.nMax = nScrollBarSize; si.nMin = 0; si.nPage = m_nSize/10; si.nTrackPos = 0; si.nPos = 0; m_scrollTime.SetScrollInfo(&si); 여기서 DISPLAY_WIDTH는 그림이..
MFC 클래스 내부에 선언한 static 멤버 변수를 사용하려 하면 어떻게 해야할까? 일단 아무 생각 없이 선언해 놓고 사용을 하면 컴파일러는 링크 에러를 뿌려댄다. 그렇다면 어떻게 해야할까 클래스 헤더에 static int n; 이라는 값을 선언했다면 cpp 상단부에 다음과 같이 해줘야 한다. 변수형 클래스이름::변수이름 = 초기값; 예를 들어 클래스 이름이 Student고 int로 선언된 변수 이름이 TeacherName이면 cpp의 상단에 CString Student::TeacherName = _T(""); 다른 경우 int Student::nGroupNo = 0; 이런식으로 초기값을 주어야 한다. 아 이런걸 보면 참 Java가 쓰기 편한거 같다 -.-;;
- Total
- Today
- Yesterday
- kering
- 프로그래밍
- Quiz
- db
- jni
- java
- android
- C
- 드라이버
- 음악
- Troubleshooting
- API
- jni강좌
- winapi
- 안드로이드
- Visual C++
- Cloud
- C++
- gcc
- source
- Python
- MFC
- 리눅스
- NDK
- algorithm
- driver
- linux
- database
- AWS
- it
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |