달력

5

« 2024/5 »

  • 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

이 문서는 VS2005 / VS2008 공통으로 적용되는 내용 입니다

※ 이 문서는 아래와 같은 내용으로 수정 되었습니다
  - 최초 작성 : 2010년 02월 01일

영문 에뮬레이터에서 한글 출력 설정

 

기본 설치 프로그램

Visual Studio 2005 or 2008 SP1

Windows Mobile 6 Profesional SDK

Windows Mobile 6.5 DTK

※ 기존의 http://counts.tistory.com/92 게시물에 이어지는 내용입니다
   일반적인 사용과 약간 다른 내용이 있다면 위의 링크를 참고해 주시기 바랍니다

 

한글 입출력 설치 프로그램

▶ 영문 에뮬레이터에서 한글 출력용 설치 파일

형아소프트 대표이시고, WinMoDev 카페 매니저 이신 신석현님께서 만드신 한글 출력 한방팩 입니다

기존의 한방팩은 불특정 상황에서 Platform not Supported 에러가 발생된다는 보고가 있었습니다

http://sheon.tistory.com/206

 

▶ MyMits - VGA / WVGA용 모아키2 설치 파일

MyMits에서 어른왕자님께서 만드시고, 맑은하늘소리님께서 수정하신 모아키2 VGA/WVGA 버전 입니다

모아키2를 설치하면 특별한 설정 없이, 한글 입력이 가능합니다

다만, 한글 입력시 천지인 or 모아키로 나오고, 영문 입력은 Harf QWERTY 자판 (제 멋대로 이름 붙였습니다)으로

나오게 되어서 약간의 불편함은 있습니다

http://www.mymits.net/zboard/forum.php?id=lecture&forum_id=touchdiamond&no=2548

 

1. 설치 전 환경설정

[장치 에뮬레이터 관리자]를 통해서 지난번에 설정한 [GT-I8000 KOR WM 6.5 Pro WVGA Emulator]를 선택 후

오른쪽 마우스 클릭 - 팝업 메뉴에서 [연결]을 눌러 실행합니다

image

 

실행된 에뮬레이터에서 [파일(F)]를 눌러 [구성(c)..]을 눌러 [에뮬레이터 속성]을 불러옵니다

image

그림에서처럼 [공유 폴더(A)]를 특정 폴더를 하나 만들어 지정 합니다

여기에 설정된 공유 폴더는 에뮬레이터의 Stroage Card로 인식됩니다

이 강좌에서는 D:\SD Card 라는 폴더를 생성하여 에뮬레이터의 Stroage Card로 사용 됩니다

 

지난번 강좌에서 본 것 처럼 WVGA용 GT-I8000 에뮬레이터는 모니터 화면에 전부 표시되지 않습니다

이것은 스킨을 숨기면 전부 화면을 볼 수 있습니다

[표시] 에서 [비디오(V)]를 선택 후 [확인]버튼을 눌러 속성 변경을 마칩니다

image

 

설정이 완료된 화면 입니다

image

 

 

2. Storage Card에 파일 넣기

에뮬레이터의 File Explorer을 실행하시면 오른쪽 그림처럼 Storage Card가 추가되어 있는것을

확인하실 수 있습니다

왼쪽 그림은 [공유 폴더]가 설정되지 않은 모습 입니다

image  image

 

<1. 설치 전 환경설정> 단계에서 지정한 D:\SD Card 폴더에 <한글 입출력 설치 프로그램>에 있는

링크를 통해 게시물에 게시된 파일을 받아 저장합니다

image

 

에뮬레이터 Storage Card에서 D:\SD Card 와 동일한 내용을 보실 수 있습니다

image

 

 

3. 한글 출력 한방 팩 설치

 

Storage Card에 있는 HyongaHangul.cab 파일을 선택하여 실행 합니다

설치위치는 에뮬레이터에 정상적으로 사용하기 위하여 [Device]에 설치 합니다

image image

설치가 완료되면 하단의 [OK] 버튼 클릭시 자동으로 소프트 리셋 됩니다

설치 완료 후 Today에 한글이 표시되는 것을 확인하실 수 있습니다

image

 

File Explorer을 다시 실행하시면 □로 표시되는 언어가 정상적으로 표시 되는 것을 보실 수 있습니다

