반응형

http://www.microsoft.com/visualstudio/en-us/products/2010-editions/windows-phone-developer-tools

현재 한글 지원하고 있으며(페이지는 한글 지원이 안됩니다)
우측에서 한국어로 선택하고 다운로드 하시면됩니다.

설치시 이전 설치된 버전과 맞지 않은 언어권역 설치본은 다 삭제해달라고 인스톨러에서 뜹니다.

예전보다(현재 vs.net 2010 ultimate 인스톨러보다도) 잘 구성되어있네요 ~_~
반응형
반응형

http://create.msdn.com/ko-KR

 

구지 다른 말이 필요 없군요.

 

기기도 나오지 않았는데..

 

얼마 전 드림스파크로 개발자 등록 장려를 하더니

 

APPHUB에 한국이 드디어 나왔군요!!

반응형
반응형

Windows Phone 7 망고 발표와 함께

Windows Phone 7 SDK 7.1 Beta2 출시가 되었습니다.

망고 관련 기사나 다른 블로그 포스팅을 보신 분들은 아시다시피

드디어 한글을 지원한다고 하죠.

하지만 아직 App Hub 멤버쉽 등록에는 대한민국이 국가로 추가되어 있지 않습니다.

아쉬우나 따나…

그래도 할 사람은 하는 거니 해야죠! ㅎㅎㅎ



많은 시간 할애 해서 설치 과정 중에 있습니다.

두 가지 사항을 알려드리겠습니다.

1. 권장사양(?!)

Windows Phone SDK 는 명칭이 Windows Phone Development Kit(WPDK)로 명칭이 변경 되는 것 같습니다.(설치 프로그램엔 SDK라고 뜨는군요, 아마 WPDK안에 SDK가 포함되는 형식이지 싶습니다, 제가 잘 못 해석 했을 수도 있구요)

현재 버전의 권장사양은 Microsoft Visual Studio [*] Edition SP1 적용 이상, Windows 64bit OS(Vista, 7) 최신패치 적용 입니다.

2. 이전에 설치된 Windows Phone SDK(관련 툴) 삭제

삭제가 되지 않으면 설치가 되지 않습니다.

반응형
반응형

안녕하세요

또 오랜만에 포스팅을 하네요.


저번 포스트에도 이야기 했듯이 오늘부터

http://charlespetzold.com/phone/

의 pdf의 자료 중 제가 필요하다 생각되는 부분들을 부분부분 포스팅 해볼까 합니다.


물론 전부다 포스팅 할 필요는 없어 보입니다.

저 책의 코딩 방식 마저 하드코딩 위주이기 때문에

툴을 사용하는 사람들을 위한 배려가 조금 결여되어있는 것은 사실입니다.

툴만 사용해서도 가능하다 라는 게 저 책의 내용과 이 포스팅 과의 차이가 되겠습니다.


오늘 포스팅 할 것은

Screen Orientataion

입니다.


한글로 단어를 명확하게 찾기 뭣하군요. 단어 그대로 풀어보자면 “스크린이 놓인 상태”를 이야기 합니다.

눈치 빠르시니 다들 무엇을 이야기 하는지 아셨으리라 봅니다.

윈도우즈 폰 7 을 사용할 때 옆으로 뉘였을 때 그리고 다시 새웠을, 다시 뉘였을 때 등

상태를 제어 하는 방법에 대한 포스팅이 되겠습니다.



자 그럼 하던 대로 따라 해 봅시다.

저는 이렇게 프로젝트를 만듭니다.




디버그로 한번 살펴 보도록 합시다. 요로케~




이 상태가 대게 디폴트 화면입니다. 세로 화면을 Portrait 라고 합니다.

인쇄 쪽 영문 설정 페이지를 보시면 이 단어를 볼 수 있습니다.




아래의 상태인 가로 화면을 Landscape 라고 합니다.




Portrait에서 Landscape로 바꾸었으나

현재 페이지는 페이지의 꼭대기가 기기의 위 끝으로 하는 구성으로 누워 버렸습니다.

이유는 단순합니다. 프로그램의 기본 설정의 Orientation이 Portrait 이기 때문이죠.



MainPage.xaml 파일에 관련 설정이 아래와 같이 보입니다.




SupportedOrentations
가 현재 프로그램이 지원하는 Orientation 값 이며

Orientation 이 현재의 Orientation을 나타내는 값 입니다. 따라서 따로 코딩 하지 않으면 Portrait가 디폴트네요.



이제 이것을 Portrait, Landscape 둘 다 지원하게 설정하겠습니다.




보시다시피 아주 쉽죠. PortraitOrLandscape 값이 우리가 원하는 그 값입니다.

이 설정을 하면 페이지는 해당 모드를 인지하고 항상 위에서 아래로 출력이 됩니다.

동작하는 것은 디버그(F5)로 확인 해 보세요.




예제프로그램으로 Orientation 값을 가져오는 법과 그 데이터를 알아보도록 하겠습니다.
하드코딩이 아닌 디자이너를 통한 방법입니다.



