int CMainWindow::OnCreate (LPCREATESTRUCT lpCreateStruct)
{
if (CFrameWnd::OnCreate (lpCreateStruct) == -1)
return -1;
//
// Initialize internal width and height values based on screen metrics.
//
CClientDC dc (this);
m_nCellWidth = dc.GetDeviceCaps (LOGPIXELSX);
m_nCellHeight = dc.GetDeviceCaps (LOGPIXELSY) / 4;
m_nRibbonWidth = m_nCellWidth / 2;
m_nViewWidth = (26 * m_nCellWidth) + m_nRibbonWidth;
m_nViewHeight = m_nCellHeight * 200;
return 0;
}
void CMainWindow::OnSize (UINT nType, int cx, int cy)
{
CFrameWnd::OnSize (nType, cx, cy);
//
// Set the horizontal scrolling parameters.
//
int nHScrollMax = 0;
m_nHScrollPos = m_nHPageSize = 0;
if (cx < m_nViewWidth) {
nHScrollMax = m_nViewWidth - 1;
m_nHPageSize = cx;
m_nHScrollPos = min (m_nHScrollPos, m_nViewWidth -
m_nHPageSize - 1);
}
SCROLLINFO si;
si.fMask = SIF_PAGE | SIF_RANGE | SIF_POS;
si.nMin = 0;
si.nMax = nHScrollMax;
si.nPos = m_nHScrollPos;
si.nPage = m_nHPageSize;
SetScrollInfo (SB_HORZ, &si, TRUE);
//
// Set the vertical scrolling parameters.
//
int nVScrollMax = 0;
m_nVScrollPos = m_nVPageSize = 0;
if (cy < m_nViewHeight) {
nVScrollMax = m_nViewHeight - 1;
m_nVPageSize = cy;
m_nVScrollPos = min (m_nVScrollPos, m_nViewHeight -
m_nVPageSize - 1);
}
si.fMask = SIF_PAGE | SIF_RANGE | SIF_POS;
si.nMin = 0;
si.nMax = nVScrollMax;
si.nPos = m_nVScrollPos;
si.nPage = m_nVPageSize;
SetScrollInfo (SB_VERT, &si, TRUE);
}
void CMainWindow::OnPaint ()
{
CPaintDC dc (this);
//
// Set the window origin to reflect the current scroll positions.
//
dc.SetWindowOrg (m_nHScrollPos, m_nVScrollPos);
//
// Draw the grid lines.
//
CPen pen (PS_SOLID, 0, RGB (192, 192, 192));
CPen* pOldPen = dc.SelectObject (&pen);
for (int i=0; i<99; i++) {
int y = (i * m_nCellHeight) + m_nCellHeight;
dc.MoveTo (0, y);
dc.LineTo (m_nViewWidth, y);
}
for (int j=0; j<26; j++) {
int x = (j * m_nCellWidth) + m_nRibbonWidth;
dc.MoveTo (x, 0);
dc.LineTo (x, m_nViewHeight);
}
dc.SelectObject (pOldPen);
//
// Draw the bodies of the rows and the column headers.
//
CBrush brush;
brush.CreateStockObject (LTGRAY_BRUSH);
CRect rcTop (0, 0, m_nViewWidth, m_nCellHeight);
dc.FillRect (rcTop, &brush);
CRect rcLeft (0, 0, m_nRibbonWidth, m_nViewHeight);
dc.FillRect (rcLeft, &brush);
dc.MoveTo (0, m_nCellHeight);
dc.LineTo (m_nViewWidth, m_nCellHeight);
dc.MoveTo (m_nRibbonWidth, 0);
dc.LineTo (m_nRibbonWidth, m_nViewHeight);
dc.SetBkMode (TRANSPARENT);
//
// Add numbers and button outlines to the row headers.
//
for (i=0; i<99; i++) {
int y = (i * m_nCellHeight) + m_nCellHeight;
dc.MoveTo (0, y);
dc.LineTo (m_nRibbonWidth, y);
CString string;
string.Format (_T ("%d"), i + 1);
CRect rect (0, y, m_nRibbonWidth, y + m_nCellHeight);
dc.DrawText (string, &rect, DT_SINGLELINE |
DT_CENTER | DT_VCENTER);
rect.top++;
dc.Draw3dRect (rect, RGB (255, 255, 255),
RGB (128, 128, 128));
}
//
// Add letters and button outlines to the column headers.
//
for (j=0; j<26; j++) {
int x = (j * m_nCellWidth) + m_nRibbonWidth;
dc.MoveTo (x, 0);
dc.LineTo (x, m_nCellHeight);
CString string;
string.Format (_T ("%c"), j + 'A');
CRect rect (x, 0, x + m_nCellWidth, m_nCellHeight);
dc.DrawText (string, &rect, DT_SINGLELINE |
DT_CENTER | DT_VCENTER);
rect.left++;
dc.Draw3dRect (rect, RGB (255, 255, 255),
RGB (128, 128, 128));
}
}
void CMainWindow::OnHScroll (UINT nCode, UINT nPos, CScrollBar* pScrollBar)
{
int nDelta;
//
// Compute the horizontal scroll distance, or "delta."
//
switch (nCode) {
case SB_LINELEFT:
nDelta = -LINESIZE;
break;
case SB_PAGELEFT:
nDelta = -m_nHPageSize;
break;
case SB_THUMBTRACK:
nDelta = (int) nPos - m_nHScrollPos;
break;
case SB_PAGERIGHT:
nDelta = m_nHPageSize;
break;
case SB_LINERIGHT:
nDelta = LINESIZE;
break;
default: // Ignore other scroll bar messages
return;
}
//
// Adjust the delta if adding it to the current scroll position would
// cause an underrun or overrun.
//
int nScrollPos = m_nHScrollPos + nDelta;
int nMaxPos = m_nViewWidth - m_nHPageSize;
if (nScrollPos < 0)
nDelta = -m_nHScrollPos;
else if (nScrollPos > nMaxPos)
nDelta = nMaxPos - m_nHScrollPos;
//
// Update the scroll position and scroll the window.
//
if (nDelta != 0) {
m_nHScrollPos += nDelta;
SetScrollPos (SB_HORZ, m_nHScrollPos, TRUE);
ScrollWindow (-nDelta, 0);
}
}
void CMainWindow::OnVScroll (UINT nCode, UINT nPos, CScrollBar* pScrollBar)
{
int nDelta;
//
// Compute the vertical scroll distance, or "delta."
//
switch (nCode) {
case SB_LINEUP:
nDelta = -LINESIZE;
break;
case SB_PAGEUP:
nDelta = -m_nVPageSize;
break;
case SB_THUMBTRACK:
nDelta = (int) nPos - m_nVScrollPos;
break;
case SB_PAGEDOWN:
nDelta = m_nVPageSize;
break;
case SB_LINEDOWN:
nDelta = LINESIZE;
break;
default: // Ignore other scroll bar messages
return;
}
//
// Adjust the delta if adding it to the current scroll position would
// cause an underrun or overrun.
//
int nScrollPos = m_nVScrollPos + nDelta;
int nMaxPos = m_nViewHeight - m_nVPageSize;
if (nScrollPos < 0)
nDelta = -m_nVScrollPos;
else if (nScrollPos > nMaxPos)
nDelta = nMaxPos - m_nVScrollPos;
//
// Update the scroll position and scroll the window.
//
if (nDelta != 0) {
m_nVScrollPos += nDelta;
SetScrollPos (SB_VERT, m_nVScrollPos, TRUE);
ScrollWindow (0, -nDelta);
}
}
{
if (CFrameWnd::OnCreate (lpCreateStruct) == -1)
return -1;
//
// Initialize internal width and height values based on screen metrics.
//
CClientDC dc (this);
m_nCellWidth = dc.GetDeviceCaps (LOGPIXELSX);
m_nCellHeight = dc.GetDeviceCaps (LOGPIXELSY) / 4;
m_nRibbonWidth = m_nCellWidth / 2;
m_nViewWidth = (26 * m_nCellWidth) + m_nRibbonWidth;
m_nViewHeight = m_nCellHeight * 200;
return 0;
}
void CMainWindow::OnSize (UINT nType, int cx, int cy)
{
CFrameWnd::OnSize (nType, cx, cy);
//
// Set the horizontal scrolling parameters.
//
int nHScrollMax = 0;
m_nHScrollPos = m_nHPageSize = 0;
if (cx < m_nViewWidth) {
nHScrollMax = m_nViewWidth - 1;
m_nHPageSize = cx;
m_nHScrollPos = min (m_nHScrollPos, m_nViewWidth -
m_nHPageSize - 1);
}
SCROLLINFO si;
si.fMask = SIF_PAGE | SIF_RANGE | SIF_POS;
si.nMin = 0;
si.nMax = nHScrollMax;
si.nPos = m_nHScrollPos;
si.nPage = m_nHPageSize;
SetScrollInfo (SB_HORZ, &si, TRUE);
//
// Set the vertical scrolling parameters.
//
int nVScrollMax = 0;
m_nVScrollPos = m_nVPageSize = 0;
if (cy < m_nViewHeight) {
nVScrollMax = m_nViewHeight - 1;
m_nVPageSize = cy;
m_nVScrollPos = min (m_nVScrollPos, m_nViewHeight -
m_nVPageSize - 1);
}
si.fMask = SIF_PAGE | SIF_RANGE | SIF_POS;
si.nMin = 0;
si.nMax = nVScrollMax;
si.nPos = m_nVScrollPos;
si.nPage = m_nVPageSize;
SetScrollInfo (SB_VERT, &si, TRUE);
}
void CMainWindow::OnPaint ()
{
CPaintDC dc (this);
//
// Set the window origin to reflect the current scroll positions.
//
dc.SetWindowOrg (m_nHScrollPos, m_nVScrollPos);
//
// Draw the grid lines.
//
CPen pen (PS_SOLID, 0, RGB (192, 192, 192));
CPen* pOldPen = dc.SelectObject (&pen);
for (int i=0; i<99; i++) {
int y = (i * m_nCellHeight) + m_nCellHeight;
dc.MoveTo (0, y);
dc.LineTo (m_nViewWidth, y);
}
for (int j=0; j<26; j++) {
int x = (j * m_nCellWidth) + m_nRibbonWidth;
dc.MoveTo (x, 0);
dc.LineTo (x, m_nViewHeight);
}
dc.SelectObject (pOldPen);
//
// Draw the bodies of the rows and the column headers.
//
CBrush brush;
brush.CreateStockObject (LTGRAY_BRUSH);
CRect rcTop (0, 0, m_nViewWidth, m_nCellHeight);
dc.FillRect (rcTop, &brush);
CRect rcLeft (0, 0, m_nRibbonWidth, m_nViewHeight);
dc.FillRect (rcLeft, &brush);
dc.MoveTo (0, m_nCellHeight);
dc.LineTo (m_nViewWidth, m_nCellHeight);
dc.MoveTo (m_nRibbonWidth, 0);
dc.LineTo (m_nRibbonWidth, m_nViewHeight);
dc.SetBkMode (TRANSPARENT);
//
// Add numbers and button outlines to the row headers.
//
for (i=0; i<99; i++) {
int y = (i * m_nCellHeight) + m_nCellHeight;
dc.MoveTo (0, y);
dc.LineTo (m_nRibbonWidth, y);
CString string;
string.Format (_T ("%d"), i + 1);
CRect rect (0, y, m_nRibbonWidth, y + m_nCellHeight);
dc.DrawText (string, &rect, DT_SINGLELINE |
DT_CENTER | DT_VCENTER);
rect.top++;
dc.Draw3dRect (rect, RGB (255, 255, 255),
RGB (128, 128, 128));
}
//
// Add letters and button outlines to the column headers.
//
for (j=0; j<26; j++) {
int x = (j * m_nCellWidth) + m_nRibbonWidth;
dc.MoveTo (x, 0);
dc.LineTo (x, m_nCellHeight);
CString string;
string.Format (_T ("%c"), j + 'A');
CRect rect (x, 0, x + m_nCellWidth, m_nCellHeight);
dc.DrawText (string, &rect, DT_SINGLELINE |
DT_CENTER | DT_VCENTER);
rect.left++;
dc.Draw3dRect (rect, RGB (255, 255, 255),
RGB (128, 128, 128));
}
}
void CMainWindow::OnHScroll (UINT nCode, UINT nPos, CScrollBar* pScrollBar)
{
int nDelta;
//
// Compute the horizontal scroll distance, or "delta."
//
switch (nCode) {
case SB_LINELEFT:
nDelta = -LINESIZE;
break;
case SB_PAGELEFT:
nDelta = -m_nHPageSize;
break;
case SB_THUMBTRACK:
nDelta = (int) nPos - m_nHScrollPos;
break;
case SB_PAGERIGHT:
nDelta = m_nHPageSize;
break;
case SB_LINERIGHT:
nDelta = LINESIZE;
break;
default: // Ignore other scroll bar messages
return;
}
//
// Adjust the delta if adding it to the current scroll position would
// cause an underrun or overrun.
//
int nScrollPos = m_nHScrollPos + nDelta;
int nMaxPos = m_nViewWidth - m_nHPageSize;
if (nScrollPos < 0)
nDelta = -m_nHScrollPos;
else if (nScrollPos > nMaxPos)
nDelta = nMaxPos - m_nHScrollPos;
//
// Update the scroll position and scroll the window.
//
if (nDelta != 0) {
m_nHScrollPos += nDelta;
SetScrollPos (SB_HORZ, m_nHScrollPos, TRUE);
ScrollWindow (-nDelta, 0);
}
}
void CMainWindow::OnVScroll (UINT nCode, UINT nPos, CScrollBar* pScrollBar)
{
int nDelta;
//
// Compute the vertical scroll distance, or "delta."
//
switch (nCode) {
case SB_LINEUP:
nDelta = -LINESIZE;
break;
case SB_PAGEUP:
nDelta = -m_nVPageSize;
break;
case SB_THUMBTRACK:
nDelta = (int) nPos - m_nVScrollPos;
break;
case SB_PAGEDOWN:
nDelta = m_nVPageSize;
break;
case SB_LINEDOWN:
nDelta = LINESIZE;
break;
default: // Ignore other scroll bar messages
return;
}
//
// Adjust the delta if adding it to the current scroll position would
// cause an underrun or overrun.
//
int nScrollPos = m_nVScrollPos + nDelta;
int nMaxPos = m_nViewHeight - m_nVPageSize;
if (nScrollPos < 0)
nDelta = -m_nVScrollPos;
else if (nScrollPos > nMaxPos)
nDelta = nMaxPos - m_nVScrollPos;
//
// Update the scroll position and scroll the window.
//
if (nDelta != 0) {
m_nVScrollPos += nDelta;
SetScrollPos (SB_VERT, m_nVScrollPos, TRUE);
ScrollWindow (0, -nDelta);
}
}
'Windows > MFC' 카테고리의 다른 글
Windows Message Handling - Part 1 (0) | 2013.10.02 |
---|---|
Context Menu Drawing (컨텍스트 메뉴에 그리기) (0) | 2013.10.02 |
스크롤바-기초05 (0) | 2013.10.02 |
GetProcessMemoryInfo (현재 프로그램에 메모리 점유율 알기) (0) | 2013.10.02 |
reading mp3 id3 tag (mp3 테그 읽기) (0) | 2013.10.02 |