image

 

 

4. 한글 입력용 모아키2 설치

image

<3. 한글 출력 한방 팩 설치>에서 처럼 20090217_MyMITs_MoaKey2_WVGA.cab 을 실행하여 설치 합니다

 

마찬가지로 정상적인 동작을 위해 [Device]에 설치 합니다

image image

 

설치 완료 후 상단의 [OK] 버튼을 누르신 다음

안전을 위하여(?) 소프트 리셋을 실행 합니다

image

 

5. 키보드 설정 및 한글 입출력 테스트

에뮬레이터의 Notes를 실행 합니다

image

 

화면 하단에 키보드 버튼 옆 ▲ 화살표를 눌러 [모아키]를 선택 합니다

최초 실행 시 [모아키] 또는 [천지인]을 선택 할 수 있습니다

입맛에 맞게 고르세요

image image

 

image

 

한글 입력 잘 됩니다

단, 정상적으로 한글 입력 키보드 레이아웃이 설치된 것이 아니기 때문에

키보드를 통하여 한글 입력이 불가능 합니다

 

 

6. 설정 저장

위와 같은 설정을 마친 후 다시 에뮬레이터를 실행하면 매번 다시 해줘야 하는 번거로움이 있습니다

하지만, 이 설정을 그대로 저장하여 다음에 다시 불러올 수 있습니다

[파일] - [상태 저장 후 종료] 를 선택하시던지

에뮬레이터의 [X] 버튼을 누르시면 설정을 저장 할 수 있습니다

[상태를 저장하고 있습니다…] 라는 메시지 확인 후 종료가 됩니다

image image

 

이후, [장치 에뮬레이터 관리자]를 통해서  [GT-I8000 KOR WM 6.5 Pro WVGA Emulator]을 실행하시면

아래와 같은 메시지가 나오면서 기존에 설정한 상태가 빠르게 복원 됩니다

image

:
Posted by Lunaness

이 문서는 VS2005 / VS2008 공통으로 적용되는 내용 입니다

※ 이 문서는 아래와 같은 내용으로 수정 되었습니다
  - 최초 작성 : 2010년 01월 25일
  - 1차 추가 수정사항 : 2010/01/28 - 폼 요소(Form Factor) 해상도 수정

Visual Studio 디바이스 에뮬레이터 옴니아2 적용하기

필수 설치 프로그램

Visual Studio 2005 or 2008 SP1

Windows Mobile 6 Profesional SDK

Windows Mobile 6.5 DTK

에뮬레이터 설정용 프로그램

SMI Device Emulator Skins 2.0

설치 방법

1. SMI Device Emulator Skins 2.0 설치

삼성 모바일 이노베이터에서 제공하는 SMI Device Emulator Skins 2.0 을 다운받아야 합니다

상단의 SMI Device Emulator Skins 2.0를 클릭하시면 다운로드로 이동합니다

(다운받으시려면 삼성 모바일 이노베이터에 가입이 되어 있어야 합니다)

화면에 보이는 DeviceSkins_2_0.zip 을 다운받아 압축을 해제 합니다

압축 해제된 폴더의 DeviceSkins_2_0 폴더에 보시면 위의 그림과 같은 폴더들이 있습니다

해외용 기준으로 만들어진 스킨파일이라 국내용 옴니아 모델명은 없습니다 (여기서는 해외용 옴니아2인 GT-I8000으로 예를 들겠습니다)

해당 파일의 폴더를 아래와 같은 경로에 복사해 주십시요

C:\Program Files\Windows Mobile 6 SDK\PocketPC\DeviceemulationV650

C:\Program Files\Windows Mobile 6 SDK\Smartphone\DeviceemulationV650

또는 자신이 관리하는 스킨폴더를 만드셔서 복사해 넣어두셔도 됩니다

(여기서는 C:\Program Files\Windows Mobile 6 SDK\PocketPC\DeviceemulationV650 에 설치합니다)

2. Visual Studio에서 설정

에뮬레이터 설정을 추가/삭제/변경을 하기 위해서는 Visual Studio에서 작업을 해야 합니다

일단 Visual Studio를 실행해 주십시요

상단 메뉴에서 [도구] - [옵션]을 실행하시고 [장치 도구] - [장치]를 선택하시면 아래와 같은 화면이 나타납니다