디자이너를 잘 보시면 아래와 같은 아이콘이 보입니다.

이 아이콘이 현재 어플리케이션을 가리키고 있습니다.

마우스 우측버튼을 눌러 Properties를 선택 합시다.




Properties 탭 옆에 Events 탭(번개 아이콘)을 누르면 아래와 같은 화면을 볼 수 있습니다.

PhoneApplicatio… <no name>

이라 되어있습니다. 줄임 말은 늘려도 안보이죠?

저 녀석이 PhoneApplicationPage 입니다.

어떻게 아냐구요?  일단 따라가 봅시다. 그럼 알 밖에 없는 값을 보여드리죠.




빨간 화살표가
Loaded 즉, 해당 어플리케이션이 로딩되었을 때 발생하는 이벤트가 되겠습니다.

파란 화살표가 OrientationChanged 즉, Orientation이 변경되었을 때 발생하는 이벤트가 되겠습니다.



이벤트 메서드 생성은 빈 상자 영역을 더블클릭 하시면 됩니다. 둘 다 하시구요~

물론 저 부분을 하드코딩도 가능하며, 메서드 명을 바꿀 수 있고 그 기능으로,

또한 다른 이름의 동일한 컨트롤들의 중복되는 이벤트를 하나의 메서드로 통합 할 수도 있습니다.

다음에 때가 되거나 필요가 있으면 포스팅 해보도록 하죠 ㅎㅎ



해당 이벤트 메서드가 생성이 되면 비하인드 코드 영역으로 들어가게 됩니다.

그전에 MainPage.xaml을 보세요!




이벤트를 등록하자 마자 PhoneApplicationPage 아래

Loaded="PhoneApplicationPage_Loaded" OrientationChanged="PhoneApplicationPage_OrientationChanged"

이벤트 명에 이벤트 메서드 가 선언이 되었죠?

이러니 PhoneApplicationPage가 아까 그 Property의 명이라고 할 수 밖에 없는 겁니다.



자 그럼 코드를 계속 구성 해  봅시다.

저는 아래와 같이 구성했습니다.



using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using Microsoft.Phone.Controls;

namespace ScreenOrientation
{
    public partial class MainPage : PhoneApplicationPage
    {
        // Constructor
        public MainPage()
        {
            InitializeComponent();
        }

        #region private void PhoneApplicationPage_Loaded
        /// <summary>
        /// 어플리케이션 페이지가 로드 되었을 때
        /// </summary>
        private void PhoneApplicationPage_Loaded(object sender, RoutedEventArgs e)
        { // 현재의 Oriendataion 을 문자열로 가져와서 so.Text에 할당하여 표출.
            so.Text = this.Orientation.ToString();
        }
        #endregion

        #region private void PhoneApplicationPage_OrientationChanged
        /// <summary>
        /// 어플리케이션의 Orientation이 바뀌었을 때
        /// </summary>
        private void PhoneApplicationPage_OrientationChanged(object sender, OrientationChangedEventArgs e)
        { // 현재의 Oriendataion 을 문자열로 가져와서 so.Text에 할당하여 표출.
            so.Text = this.Orientation.ToString();
        }
        #endregion
    }
}



따로 설명할 것이 없네요. 간단한 코드니까요.

대신 주석으로 하는 행위에 대한 것을 추가 해 놓았습니다.



그럼 디버그로 에뮬레이터에서 확인해 봅시다.




Portrait 상태는 Orientation값으로는 PortraitIUp 이군요.


 



왼쪽으로 머리가 가게 하면 Orientation값으로는 LandscapeLeft 군요.




오른쪽으로 머리가 가게 하면 Orientation값으로는 LandscapeRight 군요.




에뮬레이터로는 PortraitDown 이 보이지 않습니다.

기기가 없으니 확인해 볼 방법은 없네요.



하지만 PageOrientation 의 값을 살펴보면 존재하는 값임은 확인이 가능합니다.




 

자 그럼 Screen Orientation 에 대한 것은 이해가 되었으리라 보고 이만 마치겠습니다.

반응형
반응형



중국 광저우 아시안게임 보느니라 정신을 놓고 있네요.

선수들 전부 다 잘 해줄 것이니 …

각설하고, 오늘 해볼 것은

프로젝트가 다른, 다시 말해 네임스페이스를 달리하는 Class Library  사용법을 해 보도록 하겠습니다.

별거 없지만… 그래도 모르는 분도 있을 것이며,

이게 능수 능란하지 않으면 공개 소스들 보고도 귀찮은 상황이 벌어지기도 합니다.

자 그럼 따라 해 볼까요?

일단 새 프로젝트를 만들고




현재 솔루션 탐색기는 이런 모양입니다.




솔루션 탐색기에서 아래 그림을 따라 실행 하세요




솔루션(Solution ‘ClassLibrary2) > 추가(Add) > 새 프로젝트(New Project) 랍니다.

