달력

12

« 2024/12 »

  • 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
질문자 : 와루모노(warumono5001)  링크 : http://cafe.naver.com/winmodev/1225
<질문내용>

WM6.5 에서 Gestures 기능을 사용하여 화면을 구성하고자 하는데,

가로 터치 스크롤링을 하는데 있어서 어려운 점이 있어 질문합니다.

아래 관련소스/참고자료 는 기존의 샘플코드에서 아주약간의 코드 추가를 한 자료입니다.

 

화면구성은 다음과 같습니다.

========================================================================================================

gestureRecognizer1.TagetControl = panel1

physicsEngine1.ExtentControl = panel1

physicsEngine1.ViewportControl = Form1

 

* panel1을 바탕으로 panel2(왼쪽화면), panel3(가운데화면), panel4(오른쪽화면) 를 Add 하여 3개의 화면으로 구성

========================================================================================================

 

중요한 부분은 관련소스에서 파란색으로 표현한 부분입니다.

각 세줄의 코드를 1, 2, 3 으로 지칭하겠습니다.

 

========================================================================================================

1 : physicsEngine1.Velocity = e.Velocity;
2 : physicsEngine1.ItemSize = new Size(this.Width, this.Height);

3 : physicsEngine1.ItemSize = new Size(this.Width, this.Height);

========================================================================================================

 

2만을 삭제하고 디버깅을 하면 panel2, panel3, panel4 화면이 좌우 터치 스크롤 속도에 따라 자유이동합니다.

그리고, 3에 의해서 터치 스크롤 속도(e.Velocity) 가 강하지 않으면 각 panel의 크기에 맞추어 지도록 되어있습니다.

 

문제는 여기서 입니다.

1번을 삭제하고, 2번과 3번만을 추가한 코드에서 왼쪽에서 오른쪽으로 터치 스크롤을 하면 왼쪽으로 화면이동이 정상적으로 됩니다.

하지만 오른쪽에서 왼쪽으로 터치 스크롤을 하면 에러가 발생하지는 않으나 현 화면으로 맞추려 자신의 화면으로 자동 이동되는 현상이 발생합니다.

즉, 현재 화면이 panel3(가운데화면) 인 상태에서 panel4(오른쪽화면)으로 이동은 정상적으로 이루어지나,

panel3(가운데화면) 인 상태에서 panel2(왼쪽화면)으로 이동하고자 하면 터치 스크롤하여 Pan 한 상태가 이동되다가 다시 panel3(가운데화면)으로 자동으로 돌아오는 현상이 발생합니다.

글로서 설명을 하자니 이해가 가지 않을 것이라 생각합니다.

혹시, WM6.5 Gestures 를 사용하시는 개발자 분들께 아래 코드를 참고하여 질문의 요지를 파악해주시면 고맙겠습니다.

 

관련소스/참고자료

 

using System;
using System.Linq;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using Microsoft.WindowsMobile.Gestures;

namespace TouchScrollingTest003
{
    public partial class Form1 : Form
    {
        private Point last;
        private Point offset;

        private Point delta;

        public Form1()
        {
            InitializeComponent();
        }

        private void gestureRecognizer1_Pan(object sender, Microsoft.WindowsMobile.Gestures.GestureEventArgs e)
        {
            if ((e.State & GestureState.Begin) == GestureState.Begin)
            {
                physicsEngine1.Stop();

                last = e.Location;
                offset = panel1.Location.Negate();

                return;
            }

            delta = e.Location.Subtract(last);
            delta.Y = 0;
            offset = offset.Subtract(delta);

            offset.X = offset.X < 0 ? 0 : offset.X;
            offset.X = (offset.X > panel1.Width - this.Width) ? panel1.Width - this.Width : offset.X;
            panel1.Location = offset.Negate();
            last = e.Location;
        }

        private void gestureRecognizer1_Scroll(object sender, GestureScrollEventArgs e)
        {
            physicsEngine1.Stop();
            physicsEngine1.Angle = e.Angle;
            physicsEngine1.Velocity = e.Velocity;
          physicsEngine1.ItemSize = new Size(this.Width, this.Height);

            physicsEngine1.Start();
        }

        private void Form1_Resize(object sender, EventArgs e)
        {
            if (!physicsEngine1.IsAnimating)
            {
                physicsEngine1.ItemSize = new Size(this.Width, this.Height);
            }
        }
    }
}

<추가질문>
physicsEngine 이 ItemSize 에 맞추어 Velocity 와 관계없이 이동합니다.
만약 private void gestureRecognizer1_Scroll(object sender, GestureScrollEventArgs e)
함수에 e.Velocity 값을 할당하게 되면 ItemSize 는 무시한 상태로 이동하게 됩니다.

<답변내용>

안녕하세요 루나네스 입니다
정신줄 살짝 놓았다가 다시 잡고 덧글 달아주신 것 까지 보니
어떤 문제인지 알겠네요 ^^;;;

physicsEngine 에는 ItemSize를 설정해 줘야
physicsEngine이 동작하는 동안 움직이는 단위를 지정해 줄 수 있습니다
와루모노님께서 말씀하신 것처럼
화면을 3개로 나눠 사용하시려는 것 같은데요 (옴2 터치위즈 UI처럼요)

한 화면단위로 이동할 것 이기 때문에

physicsEngine1.ItemSize = new Size(this.Width, this.Height);
Load나 Resize에서 한번만 해주시면 됩니다

그럼 문제가 생기는 Scroll 부분은...

physicsEngine 이 재미 있는 것이 e.Velocity 값이
미리 지정된 ItemSize의 크기보다 크다면 ItemSIze를 무시하고 넘어가버리는 문제가 생깁니다

physicsEngine1.Velocity = e.Velocity;
을 삭제 하셨다 하셨는데

이때 움직임이 발생하는 것은 Pan 이벤트 때문에 움직이는 것이고, Scroll 이벤트에서
physicsEngine의 velocity값이 0이기 때문에 모션 효과는 없습니다 (움직이지 않지요)

그래서
왼쪽에서 오른쪽으로 터치 스크롤을 하면 왼쪽으로 화면이동이 정상적으로 됩니다.

하지만 오른쪽에서 왼쪽으로 터치 스크롤을 하면 에러가 발생하지는 않으나 현 화면으로 맞추려 자신의 화면으로 자동 이동되는 현상이 발생합니다.
라는 문제가 발생된 것 이구요

해결방법은 무엇이냐..

Scroll 이벤트의 Velocity값을 잘 적용해 줘야 하는데

physicsEngine1.Velocity = e.Velocity > this.Width ? this.Width : e.Velocity;
이렇게 넣어 줄 수 도 있겠네요

그런데 이렇게 넣어주면.. 대부분 최대값인 this.Width 값으로 적용되어서
느릿느릿 움직이는 것을 볼 수 있는데요 (손맛이 없어요)

저는 이렇게 해결했습니다
physicsEngine1.Velocity = e.Velocity / this.Width;

위의 두 라인을 넣어서 각각 움직임을 비교해보세요 ^^

 작성일 : 2010.02.09

보다 자세한 정보는 윈도우 폰/모바일 개발자 모임에서 만나보실 수 있습니다
:
Posted by Lunaness

이 문서는 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