이곳에서 USA Windows Mobile 6.5 Professional WVGA Emulator를 선택하시고 [다른 이름으로 저장(S)...] 버튼을 누릅니다

적당한 이름을 입력한 뒤 [확인]을 누르시면 복사 됩니다

저는 한글 출력폰트까지 설치하기 위해서 KOR이라는 이름을 넣어 정의했습니다

복사된 [GT-I8000 KOR WM 6.5 Pro WVGA Emulator]를 선택하시고 [속성]버튼을 누르면 아래와 같은 속성창이 나타납니다

이곳에서 [에뮬레이터 옵션(E)...]을 선택합니다

에뮬레이터 속성에서 [표시]탭을 선택하면 아래와 같은 그림이 나오는데 이 때 스킨(S)에 정의되어 있는 경로를

전 단계에서 설치한 GT-I8000_Omnia2.xml 파일을 지정해 주시면 됩니다

이걸로 에뮬레이터 설정은 끝 입니다

3. 폼 요소(Form Factor) 설정

Visual Stuodio에서 프로젝트를 생성하여 애플리케이션을 만들 때 나오는 스킨을 설정하는 것을 폼 요소[Form Factor]이라고 합니다

이 설정도 마찬가지로 [도구]-[옵션]에서 [장치 도구]-[폼 요소] 에서 추가가 가능합니다

우선 기본으로 사용될 [Windows Mobile 6 Professional]을 선택하고 [다른 이름으로 저장(S)...]을 누릅니다

마찬가지로 적당한 이름을 입력 후 [확인]을 눌러 저장합니다

여기서는 [GT-I8000 - WM6 Professional]라 입력하였습니다

복사 된 [GT-I8000 - WM6 Professional]을 선택 후 [속성]을 누르면 아래와 같이 나옵니다

에뮬레이터와 마찬가지로 [스킨(S)]의 경로를 GT-I8000으로 변경하여 GT-I8000_Omnia2.xml을 선택 후 [확인]을 누릅니다

하단에 스킨 기본값의 [스킨 표시(K)]를 체크 해제 하신 후 화면 너비와 높이를 480x800으로 변경한 후

다시 [스킨 표시]를 체크 해 주시고 [확인]을 누르면 저장 됩니다

이것으로 폼 요소 설정도 완료 되었습니다

2010. 01. 28 추가 사항

3-1. 폼 요소 화면 표시 해상도 변경

이건 제 실수 입니다만..

폼 요소의 해상도의 DPI를 수정해 줘야 하는 것을 빼먹었네요

해상도가 240x400 WQVGA급은 96dpi를 사용합니다

480x800 WVGA급은 화면 크기가 두배가 커졌기 때문에 정상적으로 표시하기 위해서는

DPI도 192로 수정해 줘야 정상적으로 표시 됩니다

화면 왼쪽의 해상도가 96dpi로 DPI 수정이 되지 않은 부분 입니다

옴니아2 화면에 비해 상단바가 절반정도 작아 보이는 것을 보실 수 있습니다

오른쪽의 화면은 192dpi로 수정된 폼 요소 입니다

평소에 화면에 보이던 크기로 보이는 것을 볼 수 있습니다

이러한 사항을 수정하기 위해서는 폼요소에서 오른쪽 사진과 같이 가로 해상도, 세로 해상도를 192 인치 당 픽셀수 로 수정해 주신 뒤

Visual Studio를 종료했다 다시 실행하시면 정상적으로 표시 됩니다

4. Visual Studio 에서 사용하기

새 프로젝트를 생성하고 폼 디자인을 불러온 다음 폼 [속성]을 변경합니다

폼 속성에서 [FormFactor]를 3번에서 생성한 [GT-I8000 - WM6 Professional]을 선택 합니다

폼 디자인 화면에 변경된 스킨이 적용되어 있는 것을 보실 수 있습니다

에뮬레이터는 2번에서 생성한   [GT-I8000 KOR WM 6.5 Pro WVGA Emulator] 실행하여도

동일하게 GT-I8000의 에뮬레이터가 보이는 것을 보실 수 있습니다

다만...

480x800 WVGA급 에뮬레이터를 모니터 화면에 한번에 표시하기 위해서는 고해상도의 모니터에서 작업을 하여야 할 것 같습니다

