요즘 Professional Android2 Application Development 를 보고 있는데
GPS프로그래밍을 하면서 가상 좌표를 안드로이드 에뮬레이터에 넣는것에 막혀 있었다.
책에있는 코드를 휴대폰에 넣으면 잘 동작한다.
해결방법은
1. Setting - Application - Development - Allow mock locations 체크해제를 하면 GPS가 동작 가능 상태가 된다.
2. Location & sequrity - Use GPS satellites 체크되어 있는지 확인하고,
3. Eclips 메뉴 - Window - Open Perspective - DDMS 를 선택하면 나오는 창에서 Emulator control 하단에 Manual Tab 에서 [Send]버튼을 누르면 해당 좌표가 GPS좌표로 설정된다.
* 이때 Manual tab의 항목이 disable 되어 있으면 Devices 창 우측의 STOP 버튼을 눌러준다.
* 인터넷 검색중에 Setting - Date & Time 에서 Automatic 체크해제하고 time zone 을 seoul로 설정하라는 글을 봤는데 안해도 무방했음. but 설정을 하면 시간이 정확하게 나와서 좋음
* 안드로이드 에뮬레이터 : Android 2.2 - API Level 8
* Eclipse IDE for Java Developers : Helios Service Release 2
2011년 4월 19일 화요일
2011년 4월 11일 월요일
MFC에서 GDI+ 사용하기
1. Anti alias 라인을 그리기 위한 GDI+ 를 사용
Step1. stdafx.h 에 선언추가
#include
#pragma comment(lib, "gdiplus")
using namespace Gdiplus;
Step2. 초기화
[ProjectName]App.c 파일의 InitInstance() 함수에 초기화를 추가한다.
GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);
그리고 아래 두 라인을 광역변수로 추가한다.
GdiplusStartupInput gdiplusStartupInput;
ULONG_PTR gdiplusToken;
Step3. 정리
[ProjectName]App.c 파일의 ExitInstance() 함수(없으면 만든다)에 정리코드를 추가한다.
GdiplusShutdown(gdiplusToken);
Step4. 사용
Graphics graphics( pDC->m_hDC );
graphics.SetSmoothingMode( SmoothingModeAntiAlias );
Color c(50,200,255);
Pen p(c, 1.0);
Gdiplus::PointF p1, p2;
p1.X = 0.0;
p1.Y = 0.0;
p2.X = 100.0;
p2.Y = 10.0;
graphics.DrawLine (&p, p1, p2);
2. Pen : 연결된 선의 꺽임 처리
p.SetLineJoin (LineJoinRound);
enum LineJoin
{
LineJoinMiter = 0,
LineJoinBevel = 1,
LineJoinRound = 2,
LineJoinMiterClipped = 3
};
3. Pen : 선의 시작과 끝부분 처리
p.SetStartCap(LineCapRoundAnchor);
p.SetEndCap(LineCapArrowAnchor);
enum LineCap
{
LineCapFlat = 0,
LineCapSquare = 1,
LineCapTriangel = 3,
LineCapNoAnchor = 0x10,
LineCapSquareAnchor = 0x11,
LineCapRoundAnchor = 0x12,
LineCapDiamondAnchor = 0x13,
LineCapArrowAnchor = 0x14,
LineCapCustom = 0xff,
LineCapAnchorMask = 0xf0
}
4. 안티엘러어싱 적용
graphics.SetSmoothingMode(SmoothingModeHighQuality);
enum SmoothingMode
{
//XP이상 사용가능
SmoothingModeInvalid =QualityModeInvalid,
SmoothingModeDefault =QualityModeDefault,
SmoothingModeHighSpeed =QualityModeLow,
SmoothingModeHighQuality =QualityModeHigh,
SmoothingModeNone,
SmoothingModeAntiAlias,
#if(GDIPVER>=0x0110)
//비스타 이상 버전에서만 사용가능..
SmoothingModeAntiAlias8x4 =SmoothingModeAntiAlias,
SmoothingModeAntiAlias8x8
#endif//(GDIPVER>=0x0110)
};
5. 부드러운 선그리기
graphics.DrawCurve(&p, points, 6, 0.5f);
Struct DrawCurve(const Pen* pen, const Pointf* points, INT count, REAL tension);
arg1: Pen클래스 객체의 주소
arg2: Point배열 클래스의 주소
arg3: 두번째로 전달 받은 Point배열의 클래스 객체의 수..
arg4: 곡선을 그릴때 각이 생기지 않도록 끝을 강제로 늘려주는 장력을 명시 한다.
Step1. stdafx.h 에 선언추가
#include
#pragma comment(lib, "gdiplus")
using namespace Gdiplus;
Step2. 초기화
[ProjectName]App.c 파일의 InitInstance() 함수에 초기화를 추가한다.
GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);
그리고 아래 두 라인을 광역변수로 추가한다.
GdiplusStartupInput gdiplusStartupInput;
ULONG_PTR gdiplusToken;
Step3. 정리
[ProjectName]App.c 파일의 ExitInstance() 함수(없으면 만든다)에 정리코드를 추가한다.
GdiplusShutdown(gdiplusToken);
Step4. 사용
Graphics graphics( pDC->m_hDC );
graphics.SetSmoothingMode( SmoothingModeAntiAlias );
Color c(50,200,255);
Pen p(c, 1.0);
Gdiplus::PointF p1, p2;
p1.X = 0.0;
p1.Y = 0.0;
p2.X = 100.0;
p2.Y = 10.0;
graphics.DrawLine (&p, p1, p2);
2. Pen : 연결된 선의 꺽임 처리
p.SetLineJoin (LineJoinRound);
enum LineJoin
{
LineJoinMiter = 0,
LineJoinBevel = 1,
LineJoinRound = 2,
LineJoinMiterClipped = 3
};
3. Pen : 선의 시작과 끝부분 처리
p.SetStartCap(LineCapRoundAnchor);
p.SetEndCap(LineCapArrowAnchor);
enum LineCap
{
LineCapFlat = 0,
LineCapSquare = 1,
LineCapTriangel = 3,
LineCapNoAnchor = 0x10,
LineCapSquareAnchor = 0x11,
LineCapRoundAnchor = 0x12,
LineCapDiamondAnchor = 0x13,
LineCapArrowAnchor = 0x14,
LineCapCustom = 0xff,
LineCapAnchorMask = 0xf0
}
4. 안티엘러어싱 적용
graphics.SetSmoothingMode(SmoothingModeHighQuality);
enum SmoothingMode
{
//XP이상 사용가능
SmoothingModeInvalid =QualityModeInvalid,
SmoothingModeDefault =QualityModeDefault,
SmoothingModeHighSpeed =QualityModeLow,
SmoothingModeHighQuality =QualityModeHigh,
SmoothingModeNone,
SmoothingModeAntiAlias,
#if(GDIPVER>=0x0110)
//비스타 이상 버전에서만 사용가능..
SmoothingModeAntiAlias8x4 =SmoothingModeAntiAlias,
SmoothingModeAntiAlias8x8
#endif//(GDIPVER>=0x0110)
};
5. 부드러운 선그리기
graphics.DrawCurve(&p, points, 6, 0.5f);
Struct DrawCurve(const Pen* pen, const Pointf* points, INT count, REAL tension);
arg1: Pen클래스 객체의 주소
arg2: Point배열 클래스의 주소
arg3: 두번째로 전달 받은 Point배열의 클래스 객체의 수..
arg4: 곡선을 그릴때 각이 생기지 않도록 끝을 강제로 늘려주는 장력을 명시 한다.
2011년 4월 8일 금요일
VC2008 MFC 인쇄관련 버그
Windows7 에서 VC2008 MFC Wizard 로 생성한 project 의 인쇄관련 버그
1. GetStockObject
void CView::OnPrint(CDC* pDC, CPrintInfo* pInfo) { } 함수에서
pDC->SelectObject (GetStockObject(WHITE_BRUSH));
'SelectObject' 실행중 오류발생 -> API를 사용해서 해결했음
::SelectObject (pDC->m_hDC, GetStockObject(WHITE_BRUSH));
2. System menu
인쇄미리보기중 창의 우측 상단에 있는 최소, 최대, 닫기 버튼을 클릭하면 프로그램이 정지함
System menu 를 일시적으로 삭제함으로 회피했음
// 인쇄미리보기 시작시 System menu 를 삭제함
void CFrictionTesterView::OnBeginPrinting(CDC*, CPrintInfo*) {
CMainFrame* mf = (CMainFrame*)AfxGetMainWnd();
LONG style = GetWindowLong(mf->m_hWnd, GWL_STYLE);
style &= ~WS_SYSMENU;
SetWindowLong(mf->m_hWnd, GWL_STYLE, style);
}