프로젝트 추가 창이 뜨면  Windows Phone Class Library 템플릿으로 새로운 프로젝트를 만들어 봅시다.





그리고 솔루션 탐색기에 새로운 프로젝트가 추가 된 것을 볼 수 있을 겁니다.




testClassLibrary 라는 프로젝트가 하나 추가 되었죠?




Class1.cs 파일을 열어보면 public class Class1 이라는 클래스가 생성되어있고

해당 클래스는 testClassLibrary 라는 네임스페이스로 묶여 있습니다.

정리하자면 testClassLibrary.Class1 이라는 클래스로 불러오게 될 구성이 만들어진 것이죠

참고로, Class1.cs파일을 파일명을 바꾸셔도, 그렇지 않으셔도 됩니다.

Class1 이라는 클래스명과는 관계가 없으나 코딩을 하다 보면 명시적으로 명칭을 정하는 게 더 보기 좋기는 하죠.

그럼 public class Class1 을 구성해 봅시다. 저번 포스트처럼 !



namespace testClassLibrary
{
    public class Class1
    {
        #region Instant Difinition
        /// <summary>
        /// Class1의 property
        /// string type : returnString
        /// </summary>
        private string returnString = null;                                           // 1
        #endregion

        #region public string getString
        /// <summary>
        /// getString method 를 정의 한다.
        /// 현재 날짜/시간을 returnString 에 할당 후 그 값을 반환한다.
        /// </summary>
        /// <returns>this.returnString</returns>
        public string getString()                                                     // 2
        {
            this.returnString = DateTime.Now.ToString();                     // 2-1
            return this.returnString;                                                  // 2-2
        }
        #endregion
    }
}



일단 간략하게 설명부터 하겠습니다.

testClassLibrary 이라는 네임스페이스의  Class1 클래스

1. Member Property 선언 (.NET API에선 variable 이라 하지 않고 property 라고 하더군요)

  - private 접근 지정어의 string 형 변수 returnString을 선언하고 null 값으로 초기화

  - private 접근 지정어 때문에 Member Method로만 취급가능.

2. Member Mehotd 정의

  - public 접근 지정어의 string 형 값을 반환하는 getString Method

  - public 접근 지정어를 사용한 이유는 다른 namespace에서 사용 할 것이기 때문.

  2.1 Class1의 Member Property 인 returnString에 현재날짜와 시간을 string형으로(ToString Method) 할당.

  2.2 Class1의 Member Property 인 returnString을 반환.

좀 중복되는 이야기가 많아서 그렇지 이해는 될 겁니다. 저번 포스트랑 차이가 없으니까요.


참고)

#region … 아래에  /// <summary> 는 제가 직접 타이핑 한 것이 아닙니다.

코드 헬퍼가 자동으로 만들어주는데요 거기에 데이터만 추가 한 것이죠.

사용 방법은 다음과 같습니다.

#region blah blah … 에서 한 줄 내리고  /// 를 치면 자동으로 생성 됩니다.

한번 해보세요? 잘 되죠? 팁입니다. (알 사람은 다 아는 팁)


자 그럼 클래스가 다 구성되었으니 원래 프로젝트로 돌아가죠!


여느 때와 다름없이 저는 또 이렇게 구성합니다!

그리고 Button을 더블 클릭하여 이벤트 핸들러가 취급할 메서드를 자동으로 생성합시다.





일단 namespace가 다른 것을 확인 하셔야 합니다.



자 우리가 만든 testClassLibrary namespace를 사용하려면 선언을 해 주어야 하는데요.

using testClassLibary;


코드를 추가해보죠




에러가 뜹니다.

해당 클래스의 참조가 없어서 네임스페이스를 사용 할 수 없어서 인데요.

방법은… 다시 또 따라 해봅시다. 한번 행하는 게 더 빠르게 이해됩니다. 이건 상용적인 행위니까요.




해당 솔루션 > 프로젝트에서 Reference > Add Reference... (Reference : 참조 란 뜻이죠..어?!)




Add Reference 창이 뜨는데 Projects Tab을 여시면 솔루션 이하 프로젝트가 뜹니다. 그리고 OK!


그럼 시술 전과 시술 후 추가된 Reference 항목이 보일 겁니다.


   ->  


그럼 더 이상의 에러메시지는 나타나지 않게 됩니다.

그럼 이제 또 코드를 구성해 봅시다.




namespace ClassLibrary2
{
    public partial class MainPage : PhoneApplicationPage
    {
        // Constructor
        public MainPage()
        {
            InitializeComponent();
        }

        #region private void button1_Click
        private void button1_Click(object sender, RoutedEventArgs e)
        {
            testClassLibrary.Class1 tmpClass = new testClassLibrary.Class1();   // 1
            string msg = tmpClass.getString();                                                  // 2
            MessageBox.Show(msg);                                                             // 3
        }
        #endregion
    }
}



뭐 쉽죠?

