嵌在网页里的ACTIVEX控件不能销毁的问题。 我用MFC建了个ACTIVEX控件CActicexggggCtrl,嵌入网页时只有刷新或关闭浏览器的时候才调用了控件的析构函数CActicexggggCtrl::~CActicexggggCtrl(), 可是当输入新地址转到其他新网页时,不会调用析构函数。我想当转到其他新网页时,也调用析构函数,或在这时候知道产生了什么消息,可以自己调用函数重新初始变量? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 http://sx8848.sx.zj.cn/acticexgggg.rar 这里是程序代码 里面有个HTM文件,打开后会有一个对话框。只有刷新的时候才会自动销毁久的对话框,再产生新的。当在地址栏输入其他网址转到其他网页时,却没有销毁控件 ,这时会有多个对话框留在那里。 1、“嵌入网页时只有刷新或关闭浏览器的时候才调用了控件的析构函数CActicexggggCtrl::~CActicexggggCtrl(), ”析构函数不能显式调用。2、在适当的时候调用:m_dialog1.DestroyWindow();可以销毁对话框。 TO: xxrl(孔曰成仁,孟曰取E) 重载OnDestory函数没用 ,我在里面void CActicexggggCtrl::OnDestroy() { m_dialog1.ShowWindow(SW_HIDE); COleControl::OnDestroy(); // TODO: Add your message handler code here //SW_HIDE }根本不起作用,对话框还是显示在那里 TO: sinall() ( ) 1:你误解了我的意思,我不是说显式调用控件的析构函数,我是说当“IE转到其它网页”的时候应该也调用控件的析构函数函数,可是没有调用。证明这时候控件还在保留在内存里,这样在内存里就保留了一个无用的控件内存块,只有关闭IE进程时才能释放以前访问过网页里的控件。2:问题是我根本找不到“在适当的时候”调用m_dialog1.DestroyWindow();当“IE转到其它网页”时根本就没有通知嵌在里面的控件任何消息 再开个接口,把自己关掉行不?CActicexggggCtrl::CloseWindow() { ::EndDialog(...); ....}...m_dialog1.CloseWindow TO yzx0023(无聊客): 我不是问关闭对话框的问题,是在问当“IE转到其它网页”的时候,内嵌的ACTIVEX控件没有销毁的问题,对话框只是用来测试用的。 在此给楼主两个方法:1、基于互斥体的方法 HANDLE hObject = CreateMutex(NULL,FALSE,"SingleInstance"); if(GetLastError() == ERROR_ALREADY_EXISTS) { CloseHandle(hObject); } else { m_dialog1.Create(MyDialog::IDD); m_dialog1.ShowWindow(SW_NORMAL); }2、基于静态变量的方法class CActicexggggCtrl : public COleControl{ static MyDialog* m_pCurrentDlg;}// ActicexggggCtl.cppMyDialog* CActicexggggCtrl::m_pCurrentDlg=NULL;CActicexggggCtrl::CActicexggggCtrl(){ InitializeIIDs(&IID_DActicexgggg, &IID_DActicexggggEvents); // TODO: Initialize your control's instance data here. if(m_pCurrentDlg!=NULL) m_pCurrentDlg->DestroyWindow(); m_pCurrentDlg=&this->m_dialog1;} sinall() 你理解错误我的意思了。我不是问关闭对话框的问题,是在问当“IE转到其它网页”的时候,内嵌的ACTIVEX控件“没有销毁”的问题,对话框只是用来测试用的。只是为了证明在“IE转到其它网页”的时候,控件还是保留在内存里,这样在内存里就保留了一个无用的控件内存块。 楼主玩笑开大了,1、我先打开你的网页,对话框显示2、然后输入www.baidu.com 然后对话框消失,百度显示。3、点击后退——》14、点击前进——》2 怎么可能呢?难道是我的IE出问题了?你的IE是什么版本的? 我的IE也是这个版本 系统是2000 SP3 用的是VC6 SP6 方便的话能用QQ交流么?我的QQ是4886611 保存位图代码的一个疑问 jpg图片怎么转变成24位bmp图片 编译通过了,但运行是出错,为什么??CFileDialog::GetFolderPath() 招聘要求 求救! 在问一个简单的问题! 关于重载运算符的const问题 VC60英文版那有下载 如何动态的分配一个二维无符号型的数组?急! 我的工程中的DLL是设置为“在共享 DLL 中使用 MFC”,“多线程 DLL (/MD)”,在发布静默安装包的问题? 请问,如何固定拆分窗口的大小? 用Socket可以在服务器端主动建立TCP/IP连接嘛?
“
嵌入网页时只有刷新或关闭浏览器的时候才调用了控件的析构函数CActicexggggCtrl::~CActicexggggCtrl(),
”
析构函数不能显式调用。2、
在适当的时候调用:
m_dialog1.DestroyWindow();
可以销毁对话框。
{
m_dialog1.ShowWindow(SW_HIDE);
COleControl::OnDestroy();
// TODO: Add your message handler code here
//SW_HIDE
}根本不起作用,对话框还是显示在那里
1:你误解了我的意思,我不是说显式调用控件的析构函数,我是说当“IE转到其它网页”的时候应该也调用控件的析构函数函数,可是没有调用。证明这时候控件还在保留在内存里,这样在内存里就保留了一个无用的控件内存块,只有关闭IE进程时才能释放以前访问过网页里的控件。2:问题是我根本找不到“在适当的时候”调用m_dialog1.DestroyWindow();当“IE转到其它网页”时根本就没有通知嵌在里面的控件任何消息
CActicexggggCtrl::CloseWindow()
{
::EndDialog(...);
....
}...
m_dialog1.CloseWindow
1、基于互斥体的方法
HANDLE hObject = CreateMutex(NULL,FALSE,"SingleInstance");
if(GetLastError() == ERROR_ALREADY_EXISTS)
{
CloseHandle(hObject);
}
else
{
m_dialog1.Create(MyDialog::IDD);
m_dialog1.ShowWindow(SW_NORMAL);
}2、基于静态变量的方法
class CActicexggggCtrl : public COleControl
{
static MyDialog* m_pCurrentDlg;
}// ActicexggggCtl.cpp
MyDialog* CActicexggggCtrl::m_pCurrentDlg=NULL;CActicexggggCtrl::CActicexggggCtrl()
{
InitializeIIDs(&IID_DActicexgggg, &IID_DActicexggggEvents); // TODO: Initialize your control's instance data here.
if(m_pCurrentDlg!=NULL)
m_pCurrentDlg->DestroyWindow();
m_pCurrentDlg=&this->m_dialog1;
}
我不是问关闭对话框的问题,是在问当“IE转到其它网页”的时候,内嵌的ACTIVEX控件“没有销毁”的问题,对话框只是用来测试用的。只是为了证明在“IE转到其它网页”的时候,控件还是保留在内存里,这样在内存里就保留了一个无用的控件内存块。
1、我先打开你的网页,对话框显示
2、然后输入www.baidu.com 然后对话框消失,百度显示。
3、点击后退——》1
4、点击前进——》2