2009. 6. 30. 10:39

ASP.NET 페이지 라이프 사이클
http://msdn.microsoft.com/en-us/library/ms178472.aspx

마스터페이지와 컨텐트 페이지의 이벤트 순서

이벤트 순서

Module + 페이지 라이프 사이클
Posted by CoolDragon
2009. 6. 23. 17:42


전체화면 (Application.Current.Host.Content.IsFullScreen = true;) 에서는 보안의 이유로 키보드 사용을 제한 하고 있다. 참고해 봅시다~

---이 키만 사용 가능---
ESC
space
arrow keys
tab 
home
enter
end
pageup/pagedown
-----------------------

출처 :
http://silverlight.net/blogs/msnow/archive/2008/09/04/silverlight-tip-of-the-day-35-full-screen-mode-implementation.aspx


Posted by CoolDragon
2009. 5. 21. 17:16

1. Visual Studio 2008 실행한다. (VS 2005도 특별히 틀릴것 같진 않다.)
2. 프로젝트를 열거나 생성한다. (C#.NET 프로젝트(클래스라이브러리 또는 응용프로그램 등등)
3. 아래 참조 추가를 한다. (아마 오피스가 설치되어있어야 할것 같다.)


4. 그후엔 아래와 같이 코드를 사용하면 된다.


using Microsoft.Office.Interop.PowerPoint;
using Microsoft.Office.Core;


            OpenFileDialog open = new OpenFileDialog();
            if (open.ShowDialog() == DialogResult.OK)
            {

                ApplicationClass app = new ApplicationClass();
                Presentation ppt = app.Presentations.Open(open.FileName, MsoTriState.msoTrue, MsoTriState.msoFalse, MsoTriState.msoFalse);

                for (int i = 0; i < ppt.Slides.Count; ++i)
                {
                    ppt.Slides[i + 1].Export(@"E:\Test\VS2008\Winform\TestPPT\TestPPT\bin\Debug\" + i + ".png", "PNG", (int)ppt.Slides[i + 1].Master.Width, (int)ppt.Slides[i + 1].Master.Height);
                }
                ppt.Close();
                app.Quit();
            }

Posted by CoolDragon
2009. 3. 19. 15:30


System.Net 네임스페이스를 통해서 단순히 소켓프로그래밍(TCP통신, UDP통신)만 하는것이 아니다.
여러가지 많은 것을 할 수 있는데.. System.Net.NetworkInformation.Ping에 대해 알아보겠다.

보통 cmd창에서 아래와 같이 해본사람이 많을 것이다.
    c:\> ping 127.0.0.1 (엔터)

이런 작업을 C#.NET 코드로 구현이 매우 쉽게 가능했다. 아래 샘플 코드만으로도 쉽게 이해할 수 있으리라 생각한다.

Ping.Send 함수는 overloading이 많은데 자세한 내용은 아래 링크를 참고하면 되겠다.
 -> http://msdn.microsoft.com/ko-kr/library/7hzczzed.aspx

참고로 무조건 timeout이 발생하는 hostname이 있을 수 있다. (예:www.daum.net, www.naver.com 등)
이것은 아마도 네트워크 관리자(?)가 해당 서버로 ping요청이 허용되지 않도록 막았을 가능성이 매우 크다.

-------------------------------------- 샘플코드 --------------------------------------

System.Net.NetworkInformation.Ping p = new System.Net.NetworkInformation.Ping();
System.Net.NetworkInformation.PingReply reply = p.Send("127.0.0.1"); // www.contoso.com
MessageBox.Show(reply.Status.ToString() + "//" + reply.RoundtripTime.ToString());

--------------------------------------------------------------------------------------

Posted by CoolDragon
2009. 3. 19. 12:49

09.03.19

오늘도 출근길 전철에서 있었던 일이다.
오늘은 그 전처럼 사람들이 붐비지 않았다.
역시나 오늘도 의정부역에서 출발하는 전철을 타게되었다.
시발(욕아님)하는 열차라 자리에 앉아 잠을 청했다.
목적지에 점점 다가오는 기분에 눈을 떴다.
뭔가 클로즈업이 되었다.
앞에 서 있는 아가씨가 남대문, 아니 여대문(?)을 버젓이 열어 놓고 계신게 아닌가..
(다행히 속옷은 보이지 않았다~ 왜 아쉬워?)

그 졸린 상태에서도 난 생각했다.
생각1 - 저기요.. 거기열렸어요?라고 말한다.
생각2 - 핸폰문자를입력하여핸폰을보여준다.
생각3 - 일행이 있어보여 내릴때 그 사람에게 대신 말한다.

근데 그 생각의 갈등을 뒤로하고 다시 자버렸다. ㅋㅋ
사실 말하기도 뻘쭘하고 변x로 오해를 살 수 있어서.. 우헤~
내릴 역에 도착할 때쯤 다시 눈을 뜨니 그녀는 이미 사라진 상태였다.
과연 그녀는 어디로 갔을까? 안타까울 따름이다.ㅋㅋ

Posted by CoolDragon
2009. 3. 16. 10:59

Silverlight를 ControlTemplate와 DataTemplate 를 접했다.
자주 접한 것 같지만 이 녀석들은 내겐 참 헷갈린다. (곧 잡아 먹어주겠다~ 흐흐흐)
이번 블로깅을 통해 조금이나마 개념 파악을 위해 DataTemplate를 정리해 보고자 한다.

그중 가장 흔하게 접하는 것이 ListBox 컨트롤의 ListBoxItem일 것이다.
이 ListBoxItem을 XAML 코드를 보면서 이해해 보고자 한다.

ListBoxItem을 다른 형태로 출력하는 방법은 아래 2가지가 있다.
(사실 아마 더 있을지도 모른다. 지금 개념파악을 위해 정리하는 것이므로 더 있으면 추가하도록 할 것이다.)

--------------------------------코드보기-----------------------------------

1) Inline 방법

<UserControl ...>

<ListBox x:Name="MyBooks" Margin="5" ItemsSource="{Binding}">
 <ListBox.ItemTemplate>
  <DataTemplate>
   <StackPanel Orientation="Horizontal" >
    <TextBlock Text="{Binding Name}" />
    <TextBlock Text="{Binding Birthday}" />
   </StackPanel>
  </DataTemplate>
 </ListBox.ItemTemplate>
</ListBox>

</UserControl>


--------------------------------------------------------------------------------

2) Resource 방법

