mfc单元格坐标_MFC基础之制作表格

1a1545bea6b57fdb0a9b029fbaa63dbd.png

accel.h

#define LINESIZE 8

class CMyApp : public CWinApp

{

public:

virtual BOOL InitInstance();

};

class CMainWindow : public CFrameWnd

{

public:

CMainWindow();

protected:

int m_nCellWidth;

int m_nCellHeight;

int m_nRibbonWidth;

int m_nViewWidth;

int m_nViewHeight;

int m_nHScrollPos;

int m_nVScrollPos;

int m_nHPageSize;

int m_nVPageSize;

public:

DECLARE_MESSAGE_MAP()

afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);

afx_msg void OnPaint();

afx_msg void OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);

afx_msg void OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);

afx_msg void OnSize(UINT nType, int cx, int cy);

};

accel.cpp

#include

#include "Accel.h"

CMyApp app;

BOOL CMyApp::InitInstance()

{

// TODO:  在此添加专用代码和/或调用基类

this->m_pMainWnd = new CMainWindow();

this->m_pMainWnd->ShowWindow(this->m_nCmdShow);

this->m_pMainWnd->UpdateWindow();

return TRUE;

//return CWinApp::InitInstance();

}

CMainWindow::CMainWindow()

: m_nCellWidth(0)

, m_nCellHeight(0)

, m_nRibbonWidth(0)

, m_nViewWidth(0)

, m_nViewHeight(0)

{

this->Create(NULL, _T("Accel"), WS_OVERLAPPEDWINDOW | WS_HSCROLL | WS_VSCROLL);

}BEGIN_MESSAGE_MAP(CMainWindow, CFrameWnd)

ON_WM_CREATE()

ON_WM_PAINT()

ON_WM_HSCROLL()

ON_WM_VSCROLL()

ON_WM_SIZE()

END_MESSAGE_MAP()

int CMainWindow::OnCreate(LPCREATESTRUCT lpCreateStruct)

{

if (CFrameWnd::OnCreate(lpCreateStruct) == -1)

return -1;

// TODO:  在此添加您专用的创建代码

CClientDC dc(this);

m_nCellWidth = dc.GetDeviceCaps(LOGPIXELSX);//计算一个英寸为多少像素

m_nCellHeight = dc.GetDeviceCaps(LOGPIXELSY) / 4;//1/4英寸

m_nRibbonWidth = m_nCellWidth / 2;

m_nViewWidth = (26 * m_nCellWidth) + m_nRibbonWidth;

m_nViewHeight = m_nCellHeight * 100;

m_nHScrollPos = m_nVScrollPos = 0;

return 0;

}

void CMainWindow::OnPaint()

{

CPaintDC dc(this); // device context for painting

// TODO:  在此处添加消息处理程序代码

// 不为绘图消息调用 CFrameWnd::OnPaint()

dc.SetWindowOrg(m_nHScrollPos, m_nVScrollPos);

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 i = 0; i < 26; i++)

{

int x = (i * m_nCellWidth) + m_nRibbonWidth;

dc.MoveTo(x, 0);

dc.LineTo(x, m_nViewHeight);

}

dc.SelectObject(pOldPen);

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);

for (int 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));//3D效果

}

for (int 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 nSBCode, UINT nPos, CScrollBar* pScrollBar)

{

// TODO:  在此添加消息处理程序代码和/或调用默认值

int nDelta = 0;

switch (nSBCode)

{

case SB_LINELEFT:

nDelta = -LINESIZE;

break;

case SB_LINERIGHT:

nDelta = LINESIZE;

break;

case SB_PAGELEFT:

nDelta = -m_nHPageSize;

break;

case SB_PAGERIGHT:

nDelta = m_nHPageSize;

break;

case SB_THUMBTRACK:

nDelta = (int)nPos - m_nHScrollPos;

break;

default:

break;

}

if (nDelta != 0)

{

m_nHScrollPos += nDelta;

SetScrollPos(SB_HORZ, m_nHScrollPos, TRUE);

ScrollWindow(-nDelta, 0);

}

CFrameWnd::OnHScroll(nSBCode, nPos, pScrollBar);

}

void CMainWindow::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)

{

// TODO:  在此添加消息处理程序代码和/或调用默认值

int nDelta = 0;

switch (nSBCode)

{

case SB_LINEDOWN :

nDelta = LINESIZE;

break;

case SB_LINEUP:

nDelta = -LINESIZE;

break;

case SB_THUMBTRACK:

nDelta = (int)nPos -  m_nVScrollPos;

break;

case SB_PAGEUP:

nDelta = -m_nVPageSize;

break;

case SB_PAGEDOWN:

nDelta = m_nVPageSize;

break;

default:

break;

}

if (nDelta != 0)

{

m_nVScrollPos += nDelta;

SetScrollPos(SB_VERT, m_nVScrollPos, TRUE);

ScrollWindow(0, -nDelta);

}

CFrameWnd::OnVScroll(nSBCode, nPos, pScrollBar);

}

void CMainWindow::OnSize(UINT nType, int cx, int cy)

{

CFrameWnd::OnSize(nType, cx, cy);

// TODO:  在此处添加消息处理程序代码

int nHScrollMax = 0;

m_nHPageSize = 0;

if (cx < m_nViewWidth)

{

m_nHPageSize = cx;

nHScrollMax = m_nViewWidth - 1;

}

SCROLLINFO si;

si.fMask = SIF_PAGE | SIF_RANGE | SIF_POS;

si.nMin = 0;

si.nMax = nHScrollMax - 1;

si.nPos = m_nHScrollPos;

si.nPage = m_nHPageSize;

SetScrollInfo(SB_HORZ, &si, TRUE);

int nVScrollMax = 0;

m_nVPageSize = 0;

if (cy < m_nViewHeight)

{

nVScrollMax = m_nViewHeight - 1;

m_nVPageSize = cy;

}

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);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值