2008. 3. 27. 16:26

간단한 프로그램들을 많이 작성하게 되는데 제가 만드는 간단한 프로그램들은
대부분 일정 주기로 어떤 것을 조회하거나 관리하기 위한 용도로 작성하는 프로그램이 많습니다.
이런 경우 시스템 트레이에 아이콘화 시켜 놓을 수 있으면 좋겠다는 생각을 많이 하게 되는데
이럴 때 사용할 수 있는 Tip을 알려드릴려고 합니다.

 물론 방법만 알면 어렵지 않습니다. 관련된 객체가 이미 제공되고 있기 때문에 몇 줄이면 그런 기능을
만들 수 있습니다.
먼저 알아야 하는것이 notifyIcon 입니다. notifyIcon이 시스템 트레이와 관련된 모든 기능을 제공해주는 컨트롤입니다. 먼저 툴 메뉴에서 notifyIcon을 드레그 해서 폼에 추가합니다.

사용자 삽입 이미지











NotifyIcon 컨트롤을 삽입하는 것 만으로도 이미 작업은 50% 이상 끝난 상태 입니다. 보통 우리가 트레이에 아이콘화 시킬때 사용하는 방법은 폼 닫기를 선택했을 때 입니다. 폼 닫기를 선택했을때 프로그램이 종료되어 버리면 안되기 때문에 닫기 이벤트를 핸들링해서 처리해 주어야 합니다.
사용자 삽입 이미지
 






























작성해야 할 코드는 아래에 소스를 참조하세요

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
      e.Cancel = true;
      this.Visible = false;
  }

Closing 이벤트를 핸들링 하는데 이벤트 아규멘트 중에서 Cancel 값을 True로 설정하면
방금 이벤트가 취소 되어 버립니다. 이벤트는 취소되지만 창은 안보여야 하기 때문에
this.Visible = false을 통해서 안보이게 수정해야 합니다.

한 가지더 트레이에 축소된 아이콘을 더블 클릭하면 다시 활성화 되어야하는데
이 부분은 아래와 같이 코드를 작성하시면 됩니다.

        private void notifyIcon1_MouseDoubleClick(object sender, MouseEventArgs e)
        {
            this.Visible = true;
            if (this.WindowState == FormWindowState.Minimized)
                this.WindowState = FormWindowState.Normal;
            this.Activate();
        }

notifyIcon을 더블클릭 하게 되면 다시 폼을 보이게 하고 폼의 상태를 다시 노멀 사이즈로 조정합니다.
그리고 this.Activiate()를 통해서 폼을 활성화 시킵니다.

생각보다 간단하지요..
제가 한가 아직 설명안한게 있는게 그건 바로 NotifyIcon 컨트롤의 Icon 속성에 Icon을 설정해 주셔야 한다는 점입니다. 여기에 설정된 아이콘이 시스템 트레이에서 보게 되는 아이콘입니다. 이 아이콘을 설정하지 않으시면 트레이에는 아무것도 나타나지 않게 되기 때문에 미아가 되어 버립니다. ^^

-------------------------------------------------------
김영욱 Microsoft MVP 2006~2008
-------------------------------------------------------
Email: iwinkey@hotmail.com
Blog: winkey.tistory.com
Phone: 010-2817-0063
닷넷채널: www.winkey.pe.kr
-------------------------------------------------------

.NET Util, C#, tray
2008. 3. 26. 14:20

XAML이 아무리 좋다고 한들 이제까지 많이 사용되고 있던 Graphic tool과 호환성에
문제가 있다고 하면 아무래도 발전속도나 확산속도에는 한계가 있을 수 밖에 없습니다.
하지만 XAML이 공개되어 있지 않거나 복잡한 포멧이 아니기 때문에 개발사의 의지만
있으면 XAML로 변환하는 일종의 Converter를 만드는게 꼭 어려운 일은 아닐 것 같습니다.

- Adobe IIlustrator

