MFC渣新手
求指点
想要实现的效果是
1.当recvFlag =Ture时,bitmap由红灯变绿灯。 控件是一个静态图控件,使用Setbitmap来设置图片。放在线程中循环检测 recvFlag参数来设置红绿灯。
2.CtrlList 显示实时接收的数据。如果在这个线程中,不添加bitmap的操作,通过传入的this对 ctrllist操作是没有问题的。
3.奇怪2个都是类中的控件,为什么一个可以一个不行。
4.查资料说要用 SetBitmap的原型函数,传入hWnd,但是不清楚该怎样做.....
求指点~~~~
mThreadPrint = AfxBeginThread(ThreadProc_print, (LPVOID )this, //创建函数时将类的指针传入
THREAD_PRIORITY_NORMAL,
0,
CREATE_SUSPENDED);
mThreadPrint->m_bAutoDelete = TRUE;
mThreadPrint->ResumeThread();
UINT ThreadProc_print(LPVOID param)
{
CTunelDlg_0 *pDlg=(CTunelDlg_0 *)param;
int comRow=0;
while(1)
{
//if(recvFlag)
if(1)
{
/* *pStatic 在主线程的CTunnelDlg_0 类中定义的一个Picture 控件;
m_comList. 在主线程的CTunnelDlg_0 类中定义的一个CtrlList 空间的变量;
问题:
1.在线程中添加SetBitmap和 ModifyStytle函数会出现断言错误,调试了一下发现this指针是 CCC.. 不太清楚是否是也指针的意思;
2. 为什么同样是pDlg的变量,CtrlList的InserItem和SetItemText都没有问题。 注视Setbitmap之后,对CtrlList的操作时可以运行的。
*/
//yanyan:加载通道状态图标
//CStatic *pStatic=(CStatic *)GetDlgItem(AfxGetMainWnd()->m_hWnd,IDC_RedGreen) ;//控件ID
/*
CBitmap bmpload_RED;
bmpload_RED.LoadBitmap(IDB_BITMAP_RED);
pStatic->ModifyStyle(0,SS_BITMAP);
pStatic->SetBitmap(HBITMAP(bmpload_RED.Detach()));
*/
//pDlg->bmpload_GREEN.LoadBitmap(IDB_BITMAP_GREEN);
//pDlg->pStatic->ModifyStyle(0,SS_BITMAP);
/* 0913:
*/
pDlg->pStatic->SetBitmap(HBITMAP(pDlg->bmpload_GREEN.Detach())); //调试发现这里会出现空指针
//将LEUDataSrc中的数据转换为 字符串CString
CString str;
CString strData = "";
for (int i = 0; i < sizeof(LEUDataSrc); i++)//num是你数组里面元素的个数
{
str.Format("%02x ",LEUDataSrc[i]);//每次提取出一个16进制数转为字符型 02x表示,不足2位的时候补足 2位
strData += str;//将转换好的字符串写入总的字符串
}
pDlg->m_comList.InsertItem(comRow,"RX:"); //第一列显示Time
pDlg->m_comList.SetItemText(comRow,1,strData); //第二列显示LEUData
memset(LEUDataSrc,0,2048); //清空 LEUData数据
comRow++;
}
Sleep(100);
}
return 0;
}