<UserControl ...>
<UserControl.Resources>
 <DataTemplate x:Key="DataTemplate1">
  <StackPanel Orientation="Horizontal" >
   <TextBlock Text="{Binding Name}"/>
            <TextBlock Text="{Binding Birthday}" />
  </StackPanel>
 </DataTemplate>
</UserControl.Resources>

...

<ListBox ItemTemplate="{StaticResource DataTemplate1}" x:Name="listboxMediaList" Margin="5,3,5,5" Grid.Row="1"  />

...

</UserControl>

Posted by CoolDragon
2009. 3. 12. 15:51

09.03.12

오늘 출근길에 있었던 일이었다.
전철에 앉아서 졸고있던 나는 앞에 서있던 사람이 신문으로 머리를 빗어주고 있었다.
그리고 다른 앞사람이 그사람 무릎이 내 무릎을 차고 있었다.

왠만하면 깨지 않으려 노력했으나 못 참고 깨어날 수 밖에 없었다.
눈을 떠보니 평소와 다르게 사람이 엄청 많았다.
'아니 뭐야. 왜 이렇게 인간들이 많아?'라는 생각과 함께 졸린 눈을 비비며 정신을 좀 차려볼까 해서 눈에 힘을 주고 있었다.
그때 신설동역에 정차하여 문이 열리자마자 사람들이 우루루~ 내리는 것이 아닌가...
그 인파 사이에 끼어 있던 아가씨가 휩쓸려 가지 않으려 봉을 잡고 버티고 있었다.
표정에선 인내와 고통을 참고 있어 보였다.
결국 못참겠다 싶었는지 한마디를 내 뱉었다..

'씨바~ㄹ'

듣자마자 쫄았다.. ㅋㅋ

그 말을 들으니 난,
그 아가씨가 은근히 카리스마 있어보였고, 멋져보였고, 알흠다워 보였을리 없었다.
오히려 성인이 된 그 아가씨의 입에서 그런 말이 나왔다는 것에 대해 아쉬움만 남았다.
왠지 내가 저기에 서있었으면 나도 저런 말이 나왔을까 생각을 해보게 된다.
(나 또한 욕쟁이 이므로....)

Posted by CoolDragon
2009. 3. 9. 19:23

하나의 팁쯤이라고 생각해도 될 듯 하다.
.NET 에서 자바스크립트에서 사용되는 escape와 같은 함수를 사용하고 싶을때가 혹시라도 있을 것이다.
그럴 경우 난 System.Web.HttpUtility.UrlEncode를 사용하면 되는줄 알았다.
하지만 변환되는 형식이 당연히 틀렸다. (사실 틀릴줄은 알았지만 뭐 그냥 써도 되는줄로 알고 었었을 뿐이다.)
그런데 구글링을 통해서 알아낸 사실은 따로 escape와 같은 역할을 하는 클래스가 존재한다는 것이었다.
그 방법은 아래와 같다.