// 인쇄미리보기 종료시 System menu 를 복구함
void CFrictionTesterView::OnEndPrinting(CDC*, CPrintInfo*) {
CMainFrame* mf = (CMainFrame*)AfxGetMainWnd();
LONG style = GetWindowLong(mf->m_hWnd, GWL_STYLE);
style |= WS_SYSMENU;
SetWindowLong(mf->m_hWnd, GWL_STYLE, style);
}
1. GetStockObject
void CView::OnPrint(CDC* pDC, CPrintInfo* pInfo) { } 함수에서
pDC->SelectObject (GetStockObject(WHITE_BRUSH));
'SelectObject' 실행중 오류발생 -> API를 사용해서 해결했음
::SelectObject (pDC->m_hDC, GetStockObject(WHITE_BRUSH));
2. System menu
인쇄미리보기중 창의 우측 상단에 있는 최소, 최대, 닫기 버튼을 클릭하면 프로그램이 정지함
System menu 를 일시적으로 삭제함으로 회피했음
// 인쇄미리보기 시작시 System menu 를 삭제함
void CFrictionTesterView::OnBeginPrinting(CDC*, CPrintInfo*) {
CMainFrame* mf = (CMainFrame*)AfxGetMainWnd();
LONG style = GetWindowLong(mf->m_hWnd, GWL_STYLE);
style &= ~WS_SYSMENU;
SetWindowLong(mf->m_hWnd, GWL_STYLE, style);
}

// 인쇄미리보기 종료시 System menu 를 복구함
void CFrictionTesterView::OnEndPrinting(CDC*, CPrintInfo*) {
CMainFrame* mf = (CMainFrame*)AfxGetMainWnd();
LONG style = GetWindowLong(mf->m_hWnd, GWL_STYLE);
style |= WS_SYSMENU;
SetWindowLong(mf->m_hWnd, GWL_STYLE, style);
}
