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浏览器。
大婶们给看看,不知道我描述的够不够清楚