사용자 삽입 이미지

http://mikeswanson.com/XAMLExport  에서 다운로드 할 수 있으며 IIustrator 파일인 *.ai 파일을 XAML로 컨버팅 해줄 수 있는 기능을 가지고 있다. 의외로 디자인적인 소스를 컨버팅해 보면 별 무리없이 컨버팅 잘해오는 것을 볼 수 있는데 한 가지 문제가 있다고 하면 모든 도형들을 0.0에서 부터서 자기 위치까지를 가지는 캠퍼스 객체로 리턴해버리는 문제가 있다.

즉 가져온 소스를 기반으로 어떤 작업을 하려고 하면 일일히 또 다시 캠퍼스 사이즈를 다시 조정해야 할 경우도 생길 수 있다. 역시 제일 좋은 방법은 Expression Design에서 작업하는 것이겠지만. 그것이 여의치 않은 경우에만 사용하는 것이 좋겠다.

-Adobe Flash
사용자 삽입 이미지

http://www.mikeswanson.com/swf2xaml/ 에서 다운로드 할 수 있으며 Flash 혹은 Flex의 결과물인 *.swf를 XAML로 컨버팅 할 수 있는 툴이다. 하지만 직접 컨버팅 해본 결과 컨버팅 결과는 30% 정도의 완성도라고 할까.. 그렇다. 더욱이 Action Script 부분은 컨버팅 되지 않는 듯하다.
 물론 제가 이렇게 예기를 해도 또 컨버팅 테스팅을 해보시는 분들이 계실 것이고 컨버팅한 결과를 보자마자 "오 그래도 좀 컨버팅 되는데"라고 기뻐할 수도 있을 것 같지만 조금만 다시 들여다 보면 거의 제대로 컨버팅 되지 않는 다는 결론을 내릴 수 있을 것이다.
 사실 컨버팅이라는 것은 100%가 아닌 99%는 0%로 같은 의미로 받아들여야 할 경우도 많다.

-3D MAX
사용자 삽입 이미지
사용자 삽입 이미지