1. testClassLibary 네임스페이스의 Class1 타입의 인스턴스 tmpClass 을 동적으로 생성.

2. string형 지역변수 msg에 tmpClass의 getString 메서드의 반환 값(현재 날짜와 시간) 할당
3. msg를 메세지 값으로 하는 메시지박스 출력.


디버그 버튼을 눌러 마지막 확인 해보실까요?



  ->


역시나 잘 되는군요.

네임스페이스가 다른 클래스 라이브러리 사용법은 이것으로 끝입니다.




다음 포스팅 내용은 대충 정리가 되어가고 있습니다.

http://www.charlespetzold.com/phone/index.html

제가 아잉폰을 구매한 후 출퇴근 시마다 짧게 보고 있는 pdf책입니다.

여기서 쉽게 설명 가능한 부분을 예제를 이용하여 ( 책의 예제는 보는 이에 따라선 쌩뚱 맞을 수도 있으니까요)

해보도록 해보겠습니다.

내용이 중요한 게 많아서 그냥 개개인더러 보라 넘길 수가 없더군요.

반응형
반응형

http://create.msdn.com/en-US/home/about/app_submission_walkthrough

음..
한번 올려 봐야겠군요.

그래도 쓸만한걸 올려야지;;;
영어 일본어 밖에 정할수 없는게 아쉽군요 -ㅅ-;

콩글리시로 해도 되겠지 -ㅅ-..
시도 해보고 결과를 말씀드립죠~_~
반응형
반응형




정말 오래간만에 포스팅 합니다 ㅎㅎㅎ

다름이 아니라 제가 요즘 아잉폰이 와서 좀 가지고 논다고 -ㅅ-

하지만 맥이 없어서 앱 개발은 못해보는군요 물론 개발자 등록도 안되어있지만 ㅋㅋ

오늘 아잉폰 덕에 찰스 페졸드 아저씨의 프로그래밍 윈도우즈 폰 7 pdf를 보고 있습니다.

찰스 페졸드 아저씨 다들 아시죠?

제가 아저씨라고 쉽게 말 하고 있지만 이 분은 Microsoft Press류 책 좀 보신 분들은 아실 겁니다. 꽤 유명하신 분입니다.

이분야 에선 진정한 고수반열에 오르신 분이죠. … (하지만 사진으로라도 뵌 적은 없습니다)


제가 공부하고 있는 상황을 알려드리자면 (아직 15페이지 밖에 못 봤습니다. 올 영문이라 -ㅅ-)

1. 초기에 나오는데 일단 우리가 만드는 프로젝트 자체를 실버라이트 어플리케이션이라고 부르시더군요.

그래서 혹시나 하고 봤더니 프로젝트 선택에 실버라이트 어플리케이션 템플릿을 선택해도 같더군요! (너무 썰렁한가)

2. XAML 을 자멜 이라고 부른다고 하더군요 -ㅅ-. 사멜? 자멜? …뭐 그렇답니다.

부가적으로 폼 디자인에 들어가는 XAML과 관련 XAML파일들은 WPF(Windows Presentation Foundation)을 따른다고 합니다.

뭐 지금까지 본건 이정도 네요. 물론, 지금은 화면해상도가 어쩌고, 픽셀은 포인트로 바뀔 때 이렇게 계산된다 이 부분을 보고 있습니다. 영어 해석은 잼병이라 좀 걸리네요 ~_~.


관련 자료는 다른 블로그에 누군가 직역 + 의역으로 해석해주시는 분이 계신 거 같던데 거길 참조해주세요 ~_~.

저는 그냥 느끼듯이 읽어 내려가서 설명하기 어려운 부분이 많군요.

이럴 줄 알았으면 20대 초에 번 돈 노는데 쓰지 말고 어학연수나 다녀 올걸…



자 오늘은 Class Library 사용법에 대해서 잠깐 써볼까 합니다.

언제나 같이 따라 하면서 익히세요.

VS.NET 에서 제공하는 언어들의 Class Library 만드는 법과 동일합니다. 혹 알고 계신 분은 패스~

우선 테스트도 해야 하니 기본 어플리케이션 템플릿으로 프로젝트를 만드세요




지금부터 잘 보세요




푸른색 화살표가 가르키는 항목은 “솔루션” 이라고 합니다.

붉은색 화살표가 가르키는 항목은 “프로젝트”라고 합니다.

눈에 익혀두시길…

클래스라이브러리는 만드는 방식이 프로젝트 단위로 가져올 수 도, 동일 프로젝트 내에 둘 수도 있습니다.

엄밀히 따지자면 동일한 네임스페이스 아니냐 이지만, 동일 프로젝트 내에서 파일을 만들어서 네임스페이스를 따로 둘 상황이라면 초보 거나 조금 특이한 상황일겁니다.

오늘 해 볼 것은 동일한 프로젝트 내, 다시 말해 동일한 네임스페이스 내에서 클래스를 만들어 사용 해 보겠습니다.

(다음시간엔 뭘 해야 할지 나와버리는군요! ㅎㅎ)