이 부분은 제가 빼먹은 부분이 있으면 고수분들꼐서 알려주시면 수정하겠습니다

:
Posted by Lunaness
요즘 활동을 열심히 하고 있는 개발자 그룹을 소개 드립니다

Windows Phone개발에 관련되어 많은 정보들이 있는 곳 입니다
카페지기님은 옴니아폰을 사용하면서 많이 들어보셨을 "옴니아노"의 개발자 입니다
(사진의 여성분이라는 건 아닙니다 -ㅅ-;)

수많은 정보들과 실력자 분들께서 많은 도움을 주시기 때문에
초보 개발자 분들도 쉽게 접근해서 배우실 수 있습니다

지금 시작하세요!


http://www.WinMoDev.net 
 
:
Posted by Lunaness

이건 좀.. 부크러운 정보이긴 합니다

제가 엄청 삽질하다가 MSDN보고 아...  한거 였으니깐요

다들 아시는 분들도 많으시겠지만..

저처럼 부끄러운일 안당하시도록 제가 총대 매고 적어 올립니다

 

스마트폰개발이 활성화 되면서 무엇보다 중요한 것은 UI입니다

(요즘은 사용자의 경험을 중요시한다고 해서 UX라고 부르기도 한답니다)

그러다보면 가장 쉽게 할 수 있는 것이 바로 이미지로 작업 하는 것 인데요

 

이렇게들 많이 사용하실 것 입니다

Bitmap imgBuf_Title = new Bitmap(480,800);

 

VWGA급 같은 경우 같은 WQVGA에 비해

같은 이미지의 영역에 표현하려면4배의 용량을 갖게 됩니다

이러다보면 무턱대고 Bitmap 객체 잔뜩 생성해서 이미지를 열심히 넣다보면

단말기의 실행메모리는 아직 여유가 있는데 프로그램이 죽어버리는 것을 보실 수 있는데요

 

이건 WinCE 단말기에서 그래픽 입출력을 담당하는 (간단하게 표현한 것 입니다) GWES.exe 프로세스가

20M정도 넘어가면 프로세스 자원 확보를 위해 자체적으로 관련 어플리케이션을 종료시키 때문 입니다

GWES.exe의 역할은 이곳에서 확인하세요 http://blog.naver.com/kri7001?Redirect=Log&logNo=30043684638

이런 상황이 오게 되는 것 이지요...

더 정확하게는 User Application에서 Data Abort에러가 발생하지만  watson에서 그 에러를 GWES에서 처리할 수 있도록 해주기 때문에 GWES.EXE에서 문제가 보이는 것처럼 되는 것 입니다

 

아무래도 장치 드라이버와 입출력 관련 디바이스를 직접적으로 제어하는 것 이다보니

많은 양의 데이터가 누적되어 있는 경우 안전을 위하여 자체적으로 어플리케이션을 종료 시킵니다

사용자가 원치 않는데 종료되는 원인 중 하나 이기도 하구요

 

재미있는것은 예전에 나온 단말기인 Axim X51v에서는 GWES.EXE의 누적이 거의 없는데

옴니아1, 옴니아2에서는 심각하게  누적되는 것이 눈에 보이네요

 

잡설이 좀 길었습니다만.. 결론은 간단합니다

 

Bitmap을 선언하실 때 다음처럼 선언해 주세요

Bitmap imgBuf_Title = new Bitmap(480,800,  PixelFormat.Format16bppRgb565 );

http://msdn.microsoft.com/ko-kr/library/system.drawing.imaging.pixelformat(VS.80).aspx

 

간단하게 32bit에서 16bit로 내려주는 것 만으로도 충분한 효과를 볼 수 있습니다

가장 좋은 것은 최대한 사용을 줄이고, 따로 관리하는 방법이겠지만..

어쩔수 없이 사용해야 한다면 저렇게 낮춰 주는게 명답이겠네요

 

그냥 책에 있는 예제만 보고 만들다보니 저런 간단한 곳에서 실수를 해버리네요..


:
Posted by Lunaness

이번에 옴니아2에서 프로그램 실행 도중 하드웨어 키 입력 시 변경되는 문제 때문에

