• 学习: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);
    }
    

  • 相关阅读:
    15、事例十五:纹理映射
    14、事例十四:材质:十二个材质球
    [luogu]P1084 疫情控制
    [luogu]P2502 [HAOI2006]旅行
    [luogu]P2053 [SCOI2007]修车
    线性相关/线性基
    [luogu]P3629 [APIO2010]巡逻
    [luogu]P3623 [APIO2008]免费道路
    权值线段树
    树链剖分
  • 原文地址:https://www.cnblogs.com/zpchcbd/p/12273239.html
Copyright © 2020-2023  润新知