GSI

Google
 

테스트를 위해서 프로젝트를 생성한다.
응용 프로그램 종류를 단일 문서로 설정하고 기본 클래스는 CView로 설정합니다.
사용자 삽입 이미지

기본 프로젝트는 아래와 같습니다.
사용자 삽입 이미지

위의 응용 프로그램에 새로운 CView를 추가해 보겠습니다.
CDialog, CStatic 등의 컨트롤은 Create() 등의 함수를 통해서 생성하고 처리를 하게 되는데요.
CView는 Create()로 하게 되면 삭제 하는데 오류가 생기거나 안되더라구요.
그래서 CView는 아래의 코드와 같이 CCreateContext를 사용해서 처리 합니다.

CWnd* pFrameWnd = this;
CCreateContext pContext;
pContext.m_pCurrentDoc = new CDummyDoc();
pContext.m_pNewViewClass = RUNTIME_CLASS(CPixelMapView);
m_pPixelMapView = (CPixelMapView *) ((CFrameWnd*)pFrameWnd)->CreateView(&pContext);
ASSERT(m_pPixelMapView);
m_pPixelMapView->ShowWindow(SW_NORMAL);
m_pPixelMapView->MoveWindow( 20, 20, 100, 100 );

1. CDummyDoc 클래스를 생성합니다.
2. CPixelMapView 클래스를 생성합니다.
3. CInsertViewView 부모 클래스에 헤더를 선언합니다.
   - #include "DummyDoc.h"
   - #include "PixelMapView.h"
4. 클래스 내부에 View 접근을 위한 포인터 변수를 선언합니다.
   - CPixelMapView* m_pPixelMapView;
5. CPixelMapView 를 등록하기 위해서 OnCreate()를 선언합니다.

int CInsertViewView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
 if (CView::OnCreate(lpCreateStruct) == -1)
  return -1;

 CWnd* pFrameWnd = this;
 CCreateContext pContext;
 pContext.m_pCurrentDoc = new CDummyDoc();
 pContext.m_pNewViewClass = RUNTIME_CLASS(CPixelMapView);
 m_pPixelMapView = (CPixelMapView *) ((CFrameWnd*)pFrameWnd)->CreateView(&pContext);
 ASSERT(m_pPixelMapView);
 m_pPixelMapView->ShowWindow(SW_NORMAL);
 m_pPixelMapView->MoveWindow( 20, 20, 100, 100 );

 return 0;
}

추가를 하고 나면 아래와 같이 화면이 나오게 됩니다.
사용자 삽입 이미지

이후 작업은 입맛에 맞게 ^^
Posted by gsi
:

 

1박 2일을 제 고향인 거창에서 찍었다네요 ^^..
왠지 모를 이 친근함 ^^..
Posted by gsi
:

Google
 

몇달 전부터 Scroll View 페이지를 응용한 개발툴을 몇개 작성을 하게 되었네요.
CView 보다 더 복잡하고, 스크롤이 들어 가면서 포지션 정보를 무시할 수 없더군요.

가장 귀찮게 여겨 지는 것은 Client Area 부분의 마우스가 Down, Up Move 등의 행위를 할때
항상 ScrollToPosition()을 달고 다녀야 한다는게 너무나 맘에 안들었습니다.

마우스의 위치 좌표가 왜 스크롤된 위치가 나오지 않고 현재 보이는 화면 영역의 상대 값이 나오는지.
정말 귀찮습니다.

그래서 CScrollView 클래스에 CView를 삽입 하고,
TotalSize 만큼 CView를 확장해서 처리를 하게 되었습니다.

스크롤 정보는 CSCrollView로 보내야 되고,
화면의 마우스 처리는 CView가 담당하게 처리 하였죠.

근데 .. 이렇게 하니 마우스의 좌표가 스크롤된후의 CView의 위치 정보가 보이게 되더군요.
참으로 편합니다. ^^ 그 위치가 스크롤된 화면 위치니까요.

조금더 나아지는 MFC 방법들이 재미나게 느껴 집니다.

요즘은 애매한 컨트롤은 CWnd, CStatic, CView, CDialog 등과 같은 컨트롤을
여러개 겹치면서 다양한 효과를 구현하고 있네요 ^^..

이번에 테스트뷰로 만들고 있는 화면입니다.
사용자 삽입 이미지

이 프로그램의 기능은 휠을 통한 좌우 스크롤 기능과 화면의 픽킹 처리가 CView에서 담당하는게 특징입니다.

배움에 있어서 여러가지 새로운 ms의 기술들과 플렉스 등을 보면서.
MFC의 기술 또한 같이 성장하는거 같습니다.

아.. 이제 자야 겠네요.. @.@.. 몽롱합니다.
Posted by gsi
:

몇주 전 부터 누가 짜놓은 패치 프로그램을 보고 있자니 너무 답답합니다.
물론 그 코드가 잘못되었다기 보다 Win32 의 C 스타일의 코드가 저에게는 너무나 하드 코딩 적이고,
가독성이 떨어지고, 코드 재사용성이 안보이기 때문이죠.

뭐.. 전역 변수가 많고, 코드 몇줄 추가 하면 어디서 모를 에러가 나오고,
XP, Vista 의 디파인된 다른 코드 들을 보면서,

몇 파트는 C#을 사용해서 작성도 하게 되었지요.

근데 레지스트리 등록이나 파일 삭제 등과 같이 여러가지 부분에서
.Net 베이스의 C# 에서는 다르게 짜주는게 별로 안보이는듯 합니다.

OS 별로 짜주어야 할까요?...
제가 잘못 알고 있는건지 궁금하네요..

하지만 가장 좋은건 코드가 간결해 지고 C++의 STL이 있으면서 편해지는거 처름
다양함과 간결함, 많은 메소드를 지원함에 있어서 C#의 매력에 푹 빠지네요 ^^.

이 참에 다 바꿔서 해봐야 할듯 한데..
조금 귀찮아 지기도 하네요 ^^
Posted by gsi
:

[C#] 디자이너 페이지 오류

C# 2008. 3. 20. 11:30 |

form.cs[디자인] 페이지가 아래와 같은 내용으로 표시 되면서 로드 되지 않는 오류가 가끔 있다.
사용자 삽입 이미지
이 내용은 결국 프로그램의 규칙을 알지 못하고 막 짜다 보니 생기게 된 에러입니다. -.-;
하지만 지금도 확실한 에러 내용은 모르겠고, 저 같은 경우는 다음과 같이 해결했습니다.

문제가 생긴 부분은 아래의 코드 부분입니다.
namespace AzitroUpdater
{
    public class UpdateInfo   <--- 여기 클래스가 위치 하면서 오류가 남
    {
        public string UrlHttpPath { get; set; }
        public string UrlDownloadFolder { get; set; }
        public string UrlDownloadFile { get; set; }
    }
    public partial class Form1 : Form
    {
        int curIndex = 0;
        ...................

위의 코드에서 알 수 있듯이 시작하는 클래스가 Form1 인데
그 위에 다른 클래스가 존재 해서 문제가 생기는 거였다.
이 코드를 다른 파일이나 다른 위치로 옮기니 되었다.
Posted by gsi
: