做了一个模拟QQ设置,迅雷设置那样的界面。
先画了一个很大的对话框显示全部内容,然后在初始化中SetWindowPos显示一部分内容,最后通过ScrollWindow滚动窗口实现。
做的过程中遇到了一个问题:对话框上所有控件坐标是基于大对话框(即显示全部内容的对话框),而在程序运行中鼠标移动,点击等事件的坐标是基于当前窗口大小。
解决方案:通过计算滚动条的nPos算出坐标偏移量,然后转换坐标即可。
void CDialog_Set_Show::MyTransformationRect(CRect &rect)
{
rect.top = rect.top - scrollinfo.nPos * 10;
rect.bottom = rect.bottom - scrollinfo.nPos * 10;
}