settimer用久了绘制的界面会错乱?

发布于 2022-09-04 06:59:39 字数 2140 浏览 26 评论 0

1.个人有两个小工具,都使用了win32api无标题栏无边框的自绘界面的形式

其中一个是简单的用了settimer每隔30或者一下网页的内容,然后在WM_PAINT里面textout,这个的问题是时间久了(几个小时)后界面就消失了,任务管理器里面进程还在;

另外一个是鼠标取色的工具,鼠标在桌面上移动,工具上面就即时显示颜色值,这个依然是几个小时内必定会出现界面绘制错乱或者界面变成一个奇怪的窗口。
有人遇到过这个bug吗,网上搜索果无果...请问这个bug怎么解决?

2.
//以下是第一个工具的关键代码

SetTimer(NULL,0,30000,myTimerProc1);

case WM_PAINT:
{
    PAINTSTRUCT ps = { 0 };
    HDC    hDc = BeginPaint(hWnd, &ps);
                
    string strTemp="Init...";
    TextOut(hDc, 10, 0 ,strTemp.c_str(),strTemp.length());
                
    EndPaint(hWnd, &ps);
}
break;
            
VOID CALLBACK myTimerProc1(HWND hwnd, UINT uMsg, UINT idEvent, DWORD dwTime ) 
{
    //获取内容 略...
    InvalidateRect(hwnd, NULL, 1);
    UpdateWindow(hwnd);
}

————————————————————————————————————
以下是第二个工具的关键代码

SetTimer(g_hWnd,1,200,NULL);

static POINT pt={-100};
RECT rc;
static COLORREF cr={0},crLast={0};
    
case WM_TIMER:
            {
                RECT winRect;
                GetWindowRect(hWnd,&winRect);
                GetCursorPos(&pt);
                cr=GetPixel(hdcScreen,pt.x,pt.y);

                if(cr!=crLast)
                {
                    crLast=cr;
                    RECT rect={1,1,220,150};
                    InvalidateRect(hWnd,&rect,0);
                }
            }
            break;

WM_PAINT的代码太乱就不贴了

3.没有报错信息

4.以下是第一个工具截图
图片描述

这里是第二个工具的正常截图
第二个工具

第二个工具用久了之后变成只剩下这么一个窗口
图片描述

或者变成这样
(那4个框框是文本框,显示还是没问题,上面一排是可以输入rgb值的,下面一个长的是可以输入颜色16进制,输入rgb值则下面自动显示16进制值,输入16进制值则上面显示转换的rgb值。
自绘的地方则各种错乱)

图片描述

5.出现时间不定,不知道如何调试

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

巴黎夜雨 2022-09-11 06:59:39

时间长了出问题,会不会存在资源或者内存泄漏导致的呢,内存占用有问题吗?

箹锭⒈辈孓 2022-09-11 06:59:39

GDI资源耗尽了。看看是不是有什么笔刷字体位图忘记释放了

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文