c++ - settimer用久了绘制的界面会错乱?
大家讲道理
大家讲道理 2017-04-17 15:00:38
0
2
690

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.出现时间不定,不知道如何调试

大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

全部回覆(2)
左手右手慢动作

時間長了出問題,會不會存在資源或記憶體洩漏導致的呢,記憶體佔用有問題嗎?

小葫芦

GDI資源耗盡了。看看是不是有什麼筆刷字體點陣圖忘記釋放了

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!