建立一个MFC单文档工程,在CMyView::OnCreate()中绘制一个CButton控件然后定义这个按钮的消息处理函数CMyView::OnLButtonDown()
{
CDC* pDC = GetDC(); // 取得视图的设备上下文
pDC->SetWindowOrg(100, 100);
pDC->SetViewportOrg(0, 0); UpdateWindow(); // 刷新视图
}疑问:按照道理按钮应该移动啊,事实上没有动,请教大家我的思路是不是错了,CScrollView的实现原理是什么?我在上面的消息处理函数中调用 pDC->SetMapMode(); 重设映射模式好像没有效果,不管怎么设置都是原来的MM_TEXT映射模式。
{
CDC* pDC = GetDC(); // 取得视图的设备上下文
pDC->SetWindowOrg(100, 100);
pDC->SetViewportOrg(0, 0); UpdateWindow(); // 刷新视图
}疑问:按照道理按钮应该移动啊,事实上没有动,请教大家我的思路是不是错了,CScrollView的实现原理是什么?我在上面的消息处理函数中调用 pDC->SetMapMode(); 重设映射模式好像没有效果,不管怎么设置都是原来的MM_TEXT映射模式。
解决方案 »
- IStream的缓冲问题
- 请教一个mfc activex的问题
- 请教高手,如何在同一打印任务中打印两页不同方向的文档?
- 请教个高效率点的Pixel Shader的算法
- 如何设置ACCESS智能指针?
- 我在用mscomm控件对串口进行发数据时,怎么判断这个数据已经发完了?
- 编写dll,如何将编译后的.h , .dll, .lib文件输出到不同的目录?
- CWinApp::WriteProfileInt函数把值写在哪里
- invalid or corrupt file: duplicate COMDAT '_clash'请问下如果解决这个错误?
- SERVER端接入的客户端对应多个类对象的情况,如何实现?
- 有没有"通过机器码注册的软件"的示例吗?
- 毕业设计
创建一个按钮,但是你的消息响应是WM_LBUTTONDOWN啊,是在View上单击鼠标左键的响应,跟按钮有什么关系呢?
用Invalidate();//试试
1.CMyView::OnLButtonDown()是你的视图的所有左击都触发这个消息。
2.尽管有旁边的滚动轴了,但是滚动轴的代码还是要你自己写的,映射关系要自己建立.
不然,就算你滚动轴不断滚动,还是没有任何反映的。你应该SetScrollSize设定滚动轴大小,通过GetScrollPos得到滚动轴的位置来绘制你整个视图的内容
如果是这样,你在视OnScroll的时候重绘你的按钮,不要用你原来的位置了,应该重新计算位置,用GetScrollPosition获得滚动位置,然后加到你的绘制按钮的位置。
鼠标点下的位置也是一样,将鼠标的point加上滚动位置才是窗口里的位置。
CSize totalSize = CSize(width, height);
SetScrollSizes(MM_TEXT, totalSize);
ResizeParentToFit();
或者别的映射模式
更改了映射模式以后坐标都变了,肯定要更改滚动窗口了。改了以后想让它接着滚估计是不行了。