고민고민하다가 찾아둔 내용이라 백업 겸 작성합니다

 우선 출처는 데브피아 입니다 (http://www.devpia.com/MAEUL/Contents/Detail.aspx?BoardID=7083&MAEULNo=911&no=41648&ref=41520)

하드웨어 키를 입력 받기 위해서 .Net CF에서는 Hardware 컨트롤이 존제합니다만...
옴니아2에서 사용자가 변경할 수 있는 키는 단 한개로
(물론 직접 레지스트리를 수정하거나 해서 하드웨어 키를 지정할 수 는 있지만요)

HardwareButton bt;
bt.HardwareKey = HardwareKeys.ApplicationKey1;

이런식으로 선언하여 KeyDown에서 감지하기에는 통화버튼, 종료버튼, 볼륨조절, 잠금버튼, 카메라 버튼 과 같은 키 입력은 감지를 하지 못합니다

또한 키 입력을 막기 위해서

AllKeys(TRUE);

라는 것을 사용하지만, 이렇게 하면 모든 하드웨어 키 이벤트가 막히는 상황인지라...
찾다보니 API를 이용한 키보드 후킹으로 조건을 분리하여 처리하는 것을 찾았습니다

 

이예찬 (blackmagic2) 

네이티브 메소드를 이용했습니다^^

Sunscape 라는 프로그램에서 발췌(?) 했는데요,,


        public delegate int HookProc(int nCode, IntPtr wParam, IntPtr lParam);

        [DllImport("coredll.dll")]
        public static extern int SetWindowsHookEx(int idHook, HookProc lpfn, IntPtr hInstance, int threadId);

        [DllImport("coredll.dll")]
        public static extern int CallNextHookEx(int idHook, int nCode, IntPtr wParam, IntPtr lParam);

        public struct KBDLLHOOKSTRUCT
        {
            public int vkCode;
            public int scanCode;
            public int flags;
            public int time;
            public IntPtr dwExtraInfo;
        }

 

이 소스를 추가해 주시교요,,


        private readonly NativeMethods.HookProc HookProcedure;
        private readonly int hHook;

이 소스를 선언부에 선언 해 주시구,,

 

Form 클래스의 생성자 메소드에


            HookProcedure = KeyboardHookProc;
            hHook = NativeMethods.SetWindowsHookEx(20, HookProcedure, IntPtr.Zero, 0);

를 추가해 주세요

 


        private static int KeyboardHookProc(int code, IntPtr wParam, IntPtr lParam)
        {
            NativeMethods.KBDLLHOOKSTRUCT hookStruct = (NativeMethods.KBDLLHOOKSTRUCT)Marshal.PtrToStructure(lParam, typeof(NativeMethods.KBDLLHOOKSTRUCT));
            if (code >= 0)
            {
            }
            return 1;
        }

그다음 이 함수를 추가해 주시면 됩니다^^
if문 사이에 특정한 키가 눌리면 이벤트를 발생시키는 구문을 넣으면 될 것 같군요^^;

 

잠기기는 하다만,,, 확실히 완벽한지는 잘 모르겠군요^^

완벽한지는 모르겠다고 하셨지만..  정말 잘 됩니다
KeyboardHookProc에 모든 코드를 처리하지 않고 return 1;로 하였기 때문에 전부 키가 막히는데요
이걸 약간 고치면 하드웨어 키 마다 각각 다른 작업을 처리할 수 있게 변경이 가능합니다

/// 0x72 : call button
/// 0x73 : end button
if (hookStruct.vkCode == 0x72 || hookStruct.vkCode == 0x73)
{
     SystemSettings.ScreenOrientation = ScreenOrientation.Angle0;
}
/// 0x5b : Home Button
else if (hookStruct.vkCode == 0x5b)
{
     SystemSettings.ScreenOrientation = ScreenOrientation.Angle0;
     main_VisibleForm();
}

return 0;

저는 이런식으로 고쳤는데요, 분기점이 많은 것 도 아니라서 그냥 if문으로 분리 했습니다
hookStruct에 있는 vkCode를 참조하시면 입력받는 하드웨어 버튼의 키가 나오네요
일단 옴니아1, 옴니아2에서 정상 동작 합니다
마지막에 return 0를 해준 것은 1로 해주면 통화버튼을 눌렀을 때, 키패드창이 안나타나서 return 0로 변경한 것 입니다

:
Posted by Lunaness