标题:WndProc如何刷新动态字符
取消只看楼主
angelhot
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2015-1-9
结帖率:50%
已结贴  问题点数:10 回复次数:2 
WndProc如何刷新动态字符
程序代码:
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)
    {
    case WM_PAINT:
           {
        PAINTSTRUCT ps;
        HDC hdc = BeginPaint(hWnd, &ps);

         .........
        SYSTEMTIME st;
        GetLocalTime(&st);
        TCHAR cha[9] = {};
        swprintf_s(cha, _T("%hu%hs%hu%hs%hu"), st.wHour, ":", st.wMinute, ":", st.wSecond);
        //InvalidateRect(hWnd, NULL, true);
        DrawText(hdc, cha, -1, &rect, DT_WORDBREAK);
        //Sleep(1000);
                .........
        }
    }
}

为什么DrawText放在 switch (message)循环里不会重复打印时间st.wSecond变化啊?
加上InvalidateRect后,清除太快,直接都看不到显示了。
Sleep(1000)虽然能显示变化,但整个循环每1秒都会卡定。
要用什么方法刷新动态字符呢?


[此贴子已经被作者于2023-4-4 08:48编辑过]

搜索更多相关主题的帖子: 字符 message 动态 HWND 刷新 
2023-04-04 08:32
angelhot
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2015-1-9
得分:0 
回复 2楼 rjsp
SetTimer以时间间隔发送WM_TIMER消息InvalidateRect刷新,不需要调用KillTimer销毁时钟。
又学到新姿势,感谢rjsp版主亲授
2023-04-04 11:50
angelhot
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2015-1-9
得分:0 
回复 4楼 rjsp
rjsp版主:先用CreateCompatibleDC创建内存兼容DC,用CreateCompatibleBitmap创建位图,
然后在WM_TIMER计时器消息里用Rectangle和TextOutW绘制文字图形到内存兼容DC?
最后在WM_PAINT用StretchBlt将兼容DC绘制到窗口上吗?

只学了C++基础,一直都是以黑底白字的控制台作练习,对WindowsAPI函数不了解
2023-04-05 15:40



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-511783-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.155075 second(s), 8 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved