CLOSE SEARCH
POSTS IN CATEGORY: Windows & Windows Phone

Geometry 객체

Geometry 객체는 Shape 객체와 달리 스스로를 렌더링 할 수 없으며 특정 도형 객체에 대한 기하 데이터만을 가지고 있다. 그렇기 때문에 Path.Data 속성이나 UIElement의 Clip 속성에 사용된다. 실버라이트에서 제공하는 Geometry 객체는 아래와 같다.

  • LineGeometry
  • RectangleGeometry
  • EllipseGeometry
  • PathGeomerty
– LineGeometry

Shape 객체

실버라이트에서는 Shape 객체를 통해 도형을 출력한다. 지원되는 Shape 객체는 총 여섯가지이다.

  • Rectangle
  • Ellipse
  • Line
  • Path
  • Polygon
  • Polyline

각 객체는 다음과 같은 공통 속성을 가진다.

  • Stroke : 외곽선 색상
  • StrokeThickness : 외곽선 두께
  • Fill : 내부 색상

Shape는 UIElement 객체이므로 스스로 렌더링 할 수 있다.(그러나 Geometry 객체는 단순히 2차원 모양 데이터만을 가진다.)

 

– Rectangle

<Rectangle Canvas.Top=”0″ Canvas.Left=”0″ Width=”100″ Height=”100″ Fill=”Cyan” />

<Rectangle Canvas.Top=”0″ Canvas.Left=”0″ Width=”100″ Height=”100″ Fill=”Cyan” Stroke=”Black” StrokeThickness=”5″ />

<Rectangle Canvas.Top=”0″ Canvas.Left=”0″ Width=”100″ Height=”100″ Fill=”Cyan” Stroke=”Black” StrokeThickness=”5″ RadiusX=”20″ RadiusY=”20″/>

MFC에서 Accelerator (단축키) 편집 후 적용이 되지 않을 경우 (MFC Feature Pack Accelerator issue)

원인 : MFC Feature Pack  설계상의 문제


해결책 1.

레지스트리편집기에서 해당 프로그램의 레지스트리를 삭제한 후 재실행하면  적용되지 않던 단축키가 적용된다.


해결책 2.

MFC 프레임워크에서 기본적으로 제공하는 사용자 지정 메뉴에서 키보드 설정을 초기화 한다.


참고 URL : http://connect.microsoft.com/VisualStudio/feedback/details/540924/mfc-feature-pack-accelerator-issue

CString 클래스 사용시 힙 손상 오류가 발생할 경우


CString::GetBuffer() 함수를 통해 CString 객체에 문자열을 할당하고자 할 경우

CString 객체의 버퍼 크기가 복사하려는 문자열 버퍼의 크기보다 작으면 메모리 오류가 발생한다.

이런 경우에는 GetBufferSetLength() 함수를 이용해서

CString 객체의 포인터를 얻어오기 전에 충분한 크기의 버퍼를 확보해야 한다.

LOGFONT.lfHeight <-> int 상호 변환

int IntToLogFontHeight(int nVal)

{
HDC hdc = ::GetDC(::GetDesktopWindow());
int yPixelPerInch = ::GetDeviceCaps(hdc, LOGPIXELSY);
::ReleaseDC(::GetDesktopWindow(), hdc);
int ret = -1 * (nVal * yPixelPerInch / 72);
return ret;
}
int LogFontHeightToInt(int nVal)
{
HDC hdc = ::GetDC(::GetDesktopWindow());
int yPixelPerInch = ::GetDeviceCaps(hdc, LOGPIXELSY);
::ReleaseDC(::GetDesktopWindow(), hdc);
int ret = int(abs(nVal * 72.0 / yPixelPerInch) + 0.5);
return ret;
}


“0xC015000F: 활성화를 해제하고 있는 활성화 컨텍스트는 가장 최근에 활성화한 컨텍스트가 아닙니다.” 오류가 발생할 경우


MFC로 작성한 프로그램에서 위와 같은 오류가 나오는 경우

XXXApp::InitInstance() 함수 내부에 CWinAppEx::InitInstance(); 코드 다음에 아래의 코드를 추가해준다.

 

afxAmbientActCtx = FALSE;

 

그래도 해결이 되지 않는다면 사용중인 DLL 내부에서 NULL 포인터에 접근하는 코드가 없는지 확인해 보아야한다.