이 녀석입니다.



저는 이렇게 했습니다.





그리고 Add 누르셔서 만드시면.




추가 된 것을 확인 하실 수 있을 겁니다.

자 네임스페이스가 동일한지 확인 해 봐야겠죠?

   


당연히 동일 해야죠 ~_~..

자 그럼 우리는 HelloClass.cs 에 멤버 메서드를  추가 해 봅시다.



#region public string HelloString
public string HelloString()
{
    return "Hello Class";
}
#endregion



추가한 멤버 메서드는 위와 같고 설명을 드리겠습니다.

public 의 string값을 반환하는 HelloString이라는 메서드가 되겠습니다.

public 은 접근 지정어로 모든 곳에서 접근, 사용이 가능하다 라는 의미로 받아들이면 되겠습니다.

참고로 쓰지 않으며 private로 디폴트로 설정이 됩니다.

private는 상속받은 클래스나, 동일 클래스만 사용가능이 되겠습니다. (기타 세세한 건 찾기 귀찮으므로 패스~)

그리고 해당 메서드의 리턴값은 “Hello Class”가 되겠군요.

참고로 #region ~ #endregion 은 보기 좋게 묶을 때 사용하는 매크로성 예약어 입니다.

코드작성 하는 곳 좌측에 열림 표시 보이죠? 저걸 마우스로 클릭하게 되면





이렇게 됩니다. 좋은 기능이죠. 코드 짤 때, 이전 코드 반영시켜가면서 새로 짤 때 쓰면 상당히 좋습니다.

그냥 보기도 좋고 … ~_~

자 그럼 클래스를 만들었으니 사용해 봅시다.

디자이너로 돌아와서 Button 하나를 올리고 이벤트 등록을 합시다. (버튼 더블클릭!)




코드를 저는 이렇게 구성합니다.

 

private void button1_Click(object sender, RoutedEventArgs e)
{
    ClassLibrary.HelloClass hc = new ClassLibrary.HelloClass(); // 1
    string str = hc.HelloString();                                                 // 2
    MessageBox.Show(str);                                                     // 3
}



아까 이야기한 접근지정어 private이 나왔군요!

설명들어갑니다.

1. ClassLibrary 네임스페이스의 HelloClass 의 객체 인스턴스 hc에 동적으로 만들어서 할당.

-> 참고로 네임스페이스는 동일하기에 ClassLibary라는 부분은 빼도 상관없습니다.

     다음 포스트에서 볼 것이랑 길이가 다르면 헷갈릴 테니 그러는 것 뿐입니다.

2. string형 변수 str에 hc의 HelloString() 메서드의 결과 값 할당.

3. MessageBox.Show(string ..) 메서드로 str값 출력. (그냥 str값이 출력되는 메시지 박스가 뜹니다)


자 그럼 우리가 좋아하는 디버그로 결과를 보죠!



에뮬레이터가 뜨면 버튼을 클릭.

     


어떤가요? 참 쉽죠잉~

단순히 string값만 처리 했지만 원래는 다른 컨트롤 변수도 똑같이 제어가 가능하답니다.

어흑 벌써 12:30분 ~

저는 잘 시간입니다. 다음 포스트 최대한 빨리 올릴게요 ^-^

반응형
반응형



아 그냥 자기 뭣해서 바로 포스팅 합니다.

오늘 할 것은 Media Player 만들기 2번째

MediaPlayer 라는 녀석을 써 보려 합니다.


- MediaPlayer

좋은 자료를 찾았습니다. 우리가 할게 이것을 응용한 것이죠 ~_~.
http://msdn.microsoft.com/ko-kr/library/ff634558.aspx


백문이 불여일코딩 입니다. 따라 해 보시죠~

일단 프로젝트를 만듭시다. 템플릿은 기본으로오~




디자이너에서 TextBox를 이렇게, 그리고 버튼을 놓습니다.

TextBox 컨트롤의 명은 textBox1 일 텐데 Text Propertie 를 수정합니다

http://www.robtowns.com/music/blind_willie.mp3

요 녀석으로 !

그럼 아래와 같이 되겠죠?




자 바로 MediaPlayer를 생성했는데 없다고 하네요?

MediaPlayer 라는 타입 또는 이름의 네임스페이스가 없다는 메시지입니다 (해석 어렵지 않죠?)

그럼 그 녀석이 있는 걸 참조로(Reference) 추가를 해야겠군요. 이건 C#, 아니 VS.NET의 기본이죠!





제가 다 찾아놨습니다. 아래와 같이 따라 하시면 되겠습니다.

[시술 전]



[시술 과정 1]



[시술과정 2]



[시술 과정 3 - 그냥 넘어갑시다… 피곤해서 ㅎㅎ]



[시술 후]



자 참조를 추가했으면 네임스페이스를 선언해야 합니다

아래와 같이 선언 ㄲㄲ




추가되는 텍스트는 아래에서 긁으셔도 됩니다.

