달력

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
2010. 2. 17. 14:48

문자 동기화 방법 없을까요? Programing/WinMoDev Q&A2010. 2. 17. 14:48

질문자 : Destiny(shsh07)  링크 : http://cafe.naver.com/winmodev/1314
<질문내용>

이번에 졸업작품을 위해 처음으로 모바일 프로그램을 만들고 있는 대학생입니다.

카드결제시 핸드폰으로 전송되는 문자들을 통합해서

가계부처럼 만들려고 하는데요

윈도우모바일에는 문자를 저장해두는 db가 따로 있어서

카드결제 문자를 동기화 하는 방식으로 할려고 하는데요

문자 동기화 하는 방법이 없을까요?

참고 서적이나 힌트좀  주세요~ ^^

<답변내용>

안녕하세요 루나네스 입니다

옴니아 SMS는 자체적으로 SK-SMS와 같은 통합메시지를 사용하고 있습니다
이 부분에 대한 메시지를 가로채기 하거나, DB 구조를 열어 사용해야 하는데요
이부분은 좀더 찾아봐야겠네요

일반적인 SMS관련 정보는 MSDN에 많이 있습니다
http://msdn.microsoft.com/en-us/library/bb932385.aspx

http://social.msdn.microsoft.com/Forums/en-US/netfxcompact/thread/cf8f98a2-8fbb-4465-aced-e8602c38dded

http://msdn.microsoft.com/en-us/library/aa919102.aspx

 

 작성일 : 2010.02.16

보다 자세한 정보는 윈도우 폰/모바일 개발자 모임에서 만나보실 수 있습니다
:
Posted by Lunaness
질문자 : 와루모노(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
질문자 : 라에(asdsa1011)  링크 : http://cafe.naver.com/winmodev/1221
<질문내용>

현재 이미지버튼을 클릭하면 0.1초 주기로 눌렀는지 판별하기 위해서 타이머를 돌리고 있거든요 ;ㅁ;

그런데 그렇게되면 주 스레드가 다른작업을 할 수가없어서

워커스레드를 하나 만들어서 사용하려고 합니다.

스레드를 사용하려고 하는데 몇번 테스트를 해 보았지만

UI스레드에 접근하는 방법을 모르겠습니다 ㅜㅜ..;

 

그리구.. 또 궁금한게 있는데

소켓통신을 하지않고 웹서비스를 통해 채팅을 구현하려고 하는데

웹서비스에 접속하는시간이 오래 걸리기도 하고 (받아오는데 꽤 걸리더군요 시간이..;;)

어떻ㄱ ㅔ 하면 원활하고 빠른 통신을 할 수 있을 지 알고 싶습니다 ㅡㅜ

 

관련소스/참고자료

private void timer1_Tick(object sender, EventArgs e)  //0.1초에 한번씩 실행.

{

     if (CheckBtnClick())
     {
                this.Invalidate();
     }

}

 

private bool CheckBtnClick()
{
      if (btn_send.Click)       //send버튼이 클릭되면
      {
           btn_send.Click = false;      //그림을 바꿔주기위해서 false로 만듬

           /*@@@@@@@@@@@@*/
           return true;    //클릭후 그림을 다시그리기 위해 리턴
       }

return false;     //아무버튼이 눌려지지 않았을 경우 false리턴
}

<답변내용>

안녕하세요 루나네스 입니다

스레드에서는 Control로 직접 접근이 불가능 합니다
Delegate로 접근을 해야 하는데요
예를 들어서

delegate void MethodInvoker(); 로 하나 만들어 주시고

스레드 에서
private void ThreadExample()
{
    while(true)
    {
          ......
          this.Invoke(new MethodInvoker(CheckBtnClick));
          ......
    }
}

이런식으로 선언한 다음 아래처럼 수정이 가능하겠지요

peivate void CheckBtnClick()
{
      if (btn_send.Click)       //send버튼이 클릭되면
      {
           btn_send.Click = false;      //그림을 바꿔주기위해서 false로 만듬

           /*@@@@@@@@@@@@*/
           return true;    //클릭후 그림을 다시그리기 위해 리턴
       }

       return false;     //아무버튼이 눌려지지 않았을 경우 false리턴
}

원래는 Thread에서 직접 UI Control을 건드리지 못하기 때문에
우회해서 접근하는 방법 입니다

C# Delegate 로 검색하시면 많은 자료들이 있으니 참고하세요

그런데.....
왜 이미지 버튼이 눌렸는지 0.1초 주기로 검사를 하시는지 잘 이해가 안되네요 ^^;

추가내용

사용자 정의 컨트롤(user control)로 이미지 버튼을 만들어 보세요
네이버에 (이미지버튼)으로 검색하시면 잘 나와있습니다

간단하게 말씀드리면
user control로 하나 만들고 거기에 OnPaint에서 이미지를 그려주는 방법 입니다

mouse down, up, move 등 이벤트를 이용하면
평상시, 누르고 있을 때, 눌렀을때 반응을 전부 처리가 가능합니다

이벤트로 처리되기 때문에 주 스레드에 영향을 거의 안받는 편 이지요 ^^

 작성일 : 2010.02.08

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