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瀏覽器。
大嬸們給看看,不知道我描述的夠不夠清楚
uj5u.com熱心網友回復:
多加一些除錯資訊,看是不是前面就有api失敗了其次就是換IE等瀏覽器試試。
uj5u.com熱心網友回復:
邏輯上再嚴謹些CWnd *pWnd = GetDlgItem(IDC_BUTTON_UP);
if(pWnd)
pWnd->SetWindowPos(NULL,X+55,Y,50,50,NULL);
if(dlg.Create(xxxxx))
{
}
寫日志
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/115434.html