익숙하신 분은 using 스페이스 Microsoft. 찍어서 찾아서 하시겠지요. 코드 헬퍼 짱 입니다요~

using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Media;

그리고 이렇게 button1 을 더블 클릭하여 클릭 메서드를 만든 후

다음과 같이 코드를 추가합니다.



private void button1_Click(object sender, RoutedEventArgs e)
{
     FrameworkDispatcher.Update();                          // 1

     Uri uriStreaming = new Uri(this.textBox1.Text);        // 2
     Song song = Song.FromUri("StreamingUri", uriStreaming);// 3

     MediaPlayer.Play(song);                                // 4

}



또 간략한 설명!



1. 파워의 상태나 미디어가 업데이트 되면 호출해줘야 한다는 군요.

    msdn코드샘플엔 없던데, 에뮬레이터 오류인지 모르겠군요. 일단 넣어야 예외가 발생하지 않으므로 추가

2. Uri의 객체 uriStreaming 에 textBox의 Text Propertie 의 값을 인자로 하는 Uri객체를 동적으로 만들어 할당

3. Song의 객체 song에 Song 클래스의 멤버 메서드  FromUri에 위와 같은 두 인자를 넣은 리턴 결과를 할당.

   - 말은 어렵지만 Song을 생성한 후 우리가 원하는 Uri값으로 된 Song을 만들어 할당한 겁니다.-

4. MediaPlayer.Play 호출 인자는 우리가 만든 지역변수  song




MediaPlayer는 왜 변수화 하지 않느냐라는 질문을 하실 수도 있는데,

MediaPlayer를 찍고 go to Difinition 해보시면 Static Class로 정의 되어 있는 것을 보실 수 있을 겁니다.




현재 API상으로는 MediaPlayer 클래스는 음악 파일만 재생이 되는 거 같군요.

VS9.0 에서의 MediaPlayer와 차이가 있는가 봅니다.

Reference를 잘 찾아보질 않아서 대충 말하는 겁니다. 정답은 아니에요~_~




그럼 디버그로 확인해보죠

 




뭐 당연히 됩니다

에뮬레이터를 종료할 때 문제가 생기는 것을 제외하고는요.




제가 에뮬레이터의 문제라고 생각하는 이유가

http://msdn.microsoft.com/ko-kr/library/ff634558.aspx 

위 자료를 찾은 곳이

http://msdn.microsoft.com/ko-kr/library/microsoft.xna.framework.media.mediaplayer.aspx

이곳의 하위 인데 말이죠.

문서 하단을 보시면


Platforms


Xbox 360, Windows 7, Windows Vista, Windows XP, Windows Phone 7



이 보입니다.

ㅎㅎ 버그가 아니라면 되야 정상이란 거죠 ~_~

그러니 에뮬레이터 문제로 치부 ㄲㄲ





그럼 이제 뭘 포스팅 할지 내일 또 고민해 봐야겠습니다.

여러분 다음 포스트에서 만나요~~~


ps. 너무 피곤해서 대충 썼으니 이해 바래요 ㅠㅠ

반응형
반응형



오늘 대박 늦잠을 잤네요.

춥기도 하고 … 밤새 좀 포스팅 쓴다고 바빴더니… ㅎㅎ


오늘은 코드샘플을 뒤져서 간략한 예제 프로그램을 만들어 볼까 합니다.

너무 이른 듯 하지만!!!!

Media Player!!!!!!!!!!!!!!!!!!!!!!!!!

뭐 거창하게 말해도 이건 그냥 MP3플레이어 라 보시면 됩니다. ㅎㅎㅎ

자 이제 제 스타일을 아셨을 테니 그냥 따라 하시면 됩니다.

빈 프로젝트를 생성합니다. 이름은 그냥 MediaPlayer





일단 빈 프로젝트가 열리면 우리는 사용할 컨트롤이 어느 라이브러리에 속해 있는 지 알아봐야겠습니다.

왜냐?  Toolbox에는 미디어 플레이어가 없거든요

… 네? 있습니다! 졸고 계신 분 있지 않나 해서 한번 테스트 해봤습니다.

아래 보시다시피 MediaElement 가 그런 녀석이죠.




하지만 모두가 아시다시피 마이크로소프트 개발도구에 딸려온 기본 컨트롤은 이상하게 제약이 많았더라…

네! 그래서 찾아봤습니다. VS9.0 기준으로 두 가지로 분류가 나뉘더군요

http://msdn.microsoft.com/ko-kr/library/aa970915(VS.90).aspx

그냥 보세요. ~.~ 다음 포스트에서 두 번째 것을 해볼 테니까요.

MSDN을 따르자면 다음과 같습니다.

오디오 비디오 각각 또는 둘 다 재생하는 도구로는 MediaElement 클래스 와 MediaPlayer 클래스가 사용이 됩니다.

두 클래스는 유사점을 을 가지고 있고 서로 응용해서 쓸 수 있다고 하는군요.

