原因:使用GetDlgItem()函數時需要先判斷指針然后才可以使用。
錯誤代碼:
//重新建一個線程,查詢幀同步 DWORD WINAPI SCsync_Thread(LPVOID Lparam) { CTABPAGE1 * ppPage = (CTABPAGE1 *)Lparam;;// 創建指針指向當前類 ULONG SYNC; char SSync[4]; while(1) { ppPage->ReadReg(hDev, 0x08, &SYNC, 1);//該地址讀取出來低八位是同步信息 memcpy(SSync,&SYNC,4*sizeof(char)); if (SSync[3] == 1)//說明已經同步 { ppPage->GetDlgItem(IDC_STATIC_SCsync_green)->ShowWindow(SW_SHOW);//顯示綠燈 ppPage->GetDlgItem(IDC_STATIC_SCsync_Red)->ShowWindow(SW_HIDE); } else { ppPage->GetDlgItem(IDC_STATIC_SCsync_Red)->ShowWindow(SW_SHOW);//顯示紅燈 ppPage->GetDlgItem(IDC_STATIC_SCsync_green)->ShowWindow(SW_HIDE); } } }
加上判斷指針之后的正確的代碼:
//重新建一個線程,查詢幀同步 DWORD WINAPI SCsync_Thread(LPVOID Lparam) { CTABPAGE1 * ppPage = (CTABPAGE1 *)Lparam;;// 創建指針指向當前類 ULONG SYNC; char SSync[4]; while(1) { ppPage->ReadReg(hDev, 0x08, &SYNC, 1);//該地址讀取出來低八位是同步信息 memcpy(SSync,&SYNC,4*sizeof(char)); if (SSync[3] == 1)//說明已經同步 { if (ppPage->GetDlgItem(IDC_STATIC_SCsync_green)) ppPage->GetDlgItem(IDC_STATIC_SCsync_green)->ShowWindow(SW_SHOW);//顯示綠燈 if (ppPage->GetDlgItem(IDC_STATIC_SCsync_Red)) ppPage->GetDlgItem(IDC_STATIC_SCsync_Red)->ShowWindow(SW_HIDE); } else { if (ppPage->GetDlgItem(IDC_STATIC_SCsync_Red))//判斷之后才能使用該指針 ppPage->GetDlgItem(IDC_STATIC_SCsync_Red)->ShowWindow(SW_SHOW);//顯示紅燈 if (ppPage->GetDlgItem(IDC_STATIC_SCsync_green)) ppPage->GetDlgItem(IDC_STATIC_SCsync_green)->ShowWindow(SW_HIDE); } } }