对话框方式,绘图超出界面范围,点击滚动条显示,不能显示超出范围且图乱了?

vc8fans 2018-02-07 10:44:35
对话框方式,绘图超出界面范围,点击滚动条显示,不能显示超出范围且图乱了?
如果是文档模式就没有问题,, 是啥原因??
...全文
1337 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
vc8fans 2018-02-21
  • 打赏
  • 举报
回复
谢谢各位,以上方法均不行,已经实验可行方法是,在对话框直接继承文档,视图 类, 其他方法肯定不行,
xiaohuh421 2018-02-09
  • 打赏
  • 举报
回复
基类的onpaint函数不能随便省掉哟
schlafenhamster 2018-02-08
  • 打赏
  • 举报
回复
ON_MESSAGE(WM_PAINT, OnMyPaint) afx_msg void OnMyPaint(WPARAM wParam, LPARAM lParam);
schlafenhamster 2018-02-08
  • 打赏
  • 举报
回复
m_Sourcex, m_Sourcey; 的使用

//Replace OnPaint()
void CScrollBitmapDlg::OnMyPaint(WPARAM wParam, LPARAM lParam)
{
	if (IsIconic())
	{
		CPaintDC dc(this);
		SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
		
		// Center icon in client rectangle
		int cxIcon = GetSystemMetrics(SM_CXICON);
		int cyIcon = GetSystemMetrics(SM_CYICON);
		CRect rect;
		GetClientRect(&rect);
		int x = (rect.Width() - cxIcon + 1) / 2;
		int y = (rect.Height() - cyIcon + 1) / 2;
		
		// Draw the icon
		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{	
		if(wParam)
		{// paint to memDC
			CDC *pDC=CDC::FromHandle((HDC)wParam);
			pDC->BitBlt(m_rcPicture.left,m_rcPicture.top,m_rcPicture.Width(),
						m_rcPicture.Height(),&m_dcMem, m_Sourcex, m_Sourcey,SRCCOPY);
		}
		else
		{// typical way painting in dialog.
			CPaintDC dc(this);
			m_Pic.Invalidate(FALSE);// do not erase background!
			dc.BitBlt(m_rcPicture.left,m_rcPicture.top,m_rcPicture.Width(),
					  m_rcPicture.Height(),&m_dcMem, m_Sourcex, m_Sourcey,SRCCOPY);
// others
			CDialog::OnPaint();
		}
	}
}
vc8fans 2018-02-08
  • 打赏
  • 举报
回复
试了,好像与滚动条没关系,找了一些例子好像都不行???问题到底在那里????
zgl7903 2018-02-07
  • 打赏
  • 举报
回复
绘制时 使用 GetScrollPos 获取起始坐标位置
schlafenhamster 2018-02-07
  • 打赏
  • 举报
回复
对话框 自带的 滚动条, 还是 另加的 滚动条 ?
schlafenhamster 2018-02-07
  • 打赏
  • 举报
回复
.h int m_Sourcex, m_Sourcey; CScrollBar m_vBar; CScrollBar m_hBar;

//
void CScrollBitmapDlg::OnVScroll(UINT nSBCode,UINT nPos,CScrollBar *pScrollBar) 
{// TODO: Add your message handler code here and/or call default
// for focus not jumpping
	GetDlgItem(IDOK)->SetFocus();
// scrolling
	switch (nSBCode)
	{
	case SB_LINEUP:
	case SB_PAGEUP:
		if(m_Sourcey >=10) m_Sourcey -= 10;
		else			 m_Sourcey  = 0;
		break;
	case SB_LINEDOWN:
	case SB_PAGEDOWN:
		if((m_Sourcey+m_rcPicture.Height()+10)<m_bmInfo.bmHeight)
			m_Sourcey += 10;
		else
			m_Sourcey  = m_bmInfo.bmHeight -m_rcPicture.Height();
		break;
	case SB_TOP:
		m_Sourcey = 0;
		break;
	case SB_BOTTOM:
		m_Sourcey = INT_MAX;
		break;
	case SB_THUMBTRACK:
		m_Sourcey = nPos;
		break;
	default:
//		afxDump << nSBCode << "=SB_ENDSCROLL\n";
		break;
	}
	m_vBar.SetScrollPos(m_Sourcey);
	InvalidateRect(&m_rcPicture,FALSE);
//	CDialog::OnVScroll(nSBCode, nPos, pScrollBar);
}
//
void CScrollBitmapDlg::OnHScroll(UINT nSBCode,UINT nPos,CScrollBar *pScrollBar) 
{// TODO: Add your message handler code here and/or call default
// for focus not jumpping
	GetDlgItem(IDOK)->SetFocus();
// scrolling
	switch (nSBCode)
	{
	case SB_LINELEFT:
	case SB_PAGELEFT:
		if(m_Sourcex >=10) m_Sourcex -= 10;
		else			   m_Sourcex  = 0;
		break;
	case SB_LINERIGHT:
	case SB_PAGERIGHT:
		if((m_Sourcex+m_rcPicture.Width()+10)<m_bmInfo.bmWidth)
			m_Sourcex += 10;
		else
			m_Sourcex  = m_bmInfo.bmWidth -m_rcPicture.Width();
		break;
	case SB_TOP:
		m_Sourcex = 0;
		break;
	case SB_BOTTOM:
		m_Sourcex = INT_MAX;
		break;
	case SB_THUMBTRACK:
		m_Sourcex= nPos;
		break;
	default:
//		afxDump << nSBCode << "=SB_ENDSCROLL\n";
		break;
	}	
//
	m_hBar.SetScrollPos(m_Sourcex);
	InvalidateRect(&m_rcPicture,FALSE);
//	CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
}
vc8fans 2018-02-07
  • 打赏
  • 举报
回复
另加的 滚动条 , 滚动时候,图形乱了,,,你不是在对话框绘图超过 对话框界面时候,,超过内存了?
grf9527 2018-02-07
  • 打赏
  • 举报
回复
建议先把话说清楚,把使用的类说清楚,把响应函数说清楚

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