(여기서부터 제 생각 입니다)

하지만 역시나 MediaPlayer 클래스가  MediaElement  클래스보다는 조금 더 동적인 것 같군요.

그래서 두 가지 다 해보겠지만 오늘은 시간상 (벌써 10시 52분 오후!) MediaElement예제를 간단히 해보겠습니다.


MediaElement


MediaElement 컨트롤을 툴 박스에서 디자인으로 드래그엔 드롭, 그리고 동작을 시키기 위한 버튼 을 드래그 앤 드롭.





MediaElement 컨트롤을 좀 키워봤습니다.

이런 모습이네요.

제가 여러 동영상과 음악 링크를 구했습니다.

검색엔진에서 sample avi, movie, mp3 등 쳐보시면 구해 질 수 있는 것 입니다.

http://www.jhepple.com/support/SampleMovies/WindowsMedia.wmv

http://www.jhepple.com/SampleMovies/niceday.wmv

http://www.jhepple.com/SampleMovies/niceday.asf

http://www.robtowns.com/music/blind_willie.mp3


테스트 해 볼 녀석들 입니다.

XAML 파일은 따로 건드리지 않을 거니 바로 비하인드 코드로 가봅시다.
그럼 버튼을 더블 클릭하여 해당 메서드로 이동 고고싱~ 싱나게~!




간단하게 코드를 구성 해 보았습니다.

private void button1_Click(object sender, RoutedEventArgs e)
{
    this.button1.IsEnabled = false;                                                                            // 1

    Uri u = new Uri("http://www.jhepple.com/SampleMovies/niceday.asf");     // 2
    this.mediaElement1.Source = u;                                                                          // 3
    this.mediaElement1.Volume = 100;                                                                       // 4
    this.mediaElement1.Play();                                                                                 // 5
}



간략한 설명!

1. 버튼의 상태를 사용할 수 없게 만들기

2. Uri 객체 u를 생성합니다. 웹에 있는 파일을 로드 하게 되는데 그 주소는

http://www.jhepple.com/SampleMovies/niceday.asf

3. mediaElement1 객체의 Source 라는 Propertie 에 위에 생성한 u를 할당.

4. 혹시나 재생이 되는데 소리가 안 나올까 mediaElement1 객체의 Volume 이라는 Propertie 값을 100 으로!

5. mediaElement1 객체의 재생 메서드 Play();

그리고 디버깅으로 확인 해 보시져~




 


어플리케이션 구동 후 Button을 누르면 사용 불가능 상태로 바뀌는군요. 여기까진 OK!

하지만 재생이 안되네요. 아닙니다. 로딩이 긴 겁니다. 기다려봐요~

여러 번 Button을 눌러 혼선을 줄 사용자를 위해서 첫 코드를 버튼 비활성화 시켰지요.





짠 나왔죠?

사실 약간의 불안함이 있습니다.

에뮬레이터라 그런 것 같기도 하고 프로그래스 바를 만들어 확인해보지도 않아서 자세히는 알 수가 없죠.

그래서 제가 준비해온 mp3링크를 가지고 해보시면 잘 나옴을 알 수 있을 겁니다.

다음 포스트에서는  MediaPlayer 클래스를 사용해 봅시다


반응형
반응형


약속도 많고 이런 저런 업무 때문에 간만에 글을 씁니다.

오늘 보셨나요 GSL 2 임요환 vs 이윤열 !! 와우~ 잼있네요~ 씽나네요~ 둘 다 잘 싸웠습니다.

스타크래프트 2 방송경기 중에 이렇게 전세의 향방을 어디로 둬야 할 지 모를 게임  처음이군요.

사실 GSL1 이나  GSL2 이전 경기는 확실히 중소규모 경합이 일어나면 전세를 확인 할 수 있는 게 대부분이었으니 ㅎㅎ


오늘 해볼 공부는

- WebBrowser 컨트롤

입니다.

네 배포 된 프로그램 내서 별도 브라우저 없이(엄밀히 하자면 있겠죠)

웹 서핑이 가능하게 해주는 컨트롤 사용이죠~ 한번 쉽게 가 보아요~

아래와 같이 템플릿을 구성하시고




그리고 툴 박스를 이용하여 이렇게 화면을 꾸며보세요.

또한 원래 있던 “MYAPPLICATION”“WebBrowser 컨트롤”

“page name”“웹 브라우징”으로 변경 해보세요. 

해당 컨트롤 마우스 우 클릭 후 Properties를 선택하면 그 항목 중 무엇을 바꾸어야 할지는 다 보일 겁니다.



이 프로그램은 다음과 같이 동작할 겁니다.

Button 을 누르게 되면 TextBox에서 입력한 주소 값을 아래 WebBrowser 컨트롤에서 보여줄 것

그러기 위해서는 TextBox의 TextBox문구를 사용 가능한 URL을 표기 해놓아야 혼동이 되지 않겠죠?

그럼 바꿉시다. http://lovapi.tistory.com 으로  유후~