ZAM3D(http://www.erain.com/products/zam3d/DefaultPDC.asp)의 경우는 3D MAX에서 작업된 결과물인 *.3DS 파일을 XAML로 변환하는 툴인데 생각보다 상당히 완성도가 높은데다가 MAX의 가장 최신버전까지 잘 컨버팅 되는 것으로 알려져 있습니다. 특히 간단한 3D 디자인은 직접할 수 있어서 더욱더 유용한데 가격도 그리 비싸지 않게 책정되어 있어서 개인적으로는 필수적인 툴로 추천하고 있습니다.

이외에도 XAML Exporter for Blender(http://www.codeplex.com/xamlexporter)
Adobe Fireworks to XAML Exporter(http://www.infragistics.com/design/Fireworks_XAML_Exporter.aspx)
Lightwave to XAML Converter(http://www.shaxam.com/)
SVG to XAML Converter(http://www.wpf-graphics.com/ViewerSvg.aspx)
Aurora(http://www.mobiform.com/eng/aurora.html) : XAML Designer
Maya to XAML(http://www.highend3d.com/maya/downloads/tools/3d_converters/3782.html)
Online Converter from 3ds to XAML(http://www.wpf-graphics.com/Converter.aspx)
XamlXporter for Illustrator(http://www.codeplex.com/Wiki/View.aspx?ProjectName=xamlxporter)
PSD to XAML(http://flowlabs.net/psd2xaml.aspx)

등등이 있는데 테스트 되는데로 결과를 올려 놓도록 하겠습니다.

-------------------------------------------------------
김영욱 Microsoft MVP 2006~2008
-------------------------------------------------------
Email: iwinkey@hotmail.com
Blog: winkey.tistory.com
Phone: 010-2817-0063
닷넷채널: www.winkey.pe.kr
-------------------------------------------------------

2008. 3. 23. 09:50


Visual Studio 2008에서 지원하고 있는 디자이너와 개발자의 협업과 제품 라이프 사이클의 관리 그리고 실버라이트와의 관게에 대해서 설명하고 있습니다.
2008. 3. 22. 08:26

Visual Studio 2008은 Web Programming에 있어서 다양한 편의성이 강화 되었습니다.
Split으로 디자인과 소스코드를 동시에 편집하게 해준다든지 혹은 자바 스크립트 디버깅과 같은
기능들은 정말 훌륭하게 향상되었습니다.
또 툴상에서 AJAX기 지원되기 때문에 비교적 쉽게 AJAX를 개발할 수 있다는
장점도 있습니다.

2008. 3. 21. 21:07

막상 편집된 동영상을 보니 마구 민망해져서 왜 이런걸 찍었나 하고
후회도 되지만 그래도 나름 유용한 동영상인데다가 꽤 유명한 사람들이 대게 출연하기 때문에
좀 망가져도 나쁘지 않은것 같습니다. ^^

이 동영상은 첫번째 동영상으로 Visual Studio 2008이 달라진 점에 대해서 설명하고 있습니다.
설명에는 롯데정보통신 연구소에 선임 연구원으로 있는 한용희 Microsoft MVP님이
수고하시고 계십니다.

2008. 2. 25. 20:20

어제 부산에 다녀오는데.. 서울역에 다음과 같은 현수막이 붙어 있었습니다.
'행복했습니다. 노무현 때문입니다.'
'우리 대통령님 고맙습니다.'

사용자 삽입 이미지

아마도 역대 대통령 중에 재임기간 중 가장 말이 많았던 대통령이 아니었을까? 하는 생각이 듭니다.
지금부터 하는 제 개인적인 생각을 해 보고 싶습니다.

뒤에 가서 역사 속에 판단 되겠지만 지금 모습으로 본다면 노무현 대통령님만큼 잘해주시고
가신 분은 없을 꺼라는 생각이 듭니다. 이런 예기하면 여러 사람들이 예기할 것입니다.
경제 정책은 실패했고 아파트 값은 폭등했고 주변 상황은 나빠졌고 서민 물가는 올랐다고
게다가 말은 얼마나 많았냐고 말입니다.

하지만 아는 사람들은 다 알꺼라고 생각 합니다.
노무현 대통령은 취임식때 부터 퇴임한 오늘까지 '희망'이라는 단어를 위해서 열심히
노력했다는 것을 저는 여러가지 상황을 통해서 조금이나마 알고 있습니다.

아파트 값은 김대중 정부 시절에 자율화 되었습니다. 그 때를 기점으로 사실은 고삐 풀린 망아지 처럼 뛰기 시작했습니다. 잘못된 정책 하나를 바로 잡기 위해서는 얼마나 많은 노력이 들어가는지 모릅니다. 종부세 하나를 위해서 얼마나 많은 싸움을 하셨는지 모릅니다. 잘못된 주택 정책의 정점을 예기하지만 김대중 정부 시절에 지어졌던 강남 타워펠리스와 몇몇 대형 아파트 들을 예기할 수 있습니다. 다 아시겠지만 그때 대형 아파트를 구입한 사람들은 양도세 조차 없습니다. 이미 경제는 살아나고 있었지만 경제 부양책으로 제시한게 초대형 아파트의 양도세 면제였습니다. 지금의 주택정책이 돈 놓고 돈 먹는식으로 변한것의 시발점은 아파트 값 자율화에 있었다고 말할 수 있습니다.
 여 승무원 문제와 이랜드 사태로 사회 이슈가 되었던 비정규직 문제를 나았던 노동법 개정, 이미 고갈되어 가고 있는데 아직도 대형 사옥을 가지고 방만한 운영을 하고 있는 국민연금 모두 김대중 정부 시절에 강제화 된 것들입니다.
 노무현 정권은 앞서서 한 실정에 대한 수습과 대한민국의 희망을 잠식시키며 호사를 누리고 있던 기득권 세력에 대한 도전을 동시에 진행하면서 말도 많았던 것 같습니다. 하지만 지금 결과를 보면 조중동 3대 주간지로 부터 호도되고 있던 여론들이 무엇이 잘못되었는지 최소한 알게 되었고 미친듯이 오르던 아파트는 이제서야 안정세를 지키고 있습니다.

오늘 진심으로 노무현 대통령님께 말씀드리고 싶습니다.
왕정시대가 아니지만 많은 사람들은 아직도 대통령은 모든 힘을 가지고 있는 줄 알고 있습니다.
저는 복잡한 정치는 잘 모르지만 그래도 당신은 왠지 정말 잘해 주신것 같습니다.
아니 잘해주셨습니다. 사심없이 잘해주셨습니다.
감사합니다. 가시는 길 가벼운 마음으로 잘 가십시요.
맘 같으면 왠지 봉화 마을에 찾아가면 밥 한끼 주실 것 같습니다. ^^
사용자 삽입 이미지
노무현
  • 세계의빛 2008.02.26 08:06 신고

    노무현 대통령님이 남겨 놓은 선례가.. 새 정부에서도 전혀 무시될 수는 없을 겁니다. 장관 인준만 해도.. 그렇잖아요.. ^^

  • HOONS 2008.02.29 16:13

    요즘 프로젝트 잘 되어 가세요?! 흐흐

    블로그 만든 기념으로다가 들렸다가 감다 흐흐

2008. 2. 14. 10:23

WPF에서 작업하다 보면 WPF에서 제공하지 못하는 기능들을 다른 방법으로 구현하게 됩니다.
저도 지금 수행하고 있는 프로젝트에서 간단한 음성 녹음기를 만들게 되었습니다.
몇 가지 개발 방향을 검토하다가 결과적으로 선택한 방법이 Direct X를 이용하는 방법입니다.

C#에서도 Direct X를 잘 지원하기 때문에 여러가지 장점이 생기기도 하고
성능상의 이슈나 개발상의 이점을 가져 갈 수 있을 것 같습니다.

지금 제 PC에서 설치된 OS는 Window Vista 얼티메이트 버전인데
확인해 보니 Direct X 10 버전이 설치되어 있습니다.

지금 배포 대상  PC의 OS는 Windows XP 타블랫 PC 버전입니다.
따라서 Direct X 9이 설치되어 있을 것 같습니다.

결과적으로 Direct X의 설치 여부를 확인 할 수 있는 명령이 있습니다.

dxdiag를 입력해 보시면 Direct X 설치 현황을 보실 수 있습니다.
만약 dxdiag를 입력했을 때 아무 반응이 없으면 Direct X 5.0 이하의 버전이 있거나
혹은 설치되지 않았다고 보시면 됩니다.

녹음기 기능이 어느정도 정리되면 다시 포스팅하겠습니다. ^^

사용자 삽입 이미지

-------------------------------------------------------
김영욱 Microsoft MVP 2006~2007
-------------------------------------------------------
Email: iwinkey@hotmail.com
Blog: winkey.tistory.com
Phone: 010-2817-0063
닷넷채널: www.winkey.pe.kr
-------------------------------------------------------
Direct X, WPF
  • hakbaby 2015.01.29 10:45 신고

    우와 부장님!!!
    구글링 하다가 갑자기 부장님 사진이 보여서 깜짝 놀랐어요ㅋㅋㅋㅋㅋㅋ
    반가운 마음에 댓글 남겨봅니다!!! :D

    DirectX 버전을 프로그램을 이용한 방법이 아닌 소스에 추가할만한 코드를 찾고 싶어서 구글링 중인데 잘 나오지 않네요 ㅠㅠ
    레지스트리를 보니 버전이 나와있기는 한데 dxdiag에서 나온 버전이랑도 다르고 ㅠㅠ

    온김에 포스팅 글들을 정독하게 가야겠습니당!!! 크히히
    좋은 하루 되세요~!! ^ㅁ^

2008. 2. 9. 13:31

듀얼 모니터에서 WPF의 창을 배치하기 위해서는 약간의 꼼수가 필요하다.

기존의 닷넷 프로그래밍에서는
System.Windows.Forms.SystemInformation.MonitorCount를 이용해서
현재 시스템에 장착된 모니터의 갯수를 알 수 있었다.
또 해당되는 모니터의 상세한 정보를 얻고자 할 경우에는
System.Window.Forms.Screen.AllScreens[index].WorkingArea;와 같이 해당되는 모니터의
정보를 알아낼 수 있었다.

하지만 WPF에서는 기본적으로 모니터와 관련된 속성이나 기능을 추가로
제공되지 않는 것 같다.
실제로 몇몇 경우에는 듀얼 모니터를 활용하는 경우가 많고 또 개발시에도
듀얼 모니터를 이용하는 경우가 많기 때문에 WPF Application의 출력 모니터 지정은
꼭 필요한 기능중에 하나이다.

따라서 약간의 꼼수를 이용해서 이와 같은 상황을 해결할 수 있다.

fullScreenWindow.WindowStartupLocation = WindowStartupLocation.Manual;
System.Drawing.Rectangle workingArea = System.Windows.Forms.Screen.AllScreens[1].WorkingArea;
fullScreenWindow.Left = workingArea.Left;
fullScreenWindow.Top = workingArea.Top;
fullScreenWindow.Width = workingArea.Width;
fullScreenWindow.Height = workingArea.Height;
fullScreenWindow.WindowState = WindowState.Maximized;
fullScreenWindow.WindowStyle = WindowStyle.None;
fullScreenWindow.Topmost = true;
fullScreenWindow.Show();

WindowStartupLocation을 메뉴얼로 지정해야 위치를 지정하기 용의하며 위의 소스의 핵심은
System.Drawing.Rectangle workingArea = System.Windows.Forms.Screen.AllScreens[1].WorkingArea; 이다.
AllScreens[1]이라고 했기 때문에 이는 Primary Monitor가 아닌 Second Monitor의 정보를 가져와서 임시라 Ractangle을 하나 생성하고 이 정보를 바탕으로 출력하려고 하는 WPF Window를 셋팅하는 것이다.
원리는 간단한데 이 같은 생각을 해내기 까지가 힘든 과정이다. ^^

-------------------------------------------------------
김영욱 Microsoft MVP 2006~2007
-------------------------------------------------------
Email: iwinkey@hotmail.com
Blog: winkey.tistory.com
Phone: 010-2817-0063
닷넷채널: www.winkey.pe.kr
-------------------------------------------------------

WPF
2008. 2. 6. 23:40

실버라이트를 배포하는데 있어서 표준이 될 만한 문서 입니다.


2008. 2. 3. 16:15
사용자 삽입 이미지

월간 마이크로소프웨어와 인연을 맺은지도 벌써 3년째에 접어들고 있습니다.
그 동안 WPF와 관련된 연재를 했고 특집 기사와 원서 소개, 도서 소개, 마소 플러스 등을 기고했습니다.
어쩌면 첫 연재 기사가 책으로 찍혀 나왔을 때의 그 느낌을 아직 간직하고 있어서 그런지
아직도 매달 제 글이 실린 글을 마소를 보면 마음이 설래입니다.

아무튼 감사패라고 받고보니 일단 기분은 참 좋습니다. 그리고 또 무언가 해야 할 것 같은 조바심도 막 듭니다. Microsoft사의 닷넷 그 중에서도 WPF 기술을 주력하고 있는 개발자라는 생각을 세삼 다시 상기하게 됩니다.

2008년에도 왠지 할께 무척 많을 것 같습니다.

Microsoft MVP 김영욱