달력

4

« 2024/4 »

  • 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
질문자 : 라에(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
질문자 : 사루사(salusa15)  링크 : http://cafe.naver.com/winmodev/1210
<질문내용>

C# 기반으로 블로그 어플을 제작하려고 준비하고 있습니다. (WM 6.1)

다른 준비는 거의 다 되어가는데...

UI 제작시 터치 스크롤 구현이 문제가 되더군요.

6.5라면 제스쳐를 이용해서 쉽게 구현이 가능할꺼 같은데.

6.5뿐만 아니라 6.1기반에서도 돌아가야 되기 때문에 막막하더군요.

Fluid를 쓰려고 했더니 한글이 안된다는 의견이 있어서 보류중이고요..

 

글 목록이 있고 이 목록을 손가락으로 내렸을때 글 목록이 내려가고, 올라가고 글 목록 클릭시 글이 보이게 하려면

어떤 부분을 참고를 해야되나요?

이해를 돕기 위헤 네이버 블로그 어플 캡쳐사진을 같이 올립니다..

<답변내용>

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

제스처 입력을 통한 리스트 컨트롤 제어를
WM6.1에서 구현하기에는 너무나 어렵습니다

다행히....
해외에 훌륭하신 분들께서 구현하신 예제가 있으니
참고하시면 좋겠네요

http://www.codeproject.com/KB/list/SmoothListBox.aspx

 

 작성일 : 2010.02.08

보다 자세한 정보는 윈도우 폰/모바일 개발자 모임에서 만나보실 수 있습니다
:
Posted by Lunaness
질문자 : 괴무리(monster7575)  링크 : http://cafe.naver.com/winmodev/1189
<질문내용>

안녕하세요. 처음 시작하는 초보입니다.

 

설명이 좀 애매할지도 모르겠으나.. 우선 질문 한번 드려볼께요..

 

compact framework 2.0이고 mobile 6.0 pro 에뮬로 테스팅을 하고 있습니다.

 

우선 Form이 2개가 있습니다.

 

Form1에는 예를 들어 소녀시대의 멤버 이름이 적힌 9개의 버튼이 있구요

각 버튼을 누르면 Form2로 넘어가면서 각 멤버에 대한 프로필 (이름, 나이, 키, 사진)이 나오는

순서의 애플을 만들어 보려고 하는데요.

 

아래 제가 9개의 멤버들의 정보를 배열에 담아 Form2으로 값을 넘겨 각각의 프로필을

나타내게 끔하려고 소스를 넣어 두겠습니다.

 

총 9개의 배열이 있는데. 한 배열에 프로필 내용을 다 담고 싶은데 잘 안되더라구요 ㅠㅠ

그리고 Form1 소스 아랫쪽에 보심 Form2로 sender 하는 부분이 있는데

 

Form2에서 이값을 어떻게 받아서 출력을 해주어야 하는지 잘 모르겠습니다.

힌트나 참고 할수있는 소스를 공유 주시면 너무 감사드리겠습니다.

관련소스/참고자료

 Form1.cs

 

namespace FormLectureNew
{
    public partial class Form1 : Form
    {
       
        String[] memberArray = new String[9];
        int CheckNum;   
      

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
          
           int SHeight = SystemInformation.MenuHeight; //MainMenu 세로 길이

           Size rect = Screen.PrimaryScreen.WorkingArea.Size; //작업 영역 Widht, height
           int WWidth = rect.Width;  //작업 영역 가로길이
           int WHeight = rect.Height-SHeight; //작업 영역 세로길이

          
           Sosimember member1 = new Sosimember("윤아",10,150,40,"yuna.gif");
           Sosimember member2 = new Sosimember("수영",20,160,41,"suy.jpg");
           Sosimember member3 = new Sosimember("효연",30,161,42,"hy.gif");
           Sosimember member4 = new Sosimember("유리",31,162,43,"yuri.gif");
           Sosimember member5 = new Sosimember("태연",25,166,33,"ty.gif");
           Sosimember member6 = new Sosimember("제시카",26,120,20,"jesica.gif");
           Sosimember member7 = new Sosimember("티파니",27,130,25,"tipany.gif");
           Sosimember member8 = new Sosimember("써니",22,166,50,"seoni.gif");
           Sosimember member9 = new Sosimember("서현",23,168,47,"seoh.gif");   

           memberArray[0] = member1.Name;
           memberArray[1] = member2.Name;
           memberArray[2] = member3.Name; //위의 memer1~9의 값을 한번에 담고 싶은데 안되네요. ㅠㅠ
           memberArray[3] = member4.Name;
           memberArray[4] = member5.Name;
           memberArray[5] = member6.Name;
           memberArray[6] = member7.Name;
           memberArray[7] = member8.Name;
           memberArray[8] = member9.Name;

          
          
         
         

            for(int i =0 ; i < memberArray.Length ; i++)
            {
            Button button = new Button();
            button.Text = memberArray[i];
            button.Location = new Point(0, (WHeight/memberArray.Length)*i);
            button.Size = new Size(WWidth, WHeight/memberArray.Length);
            button.ForeColor = Color.SteelBlue;
            button.BackColor = Color.White;
            button.Click += new EventHandler(button_Click);
            Controls.Add(button);
            }
               
        }
       

        void button_Click(object sender, EventArgs e)
        {
           
            Button button = (Button)sender; 
           
           
            for (int i = 0; i < memberArray.Length; i++)
            {
                if(button.Text==memberArray[i]) //각 버튼 클릭시 i값을 체크
                {
                    CheckNum = i;
                }
            }
            Form2 f = new Form2(memberArray[CheckNum]); //Form2로 배열을 넘겨 Form2에서 출력하고자하는데 방법을;;
            f.Owner = this;
            f.ShowDialog();
        }
    }
}

 

 

Form2.cs

 

using System;

using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Net;
namespace FormLectureNew
{
    public partial class Form2 : Form
    {


        public Form2()
        {
            InitializeComponent();
        }
       
       public Form2(string Name) //Form1의 각 배열이 값을 어떻게 가지고 와서
        {
            InitializeComponent();
         
        }
       
       
        private void menuItem3_Click(object sender, EventArgs e)
        {
          
            MessageBox.Show("이름 : {0}\r\n나이 : 20세\r\n키 : 180Cm\r\n몸무게 : 80kg"); //여기에 출력할수있을까요.. ㅠㅠ
        }
         
    }
}

<답변내용>

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

간단한 예제를 하나 만들어 봤습니다
Sosimember 라는 클래스는 임의로 만들었고

Form1에서 Form2로 데이터를 넘기는 작업이 들어가 있습니다
Form2의 생성자를 Form2(Sosimember mbr) 이런식으로 overloading 해서 받는 것을
예제로 만들어 봤습니다

추가로...
native라면 소멸자에서 string을 저장한 버퍼를 해제해 줘야 하지만
managed에서 string은 그럴 필요가 없습니다

우선 C#의 클래스 부분부터 차근차근 공부해보시는 것이 좋을 것 같네요 ^^;

 작성일 : 2010.02.05

보다 자세한 정보는 윈도우 폰/모바일 개발자 모임에서 만나보실 수 있습니다
:
Posted by Lunaness
질문자 : 잠와(taijiduri)  링크 : http://cafe.naver.com/winmodev/1182
<질문내용>

한글화 하기전에는 picturebox를 사용해도 에러가 안떴는데

한글화 한후부터는 picturebox에 사진을 넣으면 에러가 뜨네요

밑에와 같은 에러요

 

처리되지 않은 'System.PlatformNotSupportedException' 형식의 예외가 mscorlib.dll에서 발생했습니다.

추가 정보: PlatformNotSupportedException

 

그래서 에뮬자체에서 영어로 바꿨더니 에러가 안뜹니다ㅜ

어떻게 안되나요??

 

그리구 한가지 질문이요

 

첨에 에뮬설정할때 기본사이즈가 작게 나오는데

만약 옴니아같은 폰에 넣을경우 사이즈를 그거에 맞게 고처야 하나요?

질문검색 했는데, 바꾸지 말라고 하는데

그럼 에뮬실행했을때 이미지가 너무 작고 빈공간이 많이 생기는데

그건 어떻게 하나요??

<답변내용>

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

 

잠와님께서 에러나는 부분을 저도 테스트 해 봤는데요..

특별한 이상을 발견할 수 없었습니다

 

예제 파일을 첨부해 드립니다

지난번 Pictubox 질문 올리신 글에 자답으로 링크 남겨 주신 부분하고
최대한 동일하게 작성해 봤습니다

VS2008 / .Net3.5 CF / 제가 작성한 에뮬레이터와 폼팩터를 사용하였습니다

확인해보시고 이상있으시면 다시 질문 주세요~!

 작성일 : 2010.02.04

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

질문자 : sinklinu  링크 : http://cafe.naver.com/winmodev/1147
<질문내용>

기존 임베디드 리눅스 환경에서 플랫폼 개발만을 해오던 1人입니다.

수차례에 걸쳐 윈모데브의 글도 많이 읽게 되는 군요.

항상 많은 도움 주셔서 정말 감사합니다.

 

정말 초짜같은 질문일 수도 있으나, 간단한 질문을 하나 올립니다.

 

제가 앞으로 개발하고자 하는 분야는 WM분야이며, C#.NET으로 개발을 진행하고자 합니다.

 

프로그램 개발하기 및 추가적인 관련 글 들을 보면, 웹에서 다운로드 하여 설치 하는 부분을 제외 하고는 VS2008만 설치하면 개발 환경이 갖춰 진다고 나와 있는데요.

 

VS2008 Professional을 사용하면 C# 개발및 C#에서의 .NET 개발까지 완료할 수 있는 건가요??

 

아직. 미들웨어 개념의 좀 부족하다 보니.

 

조언 부탁 드립니다.

 

감사합니다.

<답변내용>

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

Visual Studio 2008 Professional 에서 C# / .NET Compact Framework 개발이 충분히 가능합니다

다만, 기본으로 설치되어 있는 스마트 장치 SDK가 Windows Mobile 5 SDK 이기 때문에
요즘 출시되는 최신형 단말기의 WM6.X 버전에 대응하지 못합니다
(WM5로 개발해도 WM6.X에서 동일하게 실행은 됩니다만, 개선된 기능이나 .Net CF 3.5는 이용하지 못합니다)

따라서, WM6 SDK Professional 을 설치하시고, KOR 에뮬레이터와, Eng WM6.1.4 에뮬레이터(이 버전부터 와이드 단말기 지원)
WM6.5로 개발하시려면 추가로 WM6.5 DTK를 설치하시면 됩니다
(단말기가 따로 있으시다면 에뮬레이터는 설치 안하셔도 크게 상관은 없습니다만...)

뽐뿌맨님께서 작성하신 http://cafe.naver.com/winmodev/189 게시물 참고하시면
초기 환경설정에 많은 도움이 될 것 입니다

여담이지만..
Windows Mobile은 미들웨어가 아니고 플랫폼 입니다
현재 WM6.X는 마이크로소프트에서 개발된 Windows CE 5.0을 기반으로 완성된 플랫폼으로
주로 PDA나 스마트폰(윈도폰)에 설치가 됩니다

PC에 설치되어 있는 Windows나 Linux, MAXOS10 같은 모바일 단말기에 설치되는 OS 입니다

 작성일 : 2010.02.01

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

:
Posted by Lunaness