해당 View를 CScrollView로 설정하지 않았다면 스크롤바를 만드는게 곤란하다
CScrollView는 미리 설정을 해줘야하는데 내가 이걸 설정 안하고 코드를 상당부분 진행해서 곤란했는데

해법은 

해당 View의 CView를 CScrollView로 모두 고친 뒤
이 코드를 추가해준다.

<헤더>
==============================================================
protected:
irtual void OnInitialUpdate(); // 생성 후 처음 호출되었습니다. 
================================================================
void CSalePriceDlgFormView::OnInitialUpdate()
{
 CSize sizeTotal;
 // TODO: 이 뷰의 전체 크기를 계산합니다.
 sizeTotal.cx = 1600;
 sizeTotal.cy = 1200;

 SetScrollSizes(MM_TEXT, sizeTotal); // 스크롤 사이즈 설정
}

<헤더>
===========================================================================
public:
virtual void OnDraw(CDC* pDC);      // 이 뷰를 그리기 위해 재정의되었습니다
afx_msg void OnPaint();
===========================================================================
void CSalePriceDlgFormView::OnDraw(CDC* pDC)
{
 /*CPoint pointCursor;
 char text[100];
 GetCursorPos( &pointCursor );
 sprintf(text, "Mouse=%3d, %3d ", pointCursor.x, pointCursor.y);
 pDC->TextOut(5, 15, text, strlen(text)); */
}
void CSalePriceDlgFormView:OnPaint()
{
 CPaintDC dc(this); // device context for painting
 // TODO: 여기에 메시지 처리기 코드를 추가합니다.
 // 그리기 메시지에 대해서는 CScrollView::OnPaint()을(를) 호출하지 마십시오.

 int nVertScroll = GetScrollPos(SB_VERT); // 폭
 int nHorzScroll = GetScrollPos(SB_HORZ); // 높이

}

Posted by 모과이IT
,

 [팁] CSplitterWnd에 아무 윈도우나 넣자 2000-04-29 오전 2:12:47
전상연 번호: 7393  / 읽음:766
안녕하세요. 클럽 개설을 축하드립니다.

화면을 분할하고 싶을 때 MFC라면 당연히 CSplitterWnd를 사용하겠죠?
그런데 CSplitterWnd는 안에 들어가는 윈도우를 만들기 위해서 
CSplitterWnd::CreateView 함수를 호출합니다.

전 이름 때문에 이 함수가 CView를 계승한 클래스에 대해서만 동작하
는 줄 알았었는데 (MFC에서 자동으로 만들어주는 코드도 뷰에 대해서
만 나오기도 하죠) 사실은 CWnd를 계승한 클래스면 모두 동작한답니
다. -_-;

단 조건이 있는데 만들 클래스가 MFC의 동적생성 메카니즘을 지원해
야 한다는거죠. 즉, CRuntimeClass::CreateObject를 사용할 수 있어
야 합니다. 이를 위해서는 class 내부에서는 DECLARE_DYNCREATE나 
DECLARE_SERIAL 매크로를 사용하고, 소스파일에서 
IMPLEMENT_DYNCREATE나 IMPLEMENT_SERIAL 매크로를 사용해주면 됩니
다.

쉽죠?
혹시 다들 아시는거였나요? 제가 며칠전에 알게 되서 다른 분들도 모
르셨을까봐 적어봤습니다. ^^;;
Posted by 모과이IT
,
다이얼로그 기반의 ActiveX Control을 만들어 보겠습니다.

1. Projects에서 "MFC ActiveX ControlWizard" 를 새로 생성합니다. (여기에서 아무런 설정도 해주지 않습니다.)
2. 새로운 다이얼로그 리소스를 하나 추가해주며, 명칭은 IDD_TESTDIALOG로 해주겠습니다.
3. CDialog기반의 CTestDialog 라는 클래스를 추가합니다.
속성중 style은 child로 바꿔 줍니다. 안그러면 화면에 그냥 떠버리더군요.
visible 속성을 체크 합니다. 그래야 나타납니다.
4. CDialogCtrl의 해더 파일에 CTestDialog m_TestDialog 멤버변수를 추가합니다.
물론 #include "TestDialog.h"를 해주는것도 잊으면 안되구요.
5. classwizard를 이용하여 OnCreate(...) 멤버 함수를 추가하며 아래와 같이 소스를 추가해줍니다.

int CTestCtrl::OnCreate(...)
{
...
m_TestDialog.Create(IDD_TESTDIALOG, this);

...
}

6. OnDraw(...) 멤버함수를 수정합니다.
void CTestCtrl::OnDraw(...)
{
CBrush::FromHandle((HBRUSH)GetStockObject(WHITE_BRUSH));
m_TestDialog.MoveWindow(rc.Bounds, TRUE);
}

7. 이제 빌드를 하시면 됩니다. 테스트는 ActiveX Control Test Container 에서 하셔도 되고 웹페이지를 하나 생성해서 하셔도 됩니다.

8. 웹페이지에서의 생성은

사용자 삽입 이미지

이렇게 하시면 됩니다. 그럼 아래와 같이 나옵니다.

여기에서 CLASSID는 xxx.odl 파일에 보시면 가장 아래에 있는 CLSID를 사용하시면 됩니다.

by Redef( http://www.redef.pe.kr )
Posted by 모과이IT
,