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

这篇博客介绍了如何在VS2013中使用MFC进行Windows程序设计,特别是关于窗口滚动条的实现。首先,创建一个空项目,设置属性为在静态库中使用MFC,并选择Unicode字符集。接着,博主通过添加头文件和源文件来逐步构建程序。内容中包含多个图片分割线,暗示文章可能包含了详细的步骤截图。

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



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值