VS2008写了个控件,用了一个Statictext显示几个运行状态的文本,在插件运行过程中要更新几次。
现在是用VS的调试容器调试的时候没问题,但是用浏览器调用,就崩溃,去掉运行过程中的几次更新就不崩溃了,所以怀疑是这个控件引起。这是这个控件的属性
在界面类中的showwindows消息里面获取了句柄
void DialogMain::OnShowWindow(BOOL bShow, UINT nStatus)
{
CDialog::OnShowWindow(bShow, nStatus); // TODO: 在此处添加消息处理程序代码
//五个按钮组成的区域是一个整体,相对坐标为0 0
//各个按钮缝隙为5 int X = 0 + 820; //初始820
int Y = 0 + 150; //初始150 //位置和大小
CWnd *pWnd = GetDlgItem(IDC_BUTTON_UP);
pWnd->SetWindowPos(NULL,X+55,Y,50,50,NULL); pWnd = GetDlgItem(IDC_BUTTON_LEFT);
pWnd->SetWindowPos(NULL,X,Y+55,50,50,NULL); pWnd = GetDlgItem(IDC_BUTTON_RIGHT);
pWnd->SetWindowPos(NULL,X+110,Y+55,50,50,NULL); pWnd = GetDlgItem(IDC_BUTTON_DOWN);
pWnd->SetWindowPos(NULL,X+55,Y+110,50,50,NULL); pWnd = GetDlgItem(IDC_BUTTON_AUTO);
pWnd->SetWindowPos(NULL,X+55,Y+55,50,50,NULL); //加载图片
HBITMAP hBitmap = LoadBitmap(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_BITMAP_UP));
CButton *cbutton = (CButton *)GetDlgItem(IDC_BUTTON_UP);
cbutton->SetBitmap(hBitmap); hBitmap = LoadBitmap(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_BITMAP_LEFT));
cbutton = (CButton *)GetDlgItem(IDC_BUTTON_LEFT);
cbutton->SetBitmap(hBitmap); hBitmap = LoadBitmap(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_BITMAP_RIGHT));
cbutton = (CButton *)GetDlgItem(IDC_BUTTON_RIGHT);
cbutton->SetBitmap(hBitmap); hBitmap = LoadBitmap(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_BITMAP_DOWN));
cbutton = (CButton *)GetDlgItem(IDC_BUTTON_DOWN);
cbutton->SetBitmap(hBitmap); hBitmap = LoadBitmap(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_BITMAP_AUTO));
cbutton = (CButton *)GetDlgItem(IDC_BUTTON_AUTO);
cbutton->SetBitmap(hBitmap);
//加载背景图片
CBitmap bmp;
bmp.LoadBitmap(IDB_BITMAP_BK);
m_brush.CreatePatternBrush(&bmp); //视频加载控件
PIC = GetDlgItem(IDC_ANIMATE_VIDEO);
PIC->SetWindowPos(NULL,5,5,790,490,NULL); TEXT = GetDlgItem(IDC_STATIC_TEXT);
TEXT->SetWindowPos(NULL,820,400,190,50,NULL);
//CFont font;
//font.CreatePointFont(20,_T("黑体"),NULL);
//TEXT->SetFont(&font);
}最后几行的TEXT 是就是那个控件,在 界面类头文件里定义的 CWnd *TEXT;然后在工程的控制类homevideoCtrl.cpp里面进行调用int ChomevideoCtrl::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (COleControl::OnCreate(lpCreateStruct) == -1)
return -1;
// TODO: 在此添加您专用的创建代码 //加载
dialogmain.Create(IDD_DIALOG2, this);
//dialogvideo.Create(IDD_DIALOG1,this); //父窗体指针为dialogmain
//dialogvideo.SetParent(FromHandle(dialogmain.m_hWnd));
//
// dialogvideo.SetWindowPos(NULL, 0, 0, 800, 500, SWP_NOMOVE); //第一个参数置顶
dialogmain.SetWindowPos(NULL,0,0,1000,500,NULL);
dialogmain.TEXT->SetWindowText("正在连接摄像头请稍后");
YSY_SDK_Init("at.3su9cbc6557jegmwbngb0dby401p0ury-58e7ip1m8q-1ykujg9-8itg914wb" ,"640033347"); return 0;
}控制类的OnCreate函数调用一次dialogmain.TEXT->SetWindowText还正常
但是在YSY_SDK_Init函数里面再调用就会出问题//SDK初始化
void ChomevideoCtrl::YSY_SDK_Init(char * accesstoken, char * deviceseriak)
{
//JS传入参数
szAccessToken = accesstoken;
szDeviceSerial = deviceseriak; //SDK 接口
int result = OpenSDK_Init(g_szAppKey); //result = YSY_SDK_DEVINFO();
//result = YSY_SDK_AllocSession();
//result = YSY_SDK_Real(); //dialogmain.TEXT->SetWindowText("11111");
if(result==0)
{
//dialogmain.TEXT->SetWindowText("视频库初始化成功"); //获取设备信息
result = YSY_SDK_DEVINFO();
if(result==0)
{
//dialogmain.TEXT->SetWindowText("获取摄像头信息成功"); //分配会话
result = YSY_SDK_AllocSession();
if(result==0)
{
//dialogmain.TEXT->SetWindowText("分配会话成功");
//开始预览
result = YSY_SDK_Real();
if(result==0)
{
dialogmain.TEXT->SetWindowText("开始播放视频");
UpdateWindow();
}
else
{
//dialogmain.TEXT->SetWindowText("视频启动失败,刷新尝试");
}
}
else
{
//dialogmain.TEXT->SetWindowText("分配会话失败");
}
}
else
{
//dialogmain.TEXT->SetWindowText("获取摄像头信息失败");
}
}
else
{
//dialogmain.TEXT->SetWindowText("视频库初始化失败");
}
}这些代码在调试容器里面没问题,一上浏览器就崩溃,测试用的360浏览器。
大婶们给看看,不知道我描述的够不够清楚
现在是用VS的调试容器调试的时候没问题,但是用浏览器调用,就崩溃,去掉运行过程中的几次更新就不崩溃了,所以怀疑是这个控件引起。这是这个控件的属性
在界面类中的showwindows消息里面获取了句柄
void DialogMain::OnShowWindow(BOOL bShow, UINT nStatus)
{
CDialog::OnShowWindow(bShow, nStatus); // TODO: 在此处添加消息处理程序代码
//五个按钮组成的区域是一个整体,相对坐标为0 0
//各个按钮缝隙为5 int X = 0 + 820; //初始820
int Y = 0 + 150; //初始150 //位置和大小
CWnd *pWnd = GetDlgItem(IDC_BUTTON_UP);
pWnd->SetWindowPos(NULL,X+55,Y,50,50,NULL); pWnd = GetDlgItem(IDC_BUTTON_LEFT);
pWnd->SetWindowPos(NULL,X,Y+55,50,50,NULL); pWnd = GetDlgItem(IDC_BUTTON_RIGHT);
pWnd->SetWindowPos(NULL,X+110,Y+55,50,50,NULL); pWnd = GetDlgItem(IDC_BUTTON_DOWN);
pWnd->SetWindowPos(NULL,X+55,Y+110,50,50,NULL); pWnd = GetDlgItem(IDC_BUTTON_AUTO);
pWnd->SetWindowPos(NULL,X+55,Y+55,50,50,NULL); //加载图片
HBITMAP hBitmap = LoadBitmap(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_BITMAP_UP));
CButton *cbutton = (CButton *)GetDlgItem(IDC_BUTTON_UP);
cbutton->SetBitmap(hBitmap); hBitmap = LoadBitmap(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_BITMAP_LEFT));
cbutton = (CButton *)GetDlgItem(IDC_BUTTON_LEFT);
cbutton->SetBitmap(hBitmap); hBitmap = LoadBitmap(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_BITMAP_RIGHT));
cbutton = (CButton *)GetDlgItem(IDC_BUTTON_RIGHT);
cbutton->SetBitmap(hBitmap); hBitmap = LoadBitmap(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_BITMAP_DOWN));
cbutton = (CButton *)GetDlgItem(IDC_BUTTON_DOWN);
cbutton->SetBitmap(hBitmap); hBitmap = LoadBitmap(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_BITMAP_AUTO));
cbutton = (CButton *)GetDlgItem(IDC_BUTTON_AUTO);
cbutton->SetBitmap(hBitmap);
//加载背景图片
CBitmap bmp;
bmp.LoadBitmap(IDB_BITMAP_BK);
m_brush.CreatePatternBrush(&bmp); //视频加载控件
PIC = GetDlgItem(IDC_ANIMATE_VIDEO);
PIC->SetWindowPos(NULL,5,5,790,490,NULL); TEXT = GetDlgItem(IDC_STATIC_TEXT);
TEXT->SetWindowPos(NULL,820,400,190,50,NULL);
//CFont font;
//font.CreatePointFont(20,_T("黑体"),NULL);
//TEXT->SetFont(&font);
}最后几行的TEXT 是就是那个控件,在 界面类头文件里定义的 CWnd *TEXT;然后在工程的控制类homevideoCtrl.cpp里面进行调用int ChomevideoCtrl::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (COleControl::OnCreate(lpCreateStruct) == -1)
return -1;
// TODO: 在此添加您专用的创建代码 //加载
dialogmain.Create(IDD_DIALOG2, this);
//dialogvideo.Create(IDD_DIALOG1,this); //父窗体指针为dialogmain
//dialogvideo.SetParent(FromHandle(dialogmain.m_hWnd));
//
// dialogvideo.SetWindowPos(NULL, 0, 0, 800, 500, SWP_NOMOVE); //第一个参数置顶
dialogmain.SetWindowPos(NULL,0,0,1000,500,NULL);
dialogmain.TEXT->SetWindowText("正在连接摄像头请稍后");
YSY_SDK_Init("at.3su9cbc6557jegmwbngb0dby401p0ury-58e7ip1m8q-1ykujg9-8itg914wb" ,"640033347"); return 0;
}控制类的OnCreate函数调用一次dialogmain.TEXT->SetWindowText还正常
但是在YSY_SDK_Init函数里面再调用就会出问题//SDK初始化
void ChomevideoCtrl::YSY_SDK_Init(char * accesstoken, char * deviceseriak)
{
//JS传入参数
szAccessToken = accesstoken;
szDeviceSerial = deviceseriak; //SDK 接口
int result = OpenSDK_Init(g_szAppKey); //result = YSY_SDK_DEVINFO();
//result = YSY_SDK_AllocSession();
//result = YSY_SDK_Real(); //dialogmain.TEXT->SetWindowText("11111");
if(result==0)
{
//dialogmain.TEXT->SetWindowText("视频库初始化成功"); //获取设备信息
result = YSY_SDK_DEVINFO();
if(result==0)
{
//dialogmain.TEXT->SetWindowText("获取摄像头信息成功"); //分配会话
result = YSY_SDK_AllocSession();
if(result==0)
{
//dialogmain.TEXT->SetWindowText("分配会话成功");
//开始预览
result = YSY_SDK_Real();
if(result==0)
{
dialogmain.TEXT->SetWindowText("开始播放视频");
UpdateWindow();
}
else
{
//dialogmain.TEXT->SetWindowText("视频启动失败,刷新尝试");
}
}
else
{
//dialogmain.TEXT->SetWindowText("分配会话失败");
}
}
else
{
//dialogmain.TEXT->SetWindowText("获取摄像头信息失败");
}
}
else
{
//dialogmain.TEXT->SetWindowText("视频库初始化失败");
}
}这些代码在调试容器里面没问题,一上浏览器就崩溃,测试用的360浏览器。
大婶们给看看,不知道我描述的够不够清楚
其次就是换IE等浏览器试试。
CWnd *pWnd = GetDlgItem(IDC_BUTTON_UP);
if(pWnd)
pWnd->SetWindowPos(NULL,X+55,Y,50,50,NULL);if(dlg.Create(xxxxx))
{
}
写日志