作者:望尽天涯 | 来源:互联网 | 2023-09-03 11:21
问题1:如果在应用程序中创建一对话框,条件是对话框在任何情况下都不与父类抢占焦点,即应用程序主框架始终处于激活状态,小弟折腾了好久仍然想不出好的办法。还望大暇指点迷津。问题2:小弟用多线程做
问题1:如果在应用程序中创建一对话框,条件是对话框在任何情况下都不与父类抢占焦 点,即应用程序主框架始终处于激活状态,小弟折腾了好久仍然想不出好的办法。还望大暇指点迷津。
问题2:小弟用多线程做了一无人值守需长期自动执行的应用程序,程序涉及大量的内存操作(图形操作程序)。程序运行正常,但发现运行过程中应用程序所占用的内存缓慢增长(程序要求在不停机的情况下自动长期运行).小弟查了很久也找不出什么问题,但此程序在还没改成多线程序时没什么问题(注:改成多线程同时也改动了不少东西,不能确定就是线程的原因)。这里有一个很奇怪的现象,就是当应用程序进程所占的内存增长了后,如果对应用程序的框架作一些拖动,放大,缩小的操作或对粘贴板进行拷贝,粘贴之后进程所占用的内存就会自动下降到正常水平,真的好奇怪!!!!!!!!!!!。哪位高手如知道原因请一定回答。在下先多谢诸位了。
17 个解决方案
问题一:
重载WM_KILLFOCUS消息,不让它失去焦点.
问题二:
有没有内存漏洞???
多谢这位仁兄了。
内存漏洞我想应该没有,就算有也是属于很不明显的那种,因为程序是非常繁忙也就是说对内存的操作非常频繁,一天内要画好几十万幅图像并将其压缩成gif格式呢。而且我这个程序也能运行好几天呢。再加上所占用的内存也可以自然释放(问题所说的现象)
1、设子窗体为POPUP
2、你可以用VC的工具SPY++跟一下
我曾用boundchecker杳过,但我不太相信它的结果,因为它报告好几个mfc内部了错误,我用的是dephi版本的boundchecker.
对,子子窗体popup就可以,office97的小向导就是这么个对话框吧!
可我用的就是popup,但还是不行呀,能说详细些吗?
我再具体说一说问题一,当我用子窗体popup时,当create后主窗体的焦点仍然会被子窗体抢占,可我的要求有点像楼上的兄弟所说的office小向导似的(我看过,有时它也会抢占焦点)。当我用子窗体child时是不抢占焦点了,但却会被主窗体的图像给覆盖(不能即时刷新,因为此应用程序时图形程序,子窗体用于表示主窗体当前图形有状态)。我不知道哪没做对,这问题困扰得我好难受,当然还有问题二也是,有谁能告诉我答案吗?越详细越好,有示例再好不过了。
难道真的没人能回答我的问题吗?上面的几位老兄的回答即使是正确的,那也太不够详细了,我没弄出来。唉,真不爽啊!!!!!!!!!!!!!!!!
要不和主框架争夺焦点的话,用CControlBar的派生类不知道行不行?或者用CDialogBar。
另外建议用Spy++看看Office助手的窗口包含那些风格,如果你要求的和助手窗口一样的话,把窗口风格设成和助手窗口的风格一样就行了。
yuHao说的对,我觉得使用CControlBar是个好方法。
第二个问题,是否在图形操作后忘了使用ReleaseDC?
yuHao说的对,我觉得使用CControlBar是个好方法。
第二个问题,是否在图形操作后忘了使用ReleaseDC?
楼上这位大哥,对第二个问题你说是否在图形操作后忘了使用ReleaseDC。我想不是的,因为我这应用程序本来是用单线程实现的,单线线程时并没有什么大的问题,是改成多线程后才变成这样的,当然,在改成多线程同时也做了较大的修改。
第二个问题:
在你的线程你加入些类似于sleep(100)之类的试试。
估计是你的线程占用了内存,还没有Realse(),又起了另一个。
可以写调试代码加入程序:当每起一个线程就把该线程所占资源数和线程句柄存入CMap中,退出时
比较一下,把结果输出到文件中分析一下.我也遇到非常相似的此类情况,但我觉得你的问题是由
在线程中使用GDI造成的.看看MFC中GdiFlush()函数体,会有帮助.