그리고 저번 포스트에서 배운걸 그대로 사용합니다.

Button 컨트롤을 더블 클릭하면 기본이벤트가 Button의 Click 이벤트이고 그렇게 이벤트 핸들러에 등록될 함수를 만듭시다.

Button 컨트롤 더블클릭 ㄱㄱ




이렇게 함수가 생겼죠?

혹 궁금해 하시는 분을 위해서 추가 설명 드리겠습니다.

private void button1_Click(object sender, RoutedEventArgs e)  …  함수의 이벤트는 어디에 생성되느냐 ?

눈치 빠르신 분들은 찾으셨을 겁니다.




네 맞습니다. 웹 프로그래밍 같은 느낌으로 XAML에 정의가 되어있네요. 참 쉽죠잉~

자 그럼 WebBrowser에 대해서 사용법을 알아야 하는데, Button 아래 선언된 XAML코드가 보입니다.

사실 C#.NET 코드로 제어를 하려면 저 녀석의 네임스페이스와 선언방식을 알아야 되죠.

그래서 우리는 아래와 같이 WebBrowser 컨트롤의 Properties를 먼저 찾아봅시다.




WebBrowser 타입 클래스의 webBrowser1 이라고 변수가 정의 되어있네요.

ASP. NET을 기억해 봅니다. .ascx 파일에서 정의된 일부 개체들은 속성에 정의된 명칭대로 변수로 호출 되었죠?

그 기억으로 해당 함수(사실 C#에선 메서드-Method-라고 부릅니다)내에서 this. 찍어보니…




아니나 다를까… 있군요. 사용해봅시다. 어느 VS/VS.NET의 WebBrrowser 컨트롤과 마찬가지로

Navigate라는 멤버 메서드가 해당 웹페이지로 이동이 되겠습니다.

WebBrowser.Navigate는 두 개의 메서드 로 오버로딩 되어있는데 저는 다음의 메서드를 사용합니다.

public void Navigate ( 	Uri url )


Uri 클래스는 생성자를 통해 string 형 값으로 개체를 생성할 수 있군요.

public Uri ( string uriString )


그리하여 완성된 코드는 다음과 같습니다.



private void button1_Click(object sender, RoutedEventArgs e)
{
    string str = this.textBox1.Text;          // 1
    Uri u = new Uri(str);                       // 2
    this.webBrowser1.Navigate(u);       // 3
}



이젠 잔머리가 생겨서 1, 2, 3 주석 번호대로 설명을 하겠습니다.

1. string 형 str 변수를 만들고 현재 textBox1의 Text에 든 값을 할당한다.

2. Uri 객체를 str 변수데이터를 생성자의 인자로 하는 동적 인스턴스 객체 u를 만든다.

3. webBrowser1.Navigate에 u를 인자로 하는 값을 호출한다(그러면 페이지가 보입니다)


객체, 인스턴스, 인자 헷갈리는 단어들은 그냥 무시하셔도 될 겁니다.

OOP를 공부하게 되면 객체니 인스턴스니 객체의 인스턴스니 뭐니 하는 건 지겹게 보시겠습니다만

그런 깊이를 가질 상황은 아직은 아니니까요

저도 처음엔 칼같이 사용해왔으나 지금은 혼용되거나 중의적으로 쓰고 있는 게 많기도 하고…

디버그 해봅시다


뭐.. 볼 거 없이 잘 되겠지만.. 후후 으하하하하!

 


잘 되죠? 본인이 원하는 사이트로 주소를 바꿔서도 해보세요. 잘 될 겁니다.

절 믿으세요 ~_~. 설명은 잘 못해도 이런 삽질을 좀 단순한 건 잘합니다!


다음 포스트에는 다시 무엇을 할 지 고민해 보아야겠습니다.

물론 모든 IDE를 가진 언어의 목차 라는 게 있는데 일반적으로 컨트롤 다음에는 GDI인데

이 녀석은 컨트롤에 GDI개체들이 있네요 -ㅅ-. 거기다 좀 찾아봤더니 GDI개체들에 효과 주는 툴도 MS에서 내 놓았고…

그래서 좀 도움이 되는 걸 찾아보려고 합니다

찰즈 페졸드 아저씨의 관련 책(PDF가 있더군요)과, 샘플코드 위주로 찾아보고 포스팅 해야겠습니다.

그게 서로 서로 도움이 될 거 같기도 하구요 ~_~

그럼 슷하2 나 잠시 하고 자야겠습니다.

반응형

'.NET > Win Phone 7' 카테고리의 다른 글

Windows Phone 7 SDK - Media Player 2  (0) 2010.11.05
Windows Phone 7 SDK - Media Player 1  (0) 2010.11.03
Windows Phone 7 SDK - Text 와 Button  (0) 2010.10.27
Windows Phone 7 SDK - Hello World  (0) 2010.10.26
Windows Phone 7 SDK - 설치  (0) 2010.10.25

+ Recent posts