1. Microsoft.JScript 어셈블리를 참조한다.
2.
  escape    => Microsoft.JScript.GlobalObject.escape("바꿀 문자열");
  unescape => Microsoft.JScript.GlobalObject.unescape("바꿀 문자열");


이외에도 Microsoft.JScript.GlobalObject 클래스의 멤버가 여러가지 있으니 나중에 자바스크립트 관련된 일이 있으면
이 클래스를 우선 참고할 필요가 있겠다.

ps. 참 쉽죠 잉~?

Posted by CoolDragon
2009. 2. 6. 11:29


IE를 띄우려면 2가지 방법이 있다.
Process 클래스를 이용한 방법과 System32폴더에 존재하는 SHDocVw.dll을 참조해서 사용하는 것이다.

첫째 Process 클래스를 이용한 방법을 알아보자.
오나전 쉽다. 아래 코드를 보면 이해가 될 것이다.
여기서 Process 클래스의 WaitForExit(); 함수를 호출하면 Modal형태로 띄울 수 있게된다.
------------------------------------------------------------------------------------------------------------
        private void button1_Click(object sender, EventArgs e)
        {
            ProcessStartInfo startInfo = new ProcessStartInfo("IExplore.exe");
            startInfo.Arguments = "http://www.naver.com";

            Process browser = new Process();           
            browser.StartInfo = startInfo;
            browser.Start();
            browser.WaitForExit();           
        }
------------------------------------------------------------------------------------------------------------

둘째 SHDocVw.dll를 참조한 방법을 살펴보자.
 1. System32 폴더에서 SHDocVw.dll를 찾아 참조를 한다.
 2. 그리고 아래 샘플 코드를 보면 이해가 될 것이라 생각한다.
 
  - (예1) 브라우저로 창을 띄움
------------------------------------------------------------------------------------------------------------
            object vPost, vHeaders, vFlags, vTargetFrame, vUrl;
            string cPostData;
            vFlags = null;
            vTargetFrame = null;
            vUrl = "http://localhost/testpage.asp";
            vHeaders = "Content-Type: application/x-www-form-urlencoded" + Convert.ToChar(10) + Convert.ToChar(13);
            cPostData = "test1=1&test2=2&test3=3";
            vPost = ASCIIEncoding.ASCII.GetBytes(cPostData);

            SHDocVw.InternetExplorer ie = new SHDocVw.InternetExplorer();
            ie.Visible = true;
            ie.Navigate2(ref vUrl, ref vFlags, ref vTargetFrame, ref vPost, ref vHeaders);
------------------------------------------------------------------------------------------------------------
  - (예2) 팝업(팝업형태의브라우저)으로 창을 띄움
    a. 빨갛게 되어있는 소스만 틀리므로 그부분을 참고한다.
    b. SHDocVw.IWebBrowserApp 속성은 더 있는데 어떻게 써야할지는 아직 잘 모르겠다~ (모르면 구글링을 해보세요)
------------------------------------------------------------------------------------------------------------
            object vPost, vHeaders, vFlags, vTargetFrame, vUrl;
            string cPostData;
            vFlags = null;
            vTargetFrame = null;
            vUrl = "http://localhost/testpage.asp";
            vHeaders = "Content-Type: application/x-www-form-urlencoded" + Convert.ToChar(10) + Convert.ToChar(13);
            cPostData = "test1=1&test2=2&test3=3";
            vPost = ASCIIEncoding.ASCII.GetBytes(cPostData);

            SHDocVw.InternetExplorer ie = new SHDocVw.InternetExplorer();
            SHDocVw.IWebBrowserApp WebBro = (SHDocVw.IWebBrowserApp)ie;
            WebBro.Height = 500;  // 세로 길이
            WebBro.Width = 500;   // 가로 길이
            WebBro.ToolBar = 0;
            WebBro.Visible = true;
            WebBro.Navigate(vUrl.ToString(), ref vFlags, ref vTargetFrame, ref vPost, ref vHeaders);
------------------------------------------------------------------------------------------------------------

아무튼 위와 같은 코드를 통해 IE를 띄울 수 있으며
Process에서는 MainWindowHandle 가지고 있고 SHDocVw.InternetExplorer 클래스 또한 HWND라는 속성이 있으므로
각 속성들을 통해 프로세스를 주무를 수 있지 않을까 싶다. (안되면 뭐 말고~)

Posted by CoolDragon