GSI

가끔씩 막혀 버릴때의 답답함은.. 몬가를 해야 하겠다는 의지도 되지만..
괴리감 마져 드는거 같다.

실버라이트와 wpf의 코딩 스타일이 틀린건지.
하위 엘리먼트(객체)의 접근 방법이 틀린건지.
내가 모르고 있는건지.

가끔씩 몰 해봐야 한다. 하지만. 남는 시간 짜투리로 하는 이 상황에서.
너무 막히는게 많으니 공부의 한계를 느낀다.

회사일과 연계 하면서 공부를 계속 해 나간다는건..
정말로 자신과의 싸움인듯 하다.

그래도 해야 하겠지..
결과를 위해서는..

오늘 이 문제도 몇일 내에 해보고 확실하게 정립 해야 할거 같다.
Posted by gsi
:

이 자료를 토대로 해서 화면을 구성해 보자.
Posted by gsi
:

OVERLAYING HTML AND SILVERLIGHT CONTENT

실버라이트가 1.0이 나온 지금 시점에서
많은 컨트롤들이 붙어 주지 않지만 실버라이트 만의 UX환경을 조금은 맛볼수 있는거 같네요.
벡터 드로잉 방식의 웹 페이지를 이미지가 아닌 스크립트로 표현할 수 있으니까요.

11월 7일 세미나를 들으면서 알게된 예제를 구현할려고 무던히 노력했습니다.
다행이 도와 주신 천성구 님께 정말 감사하구요 ^^.

기본적인 구현 방법은
실버라이트로 화면 UI 및 레이아웃을 구성한다.
그 위에 ASP.NET AJAX를 통해서 컨트롤 들을 배치한다.
웹 서비스를 통해서 데이터를 받아서 처리 한다.


이게 주된 데모였구요.
처음 부터 막혔네요 ^^.

실버라이트 화면 위에 레이어로 구성해도 asp.net 컨트롤들이 올라가질 않았습니다. ^^
하지만 이유는 간단했습니다.
Windowless="true" 이 코드 하나.

Blend를 통해서 실버라이트 예제들을 보면 HTML 구조를 취하고 있습니다.
하지만 그쪽 예제는 많이 있고 아래 동영상을 한번 보시면 알 수 있습니다.
http://silverlight.net/learn/learnvideo.aspx?video=120 ( OVERLAYING HTML AND SILVERLIGHT CONTENT ) 을 찾아 보시면 됩니다.

하지만 내가 궁금해 한것은 바로. aspx 에서 안되는 거였죠 ^^.
aspx 코드에서는 xaml 컨테이너가 하나 있어서 그 코드를 통해서
아래와 같이 심플하게 추가할 수가 있습니다.

<asp:Xaml ID="Xaml1" runat="server" Height="480" Width="640" XamlUrl="~/Page.xaml">
</asp:Xaml>
이 코드가 이렇게 바껴야 합니다. ^^
<asp:Xaml ID="Xaml1" runat="server" Height="480" Width="640" XamlUrl="~/Page.xaml" Windowless="true">
</asp:Xaml>


이게 되었으니 웹 서버도 테스트 하고 asp.net와 실버라이트 간의 데이터 공유 부분도
공부를 해서 올리도록 하겠습니다.

Posted by gsi
:

오늘 세미나는 나름대로 생각을 많이 하게 해주는 좋은 시간이였던거 같습니다.

우선 Silverlight를 ASP.NET AJAX와 연동해서 화면 구성을 얼마나 극대화 하게 해주는지를
보는 좋은 예가 되었으며,
Silverlight를 활용한 동영상 부분은 기존에도 봐왔지만. asp.net를 배우는 시점에서
어떻게 적용하고 동영상 컨텐츠로서의 발전 가능성에서도 조금씩 생각의 틀을
잡아 주는 시간이였던거 같습니다.

Web Service의 활용 가치에 대해서도 조금씩 이해가 가네요.
실버라이트가 1.1을 바라보고 있는 가운데 많은 부분 업데이트가 되고
다양한 적용 사례가 나올거 같습니다.
내년이 기대가 되네요.

기존 디자이너의 일러 스터에서의 디자인 방법을 그대로 가져 갈 수 있도록
XAML Export도 제공한다고 하니 Blend를 배우지 않아도 협업 과정에서
조금은 가능성이 보이네요 ^^.

지금 구상중인 제 웹 페이지도 ASP.NET AJAX를 기본 구성으로 가지만
궁극적인 목표는 WPF, Silverlight의 접목에 있기 때문에
많은 고민을 해야 할거 같습니다.

모두 하루하루. 즐거운 날로 가득 찼으면 좋겠네요.

^^

Posted by gsi
:

IIS 설정하고 xbap용 파일을 Publish를 할때 제대로 되지 않거나.
웹 페이지를 실행 하면 응용 프로그램 다운로드 실패 등의 오류가 나게 된다.
솔직히 이 부분은 쉽게 이해가 가지 않는다.

몇번 경우의 수를 두고 더 테스트를 해보는 수 밖에..

Publish를 할때도 localhost 로 시작하는 것과 IP를 할당하는것에
실패도 있을 수 있는거 같다.

우선 게시 하는거 자체가 이렇게 어려우니 ^^..
그냥 프로젝트로 조금 개발해서 올리는 방향으로 해야 할거 같다.

이거야원 ^^

Posted by gsi
:

Openfiledialog를 사용해서 파일을 가져와서 Stream의 정보를 Binary로 읽는 코드 입니다.

private void btnAzeSelect_Click(object sender, EventArgs e)
{
    Stream myStream = null;
    OpenFileDialog openFileDialog1 = new OpenFileDialog();

    openFileDialog1.InitialDirectory = "c:\\";
    openFileDialog1.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*";
    openFileDialog1.FilterIndex = 2;
    openFileDialog1.RestoreDirectory = true;

    if (openFileDialog1.ShowDialog() == DialogResult.OK)
    {
        // 컨트롤에 이름 설정하기
        tbAzeName.Text = openFileDialog1.FileName;

        try
        {
            if ((myStream = openFileDialog1.OpenFile()) != null)
            {
                using (myStream)
                {
                    // 바이너리로 읽기 위해서 BinaryReader를 생성하고 myStream의
                    // 스트림 값을 넘겨 받는다.
                    BinaryReader r = new BinaryReader(myStream);
                    for (int i = 0; i < 5; i++)
                    {
                        Console.WriteLine(r.ReadInt32());
                    }
                }
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show("Error: Could not read file from disk. Original error: " + ex.Message);
        }
    }
}

Posted by gsi
:

사용자 삽입 이미지

이번에 하게된 테스트 프로젝트에서 사용하게 되는 모듈 중에 CScrollView를 사용한
화면 구현 부분을 작성해 봤습니다.

기능 :
- CScrollVew
- ZoomIn, ZoomOut
- MouseLButton 연동한 해당 지점 찍기

스크롤을 하거나, 줌인이 되면서 스크롤 되거나 하는 부분에서
마우스의 위치 처리 부분이 참 궁금했습니다.
이것으로 테스트는 마치고 작업에 들어가야 하겠네요.

구체적인 코드 설명은 오늘은 영.. @.@..
요청이 있을시에는 설명 해 드리겠습니다. ^^..

<참고> 코드 구루 인가 그쪽에서 가져온 ZoomView를 사용해서 확장한 겁니다.

소스 파일 :

Posted by gsi
:

출처 : http://xamlxaml.com/2006/08/04/unique-interfaces-in-wpfxaml/

PostItBoard Demo


이런 느낌의 사진 게시판은 느낌이 좋을거 같다.
카테고리별로 나누고 새로운 사진들은 바람에 흔들거린다던지 하는 효과도 좋은거 같다.

누르면 크게 보여 주고 다시 사라지고 하는 효과도 좋을거 같고
포스트잇을 연상케 하는 이 디자인은 나름 멋진듯 하네.

Posted by gsi
:

Win Form 만으로는 WPF 만큼의 효과를 구사하지 못한다.
그래서 생각한게 Custom Control 형태를 취하게 하면서 WPF 컨트를을 Win Form에
연동이 가능하다는 것을 알게 되었다.

즉, Visual Studio 2008에 있는 ElementHost를 선택해서 Form에 추가 합니다.

사용자 삽입 이미지





이후에 화면은 아래와 같으며, References에 windowBase, WindowsFormsIntegration이 추가 됩니다.
사용자 삽입 이미지

하지만 WPF 관련 xaml 파일이 없기 때문에 위와 같이 아무것도 적용할 수 없습니다.

이후에 xaml 파일을 추가 해야 합니다.
xaml 파일만 추가할 수도 있지만, WPF 어플리케이션을 추가한 후에 Blend로 작업하고,
프로젝트를 추가해서 하는게 더 좋은거 같습니다.

프로젝트 생성 후에 Window1.xaml 파일을 그대로 사용하지는 못하는듯 합니다.
UserControl을 상속 받은 xaml 파일을 사용해야 하기 때문에 파일을 하나 추가합니다.

이제 아래와 같은 추가할 수 있는 화면이 나옵니다.
사용자 삽입 이미지


이제 추가 하고 나면 아래의 화면 처름 배치를 할 수 있습니다.
사용자 삽입 이미지











이후의 컨트롤 접근은 다를거 없습니다.
해당 컨트롤.컨트롤이름. 이렇게 진행 됩니다.

궁금한 내용 있으시면.. 코멘트 부탁해요 ^^

Posted by gsi
:

사용자 삽입 이미지

DirectX 코드를 사용해서 텍스처를 연결시켰다.
기존 코드 : http://www.iamgsi.com/entry/DirecrX-Managed-Create-a-Device-C
를 조금더 확장 시켰다.
이벤트 함수 OnResetDevice도 추가 했으며,
여기서 봐야 할 것은 윈도우 사이즈가 변할때 텍스처가 검정색으로 나올때가 있다.
이때 텍스처 함수 부분은 Managed로 해야 하는지는 잘 모르겠지만.
아래와 같은 인자를 사용하게 되는데 Managed를 할때는 몇개의 인자가 더 필요 하더라.

아래의 함수를 사이즈 변할때 호출해줘야 제대로 나오게 된다.
private void directXBaseView1_OnResetDevice(object sender, DeviceEventArgs e)
{
     ...
    if (texture != null)
        texture.Dispose();  // 이 코드를 넣지 않으면 메모리가 계속 누적된다. Texture가 계속해서 생성이 되는거 같다.
    texture = TextureLoader.FromFile(dev, @"d:\bbbb.jpg");
}

나머지는 타이머를 사용해서 화면은 계속해서 리프레쉬 해주었다.

Posted by gsi
:

가끔 느끼는 거지만 내가 지금 공부하는 것을 사용해서 홈페이지를 만들어 보고 싶은
꿈은 예전 부터 있었던거 같다.

지금 Asp.Net, C#, wpf(xbap) 등을 보고 있지만.
이제는 하나 만들어 봐야 할거 같다.

테스트겸 만드는 거라서 호스팅 받기도 어중간 하고
더욱이 asp.net는 웹 호스팅이 거의 없다.

그래서 집에서 진행해 볼려고 한다.

솔직히 웹 쪽은 거의 몰라서..-.- 몇일을 허비한 결과 80 포트는 통신사에서
막아 놨다는 것을 알았다.

그래서 다른 포트를 사용 해서 해보았다.
우왕.. 되는구나..
이제 도메인 하나 사서.. ip 연결만 ^^..
그나저나 유동 아이피라.. 하루에 한번정도는 링크를 해주어야 할듯 하다 ^^

여기는 우선 필요한 자료만 옮기고 홈페이지가 다 만들어 지면
넘겨야 할거 같다.

사실 얼마나 걸릴지 난 모른다 ^^
Posted by gsi
:

사용자 삽입 이미지

C#에서 프로젝트를 하기 위해서 DirectX를 연동하고 있다.
현재 소스는 Tutorial 1: Create a Device를 사용해서 UserControl에 붙인 것과 동일합니다.

Posted by gsi
:

이번에 데모로 하나 작업 하는게 있다.

그런데 CScrollView를 사용한 데모이다.
물론 기존에 소스를 보면 Zoom, Pan, Scroll 기능이 접목되어 있는
소스들이 많이 있다.

이것을 갔다가 활용할려고 했지만.
마우스로 찍는 부분과 화면의 표현 부분에서
정말 많이 막히는거 같다.

내가 개념을 잘못 잡고 있는건지...
왠지 어렵다.

MM_TEXT를 사용해서 하는것도 괜찮은거 같은데.
화면에 해당 그림을 찍고 Zooming를 하게 되면
이상하게 자꾸 화면이 표현이 되질 않는다.

혹 누가 아시는분 있으시면 코멘트 부탁..
술, 밥 다 쏩니다 ^^
Posted by gsi
:

Test Template

내 일상 2007. 10. 28. 00:38 |

Test
Test
Test

Posted by gsi
:

비주얼 C++에서 자동으로 이 문제를 지원하는 방법은 없고, 다만 이에 대한 함수가 공개되어 있을 뿐입니다.
MSJDrawTransparentBitmap이라는 함수가 마이크로소프트의 knowledgebase 079212에 나와있습니다. 다음 소스 코드를 보면 이 함수가 하는 일은 비트맵을 불러오고 페인팅 표면을 투명하게 칠하기 위해 마스크로 보내는 작업을 한다는 것을 알 수 있습니다(자세한 내용은 MSJ 한국판 98년 1월호 108쪽 참고).

// MSJDrawTransparentBitmap
// 함수는 복사되었고 Knowledgebase 기사 Q79212으로부터 적용되었다.
// 제목 : 투과되는 비트맵 그리기
void MSJDrawTransparentBitmap(CDC* pDC, CBitmap* pBitmap, int xStart,
    int yStart, COLORREF cTransparentColor)
{
    CBitmap bmAndBack, bmAndObject, bmAndMem, bmSave;
    CDC dcMem, dcBack, dcObject, dcTemp, dcSave;
    dcTemp.CreateCompatibleDC(pDC);
    dcTemp.SelectObject(pBitmap); //비트맵 선택하기
    BITMAP bm;
    pBitmap->GetObject(sizeof(BITMAP), (LPSTR)&bm);
    CPoint ptSize;
    ptSize.x = bm.bmWidth;         // 비트맵의 폭
    ptSize.y = bm.bmHeight;        // 비트맵의 높이
    dcTemp.DPtoLP(&ptSize, 1);     // 논리 포인트로부터 장치 포인트로 변환
    // 임시 데이터를 보관하기 위해 몇몇 DC를 생성
    dcBack.CreateCompatibleDC(pDC);
    dcObject.CreateCompatibleDC(pDC);
    dcMem.CreateCompatibleDC(pDC);
    dcSave.CreateCompatibleDC(pDC);
    // 각 DC를 위해 비트맵을 생성. DC는 GDI의 숫자만큼 필요하다.
    functions.
    // 모노크롬 DC
    bmAndBack.CreateBitmap(ptSize.x, ptSize.y, 1, 1, NULL);
    // 모노크롬 DC
    bmAndObject.CreateBitmap(ptSize.x, ptSize.y, 1, 1, NULL);
    bmAndMem.CreateCompatibleBitmap(pDC, ptSize.x, ptSize.y);
    bmSave.CreateCompatibleBitmap(pDC, ptSize.x, ptSize.y);
    // 각 DC는 픽셀 데이터를 저장하기 위해 비트맵 객체를 선택해야 한다.
    CBitmap* pbmBackOld = dcBack.SelectObject(&bmAndBack);
    CBitmap* pbmObjectOld = dcObject.SelectObject(&bmAndObject);
    CBitmap* pbmMemOld = dcMem.SelectObject(&bmAndMem);
    CBitmap* pbmSaveOld = dcSave.SelectObject(&bmSave);
    // 적당한 맵핑 모드를 설정한다.
    dcTemp.SetMapMode(pDC->GetMapMode());
    // 이리로 보내진 비트맵을 저장한다.
    dcSave.BitBlt(0, 0, ptSize.x, ptSize.y, &dcTemp, 0, 0, SRCCOPY);
    // 투영되는 비트맵에 포함되는 색으로 소스 DC의 배경색을 설정한다.
    COLORREF cColor = dcTemp.SetBkColor(cTransparentColor);
    // 소스 비트맵에서 모노크롬 비트맵까지 BitBlt를 수행해서
    // 비트맵용 오브젝트 마스크를 생성한다.
    dcObject.BitBlt(0, 0, ptSize.x, ptSize.y, &dcTemp, 0, 0, SRCCOPY);
    // 원래 색으로 되돌리는 소스 DC의 배경색을 설정한다.
    dcTemp.SetBkColor(cColor);
    // 객체 마스크를 반전시킨다.
    dcBack.BitBlt(0, 0, ptSize.x, ptSize.y, &dcObject, 0, 0, NOTSRCCOPY);
    // 목적지에 메인 DC의 배경을 복사한다.
    dcMem.BitBlt(0, 0, ptSize.x, ptSize.y, pDC, xStart, yStart, SRCCOPY);
    // 비트맵이 놓여지는 위치를 마스크한다.
    dcMem.BitBlt(0, 0, ptSize.x, ptSize.y, &dcObject, 0, 0, SRCAND);
    // 비트맵의 투명 색상 픽셀을 마스크한다.
    dcTemp.BitBlt(0, 0, ptSize.x, ptSize.y, &dcBack, 0, 0, SRCAND);    
    // 목적지 DC상에서 배경색과 비트맵을 XOR 연산한다.
    dcMem.BitBlt(0, 0, ptSize.x, ptSize.y, &dcTemp, 0, 0, SRCPAINT);
    // 스크린에 목적지를 복사한다.
    pDC->BitBlt(xStart, yStart, ptSize.x, ptSize.y, &dcMem, 0, 0, SRCCOPY);
    // 보내진 비트맵으로 원래 비트맵을 대체한다.
    dcTemp.BitBlt(0, 0, ptSize.x, ptSize.y, &dcSave, 0, 0, SRCCOPY);
    // 메모리 비트맵을 리셋시킨다.
    dcBack.SelectObject(pbmBackOld);
    dcObject.SelectObject(pbmObjectOld);
    dcMem.SelectObject(pbmMemOld);
    dcSave.SelectObject(pbmSaveOld);
    // 메모리 DC와 비트맵 객체들은 자동으로 삭제된다.
}

Posted by gsi
: