달력

3

« 2024/3 »

  • 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
질문자 : jik0101  링크 : http://cafe.naver.com/winmodev/1339
<질문내용>

.net cf 에서는 System.Drawing 네임스페이스 에서 일반적인 brushes를 지원하지 않더라구요

그래서 Graphics.DrawString를 사용하려고 하니 매개 변수중 brush를 사용해야하는데

brush는 사용되지만 생성자가 없고 brush에 색을 지정하려고 brushes를 사용하려고하니 아예 제공되질 않습니다.

그런데 System.Windows.Media 를 사용하니 brushes가 사용되던데 그걸 사용하니

Graphics.DrawString안에 brush매개 변수랑 타입이 맞지 않아 또 사용이 불가능 합니다...;

 

System.Drawing으로만 Graphics.DrawString를 사용하려면 어떻게 해야하는지 궁금합니다.

<답변내용>

안녕하세요 루나네스 입니다
 .Net CF에서 Graphic 객체에 DrawString 을 사용하시려면 다음과 같습니다

    // Create string to draw.
    String drawString = "Sample Text";
            
    // Create font and brush.
    Font drawFont = new Font("Arial", 16);
    SolidBrush drawBrush = new SolidBrush(Color.Black);
             
    // Create rectangle for drawing.
    float x = 150.0F;
    float y = 150.0F;
    float width = 200.0F;
    float height = 50.0F;
    RectangleF drawRect = new RectangleF(x, y, width, height);
            
    // Draw rectangle to screen.
    Pen blackPen = new Pen(Color.Black);
    e.Graphics.DrawRectangle(blackPen, x, y, width, height);
            
    // Draw string to screen.
    e.Graphics.DrawString(drawString, drawFont, drawBrush, drawRect);

 brush가 아니라 SolidBrush 객체 입니다

 http://msdn.microsoft.com/ko-kr/library/19sb1bw6(VS.80).aspx

 

 작성일 : 2010.02.18

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

MWC2010 (Mobile World Congress)에서 드디어 Windows Phone 7이 공개 되었습니다
그동안 많은 루머가 떠돌았던 Windows Phone 7은 지금까지의 Windows Mobile 6의 UI를 과감하게 포기한
새로운 UX로 사용자에게 다가오게 되었습니다

라이프 인 모션(Life in Motion) 이라는 모토와 캐치 플레이를 내세워 역동적인 삶을 가능케 해 주는 윈도우 폰 이라는
인식을 강하게 비추게 되어 PC와 Web에서 가능했던 것들을 Windows Phone 7에서 그대로 지켜나갈 수 있게 되었습니다

소셜 네트워크 서비스(SNS)의 연동, 사용자의 상태와 경험의 실시간 업데이트 (Facebook or Windows Live),
XBOX LIVE 서비스 이용, PC와 웹 그리고 Windows Phone의 멀티미디어 연동 등
사용자가 쉽고 간편하게 일상생활에서 누리던 경험을 그대로 모바일에서 경험할 수 있게 변화가 되었습니다

A Phone designed to keep your life in motion

위의 동영상에서 마지막 부분에 나오는 문장 입니다.
사용자들이 윈도우 폰을 어떻게 활용하는가를 중점으로 개발이 되었다는 예기 입니다

솔직히 그동안 Windows Mobile 시리즈는 QVGA기준의 디자인을 VGA, WVGA로 그대로 사용했던 실수를 했었습니다
작은 해상도를 기준으로 디자인 되었기 때문에 큰 해상도에서는 사용하기도 불편하고 화면도 작아서
윈도우 폰에는 스타일러스가 필수라고 인식되어 왔습니다
(WM6.5에서 이러한 부분이 많이 개선되었지만, 요즘에서는 그래도 많이 부족한 부분 이었습니다)

  
<왼쪽 부터 PoketPC 2003 / WM5>


<왼쪽 부터 WM6 / WM6.1.4 / WM 6.5  -  QVGA 에뮬레이터>

 

이러한 인식에서 오는 문제는 윈도우 폰은 느리다, 불편하다 라는 문제까지 오게 됩니다
단말기 제조사에서 여러가지 어플리케이션을 기본으로 제공하는데.. 
낮은 완성도로 인해서 수많은 버그와 단말기의 전체적인 퍼포먼스까지 느리게 되는 그러한 문제가 생기게 되었습니다

이러한 결과로 윈도우 폰은 시장성이 없다.. 지는 해다  라는 말까지 나왔습니다
(윈도우 모바일 개발자인 저로써는 참 씁슬하였습니다)

Windows Phone 7 Series가 이러한 논란을 한방에 잠재울 지는 아직은 모릅니다
이번 MWC에서 공개된 데모만 봤을 때는 충분한 가능성을 보여주고 있습니다

뭐.. 물론 앞으로 좀 더 지켜봐야겠지만요 :)

 

아래는 윈도우 폰 7의 실제 동작 동영상을 보시기 바랍니다
스크린 샷으로 찍는것은 Windows Phone 7의 모습을 많이 감추는 느낌이 들어서
직접 보는 것이 좋을 것 같습니다

Get Microsoft Silverlight
:
Posted by Lunaness
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