none
기존 윈도우프로그램밍과 메트로스타일 프로그램 차이에 관해서 질문올립니다. RRS feed

  • 질문

  • 안녕하세요 윈도우8 메트로 스타일 개발할려고 하는데

    메트로 스타일 프로그램밍 개념을 알고 싶은데 어디를 참조해야 하는지 모르겠습니다.

    기존 윈도우 프로그램은 메세지 방식으로

    CreateWindow 를 하고

    WinProc {

    WM_PAINT :

       OnDraw();

       break;

    WM_MOUSELBUTTONDOWN :     

       OnLButtonDown();

    break;

    }

    이런 방식으로 흘러갑니다.

    Metro App 에서는 XAML 로 UI를 작성

    <Grid>

        <Button x:Name="Test1" Click="MyClicked"/>

    </Grid> 

    .cpp

    void MainPage::MyClicked(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
    {
     printf("abcd");
    }

    이렇게 하는것 같습니다.

    // 여기서 질문을 할려고 합니다.

    그런데 메트로 스타일에서는 OnDraw를 어디서 하는지 모르겠습니다.

    Button 이나 기존 컨트롤 같은것은 자체적으로 처리를 한다 하지만

    커스텀 드로우 즉 비트맵을 작성하고 해당 되는 부분만 Invalidate하고 싶습니다.

    다시말해서 메트로 스타일에서

    1. CustomDraw 를 하기 위해서는 Canvas, Panel, Image 를 사용해야 하는지 ?

    2.  위의 1번에서 뷰와 같은 객체의 OnDraw(Platform::Object^ sender) ? 같은것은 없는지? 

    3. 입력장치의 이벤트를 받고 적절한 수정, 행동을 한다음 뷰와 같은 객체에 부분 Update ==> Invalidate 가 아니라 InvalidateRect API 는 있는지 ?

    요렇게 알고 싶습니다.

    아니면 이러한 개념을 알고 싶으면 msdn 어디를 봐야하는지 알려주시면 감사하겠습니다. 

      

    • 이동됨 Jina Lee 2012년 10월 23일 화요일 오전 7:25 (이전 위치:Windows 스토어 앱)
    2012년 9월 4일 화요일 오전 11:13

답변

  • 말씀하시는 것처럼, (예전의 메트로 스타일)윈도우 스토어 스타일의 응용 프로그램은 기존의 전통적인 윈도우 프로그램과 다릅니다.

    우선, 컨트롤의 윈도우 핸들이 없습니다. Win32 응용 프로그램은 모든 윈도우 및 그 안의 컨트롤들(예, Listbox)이 윈도우 핸들을 가지고 있지만 윈도우 스토어 스타일의 응용 프로그램은 '창'의 역할만 하는 윈도우만 핸들을 가지고 있을 뿐 내부의 기본 컨트롤들은 모두 윈도우가 아닙니다.

    말씀하신, WM_PAINT 같은 경우에는 윈도우 스토어 스타일의 응용 프로그램에서는 제공되지 않습니다. 이에 대해서는 다음의 글에서 질문/답변이 되어 있습니다.

    How to draw on screen for Windows Metro Style Apps in C#?
    ; http://stackoverflow.com/questions/8099466/how-to-draw-on-screen-for-windows-metro-style-apps-in-c

    그래서, 1번 질문의 답은 Canvas 와 같은 컨트롤을 사용해야 하고, 2번은 없고, 3번은 Invalidate 류의 API 역시 canvas 등에서만 통용되는 것입니다.

    전체적인 개념을 알고 싶다면, 우선 WPF 에 관한 책을 보실 것을 추천합니다. 결국 WPF 의 응용 프로그램 스타일이 Windows Phone, Windows Store App 에 이어졌기 때문입니다. (참고로, WPF에는 WM_PAINT에 해당하는 OnRender 가 제공되긴 합니다만.)

    • 답변으로 표시됨 albert.kay69 2012년 9월 6일 목요일 오전 12:49
    2012년 9월 5일 수요일 오후 1:54

모든 응답

  • 말씀하시는 것처럼, (예전의 메트로 스타일)윈도우 스토어 스타일의 응용 프로그램은 기존의 전통적인 윈도우 프로그램과 다릅니다.

    우선, 컨트롤의 윈도우 핸들이 없습니다. Win32 응용 프로그램은 모든 윈도우 및 그 안의 컨트롤들(예, Listbox)이 윈도우 핸들을 가지고 있지만 윈도우 스토어 스타일의 응용 프로그램은 '창'의 역할만 하는 윈도우만 핸들을 가지고 있을 뿐 내부의 기본 컨트롤들은 모두 윈도우가 아닙니다.

    말씀하신, WM_PAINT 같은 경우에는 윈도우 스토어 스타일의 응용 프로그램에서는 제공되지 않습니다. 이에 대해서는 다음의 글에서 질문/답변이 되어 있습니다.

    How to draw on screen for Windows Metro Style Apps in C#?
    ; http://stackoverflow.com/questions/8099466/how-to-draw-on-screen-for-windows-metro-style-apps-in-c

    그래서, 1번 질문의 답은 Canvas 와 같은 컨트롤을 사용해야 하고, 2번은 없고, 3번은 Invalidate 류의 API 역시 canvas 등에서만 통용되는 것입니다.

    전체적인 개념을 알고 싶다면, 우선 WPF 에 관한 책을 보실 것을 추천합니다. 결국 WPF 의 응용 프로그램 스타일이 Windows Phone, Windows Store App 에 이어졌기 때문입니다. (참고로, WPF에는 WM_PAINT에 해당하는 OnRender 가 제공되긴 합니다만.)

    • 답변으로 표시됨 albert.kay69 2012년 9월 6일 목요일 오전 12:49
    2012년 9월 5일 수요일 오후 1:54
  • 답변해주셔서 감사합니다.

    c++ 개발자로서 기존 것을 마이그레이션 할려니 개념잡기가 좀 애매한부분이 있네여 ^^

    wpf 에 관한 것을 좀 봐야 할것 같습니다.

    2012년 9월 6일 목요일 오전 12:59