VS2013 MFC Windows 程序设计之窗口滚动条 他对,坚持,坚持,就对了。

来源:互联网 发布:java stackofinteger 编辑:程序博客网 时间:2024/05/17 04:37

1.新建一个空项目,设置属性:MFC 的使用:在静态库中使用 MFC字符集:使用 Unic http:// ode 字符集普通工作集:Windows XP

2.新建一个头文件和原文件。

**********************************************图片分割线************************************************

#include <afxwin.h>#include "demo.h"

**********************************************图片分割线************************************************


class CMyWinApp : public CWinApp{};class CMyFrameWnd : public CFrameWnd{};

**********************************************图片分割线************************************************


**********************************************图片分割线************************************************


this->m_pMainWnd = new CMyFrameWnd;this->m_pMainWnd->ShowWindow(this->m_nCmdShow);this->m_pMainWnd->UpdateWindow();return 0;

**********************************************图片分割线************************************************

public:CMyFrameWnd();
**********************************************图片分割线************************************************

this->Create(NULL, TEXT("Demo"), WS_OVERLAPPEDWINDOW);

CMyWinApp app;
在demo.cpp中InitInstance函数返回值改return TRUE;编译,运行。
**********************************************图片分割线************************************************

**********************************************图片分割线************************************************

#define MAXLINE 100#define LINESIZE 15//这里图中是错误的,没有;

**********************************************图片分割线************************************************

for (int i=0; i < MAXLINE; ++i){dc.TextOut(0, i*LINESIZE, TEXT("Hello"),5);}

**********************************************图片分割线************************************************

TCHAR szBuffer[1024];for (int i=0; i < MAXLINE; ++i){_sntprintf(szBuffer, 1024,TEXT("Hello %d"), i);//这里图中是错误的,应该是,不是.dc.TextOut(0, i*LINESIZE, szBuffer, lstrlen(szBuffer));<pre name="code" class="cpp">//这里图中是错误的,少了)和出现这个警告_CRT_SECURE_NO_WARNINGS(解决办法:<span style="color: rgb(51, 51, 51); font-family: Arial; font-size: 14px; line-height: 26px;">右击工程 -- 属性 -- 配置属性 -- C/C++  -- 命令行--<span style="color: rgb(51, 51, 51); font-family: Arial; font-size: 14px; line-height: 26px;">命令行增加 /D _CRT_SECURE_NO_WARNINGS</span></span>)
}

**********************************************图片分割线************************************************


表达式还是从零开始的,所以要+1。
**********************************************图片分割线************************************************


protected:int m_nVScrollPos;//滚动条不回去。int m_nViewHeight;//所有要显式数据的高度。int m_nVPageSize;//即窗口中显示部分,看的见的部分。
**********************************************图片分割线************************************************


**********************************************图片分割线************************************************

m_nViewHeight = LINESIZE * MAXLINE;m_nVScrollPos = 0;
**********************************************图片分割线************************************************

每当窗口发生改变。

**********************************************图片分割线************************************************

int nVScrollMax =0;m_nVPageSize = 0;//cy表示窗口改变以后的高度,cx表示窗口改变以后的宽度。if (cy < m_nViewHeight){nVScrollMax = m_nViewHeight - 1;m_nVPageSize = cy;//取一个最小值m_nVScrollPos = min(m_nVScrollPos, m_nViewHeight - m_nVPageSize - 1);}SCROLLINFO si;si.fMask = SIF_PAGE | SIF_RANGE | SIF_POS;//没有标志下面的就不起作用。si.nMin = 0;si.nMax = nVScrollMax;si.nPos = m_nVScrollPos;si.nPage = m_nVPageSize;this->SetScrollInfo(SB_VERT, &si, TRUE);
**********************************************图片分割线************************************************

int nDelta = 0;switch (nSBCode){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:return;}if (nDelta != 0){m_nVScrollPos = m_nVScrollPos+nDelta;SetScrollPos(SB_VERT, m_nVScrollPos, TRUE);ScrollWindow(0, -nDelta);//第四步}

**********************************************图片分割线************************************************


dc.SetWindowOrg(0, m_nVScrollPos);



0 0