'MFC'에 해당되는 글 1건
- 2009/03/10 두 개의 Rich Edit 컨트롤의 수직 스크롤바 동기화시키기
둘 중에 하나라도 수직스크롤바를 동작시키면 다른 하나도 동시에 동작합니다.
CRichEditCtrlEx.h
#pragma once
#include "afxcmn.h"
struct VSCROLL_DATA
{
UINT nSBCode;
UINT nPos;
CScrollBar *pScrollBar;
};
class CRichEditCtrlEx :
public CRichEditCtrl
{
// DECLARE_DYNAMIC(CRichEditCtrlEx)
protected:
DECLARE_MESSAGE_MAP()
public:
CRichEditCtrlEx(void);
~CRichEditCtrlEx(void);
HWND m_pWnd;
CRichEditCtrlEx *m_pSyncScrollEdit;
BOOL m_bManualScroll;
afx_msg void OnVScroll(UINT nSBCode, UINT nPos, CScrollBar *pScrollBar);
};
CRichEditCtrlEx.cpp
#include "StdAfx.h"
#include "RichEditCtrlEx.h"
#define WM_MY_VSCROLL WM_USER + 10
CRichEditCtrlEx::CRichEditCtrlEx(void)
{
m_pWnd = NULL;
m_pSyncScrollEdit = NULL;
m_bManualScroll = FALSE;
}
CRichEditCtrlEx::~CRichEditCtrlEx(void)
{
}
BEGIN_MESSAGE_MAP(CRichEditCtrlEx, CRichEditCtrl)
ON_WM_VSCROLL()
END_MESSAGE_MAP()
//
//
//void CRichEditCtrlEx::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
//{
// // TODO: 여기에 메시지 처리기 코드를 추가 및/또는 기본값을 호출합니다.
//
// CDialog::OnVScroll(nSBCode, nPos, pScrollBar);
//}
void CRichEditCtrlEx::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar *pScrollBar)
{
if(m_pSyncScrollEdit != NULL && m_bManualScroll == FALSE)
{
m_pSyncScrollEdit->m_bManualScroll = TRUE;
m_pSyncScrollEdit->OnVScroll(nSBCode, nPos, pScrollBar);
m_pSyncScrollEdit->m_bManualScroll = FALSE;
}
VSCROLL_DATA* vData = (VSCROLL_DATA*)malloc(sizeof(VSCROLL_DATA));
vData->nPos = nPos;
vData->nSBCode = nSBCode;
vData->pScrollBar = pScrollBar;
::SendMessage(m_pWnd, WM_MY_VSCROLL, (WPARAM)this->GetSafeHwnd(), (LPARAM)vData);
free(vData);
CRichEditCtrl::OnVScroll(nSBCode, nPos, pScrollBar);
}
다이얼로그에서
BOOL CCompareSchemaDialog::OnInitDialog()
{
CDialog::OnInitDialog();
// 스크롤바 동기화
m_srcScript.m_pWnd = this->GetSafeHwnd();
m_tarScript.m_pWnd = this->GetSafeHwnd();
m_srcScript.m_pSyncScrollEdit = &m_tarScript;
m_tarScript.m_pSyncScrollEdit = &m_srcScript;
return TRUE; // 포커스를 컨트롤에 설정하지 않으면 TRUE를 반환합니다.
}



이올린에 북마크하기
Prev
Rss Feed