学习:Scroll Bar/Spin Control/Progress Control/Timer

滚动条

实现的结构体为:SCROLLINFO

/*
D:\Visual_Studio_repos\MFC\5\
*/
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);
}

posted @   zpchcbd  阅读(147)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
点击右上角即可分享
微信分享提示