zoukankan      html  css  js  c++  java
  • 对话框子窗口的滚动

    父类
    void CDlgXXXX::InitUIRes(CString strCatCode)
    {
    	if (NULL == m_pDlgSub_)
    	{
    		m_pDlgSub_ = new CDlgFilterSub(this);
    		m_pDlgSub_->Create(CDlgFilterSub::IDD, this);
    	}
    	
    	m_pDlgSub_->InitUI(strCatCode);
    
    	CRect rtClient;
    	GetWindowRect(&rtClient);
    
    	CRect rtDlg;
    	m_pDlgSub_->GetClientRect(&rtDlg);
    	rtDlg.MoveToY(40);
    	rtDlg.left = 0;
    	rtDlg.right = rtClient.Width();
    	m_pDlgSub_->MoveWindow(rtDlg);
    
    	m_pDlgSub_->GetWindowRect(&rtDlg);
    	rtClient.bottom = rtDlg.bottom + 10;
    	MoveWindow(rtClient);
    
    	if (!m_pDlgSub_->IsWindowVisible())
    	{
    		m_pDlgSub_->ShowWindow(SW_SHOW);
    	}
    }
    

      子窗口

    void CDlgFilterSub::InitUI(CString strCatCode)
    {
    	。。。。动态添加按钮

    CRect rtClient;
    GetClientRect(rtClient);

    rtCtrl最后一排控件的位置

    SCROLLINFO si;
    si.cbSize = sizeof(si);
    GetScrollInfo(SB_VERT, &si);
    si.nMax = max(rtCtrl.bottom + SPACE, rtClient.bottom);
    si.nPos = 0;
    SetScrollInfo(SB_VERT, &si);

    static int iHeight = rtClient.bottom;
    if (rtClient.bottom < rtCtrl.bottom + SPACE)
    {
    rtClient.bottom = iHeight;
    }
    else
    {
    rtClient.bottom = rtCtrl.bottom + SPACE;
    }
    MoveWindow(rtClient);

    }
    

      子窗口的初始化

    BOOL CDlgFilterSub::OnInitDialog()
    {
    	CBCGPDialog::OnInitDialog();
    	COLORREF bgColor = RGB(248, 248, 248);
    	SetBackgroundColor(bgColor);
    
    	CRect rtClient;
    	GetClientRect(rtClient);
    	SCROLLINFO si;
    	si.cbSize = sizeof(SCROLLINFO);
    	si.fMask = SIF_ALL;
    	si.nPos = 0;
    	si.nMin = 0;
    	si.nMax = rtClient.bottom;
    	SetScrollInfo(SB_VERT, &si);
    
    	return TRUE;
    }
    

      

    void CDlgFilterSub::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
    {
    	SCROLLINFO si;
    	si.cbSize = sizeof(si);
    	si.fMask = SIF_ALL;
    	GetScrollInfo(SB_VERT, &si);
    	INT nVscroll = si.nPos;
    	switch(nSBCode)
    	{  
    	case SB_LINEDOWN:
    		{
    			nVscroll += 20;
    			if (nVscroll > (si.nMax - si.nMin - si.nPage ))
    			{
    				nVscroll = si.nMax - si.nMin - si.nPage;
    			}
    		}
    		break;
    	case SB_LINEUP:
    		{
    			nVscroll -= 20;
    			if (nVscroll < si.nMin)
    			{
    				nVscroll = 0;
    			}
    		}
    		break;
    	case SB_PAGEDOWN:
    		{
    			nVscroll += si.nPage;
    			if (nVscroll > (si.nMax - si.nMin - si.nPage))
    			{
    				nVscroll = si.nMax - si.nMin - si.nPage;
    			}
    		}
    		break;
    	case SB_PAGEUP:
    		{
    			nVscroll -= si.nPage;
    			if (nVscroll < si.nMin)
    			{
    				nVscroll = 0;  
    			}
    		}
    		break;
    	case SB_THUMBTRACK:
    		{
    			nVscroll = nPos;
    		}
    		break;
    	}
    
    	if (si.nPos != nVscroll)
    	{
    		int yAmount = -(nVscroll - si.nPos);
    		ScrollWindow(0, yAmount, NULL,NULL);
    	}
    
    	si.nPos = nVscroll;
    	SetScrollInfo(SB_VERT, &si);
    
    	CBCGPDialog::OnVScroll(nSBCode, nPos, pScrollBar);
    }
    

      

    ON_WM_VSCROLL()
    

      

    afx_msg void OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
    

      

  • 相关阅读:
    常见的网络结构
    解决Oracle EM 乱码问题
    Oracle基础
    Unity3D游戏开发初探—2.初步了解3D模型基础
    Unity3D游戏开发初探—1.跨平台的游戏引擎让.NET程序员新生
    Hadoop学习笔记—2.不怕故障的海量存储:HDFS基础入门
    Linux下的.NET之旅:第一站,CentOS+Mono+Xsp构建最简单的ASP.NET服务器
    Hadoop学习笔记—1.基本介绍与环境配置
    f(n-1) + f(n-2)的编译器处理
    C++ 在线编译器(支持 C++11)
  • 原文地址:https://www.cnblogs.com/XiHua/p/13914988.html
Copyright © 2011-2022 走看看