利用OnTimer实现文本串“欢迎使用VisualC++面向对象编程从左到右滚动显示这行字
时间: 2024-10-06 22:01:08 浏览: 22
number_clock.rar_MFC_MFC实时显示_mfc 显示时间_visual c_显示数字时间
要在Visual C++中使用`OnTimer`实现文本串从左向右逐字符滚动显示,通常会结合使用Windows API中的`SetWindowText`、`GetWindowTextLength`以及`ScrollWindowEx`等函数。以下是一个简化的示例代码,假设你已经在对话框里有一个名为`m_TextCtrl`的文本框(Edit Control):
```cpp
// 假设你的定时器ID是ID_TIMER_SCROLL
void CDCxxDlg::OnTimer(UINT_PTR nIDEvent)
{
if (nIDEvent == ID_TIMER_SCROLL)
{
// 获取当前文本长度
int textLen = GetWindowTextLength(m_TextCtrl);
// 确保不会超过文本框的宽度
int displayWidth = m_TextCtrl.GetSafeClientSize().cx;
// 计算新字符的开始位置
int newStart = (textLen % displayWidth) + 1; // 首先显示新的字符
// 更新文本内容,从新起始位置开始
SetWindowText(m_TextCtrl, L"滚动文字", newStart);
// 设置滚动效果,这里只滚动字符到右边
SCROLLINFO si;
si.cbSize = sizeof(si);
si.fMask = SWI_POS | SWI_VERT;
si.nPos = displayWidth - 1; // 最后一个字符的位置
si.nMax = displayWidth;
si.dwFlags = SIF_ALL;
ScrollWindowEx(m_TextCtrl.GetSafeHwnd(), 0, 0, &si);
// 调用下一次计时器事件,让文字继续滚动
PostMessage(m_hWnd, WM_TIMER, ID_TIMER_SCROLL, 0);
}
}
```
请注意,为了优雅地滚动,实际应用中可能需要考虑字体大小、缩进等因素,并适当调整滚动速度和步长。此外,记得在`OnInitDialog`中设置定时器,例如:
```cpp
OnInitDialog()
{
// 其他初始化...
SetTimer(IDC_TEXTCTRL_ID, /* 某个合理的延时周期 */, NULL); // 比如100毫秒
}
```
阅读全文