zoukankan      html  css  js  c++  java
  • 学习:Scroll Bar/Spin Control/Progress Control/Timer

    滚动条

    实现的结构体为:SCROLLINFO

    /*
    D:Visual_Studio_reposMFC5
    */
    BOOL CMy4Dlg::OnInitDialog()
    {
    	CDialogEx::OnInitDialog();
    
    	SCROLLINFO si;
    	si.cbSize = sizeof(SCROLLINFO);
    	si.fMask = SIF_ALL;
    	si.nMax = 100;
    	si.nMin = 0;
    	si.nPage = 10;
    	m_scrollbar.SetScrollInfo(&si);
    }
    
    void CMy4Dlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)// nPos为事件发生的时候,当前Scroll的滚动大小
    {
    
    	SCROLLINFO sc = { 0 };
    	sc.cbSize = sizeof(SCROLLINFO);
    	sc.fMask = SIF_ALL;
    	m_scrollbar.GetScrollInfo(&sc, true); //初始化窗口中的si结构体赋值给当前sc的结构体
    
    	int NewPos = sc.nPos;
    
    
    	switch (nSBCode)
    	{
    	case SB_THUMBTRACK: //拖动
    		NewPos = nPos;
    		break;
    	case SB_LINELEFT: //左箭头
    		NewPos = NewPos - 10;
    		break;
    	case SB_LINERIGHT:  //右箭头
    		NewPos = NewPos + 10;
    		break;
    	case SB_PAGELEFT: //左拖动行
    		NewPos = NewPos - sc.nPage;
    		break;
    	case SB_PAGERIGHT: //右拖动行
    		NewPos = NewPos + sc.nPage;
    		break;
    	default:
    		break;
    	}
    	bool ret;
    
    	ret = m_scrollbar.SetScrollPos(NewPos); //判断是否设置成功
    
    	if (NewPos > sc.nMax) {
    		NewPos = sc.nMax;
    	}
    
    	if (NewPos < sc.nMin) {
    		NewPos = sc.nMin;
    	}
    	
    
    	wchar_t szbuffer[1024];
    	SetDlgItemText(IDC_STATIC_1, _itow(NewPos, szbuffer, 10));
    	CDialogEx::OnHScroll(nSBCode, nPos, pScrollBar);
    }
    

    Spin Control:

    BOOL CMy5Dlg::OnInitDialog(){
    ......
    	CSpinButtonCtrl *spin2 = (CSpinButtonCtrl*)GetDlgItem(IDC_SPIN_2);
    	spin2->SetBase(16);
    
    	CSpinButtonCtrl *spin1 = (CSpinButtonCtrl*)GetDlgItem(IDC_SPIN_1);
    	spin1->SetRange(-20, 20);
    ......
    }
    


    进度条和定时器:

    void CMy5Dlg::OnBnClickedButton1()
    {
    	int pcP;
    	CProgressCtrl *pc = (CProgressCtrl*)GetDlgItem(IDC_PROGRESS_1);
    	SetTimer(1,200,NULL); //用来发送WM_TIMER消息,第三个参数为空则就交给内核进行消息处理
    	pcP = 0;
    	pc->SetPos(0);
    	GetDlgItem(IDC_BUTTON1)->EnableWindow(false);
    	
    
    }
    
    
    void CMy5Dlg::OnTimer(UINT_PTR nIDEvent)
    {
    	int pcP;
    	CProgressCtrl *pc = (CProgressCtrl*)GetDlgItem(IDC_PROGRESS_1);
    
    	//接收到WM_TIMER消息之后的处理
    	pc->SetRange(0, 100);
    
    	pcP = pc->GetPos() + 10;
    	if (pcP == 100) {
    		KillTimer(1);
                    GetDlgItem(IDC_BUTTON1)->EnableWindow(true);
    	}
    	pc->SetPos(pcP);
    	CDialogEx::OnTimer(nIDEvent);
    }
    

  • 相关阅读:
    JAVA不可变类(immutable)机制与String的不可变性
    如何高效学习
    [细品java]ThreadLocal源码学习
    Spring 入门知识点笔记整理
    spring远程服务知识梳理
    Spring Security 入门详解
    Selenium 安装 geckdriver Firefox 对应关系 历史版本下载
    Redhat linux 下 Jmeter 非GUI界面执行压力测试
    Spring Boot 进程守护 修改启动端口号 Spring Boot 监听端口被占用无法启动
    Redhat Linux 部署maven环境
  • 原文地址:https://www.cnblogs.com/zpchcbd/p/12273239.html
Copyright © 2011-2022 走看看