我寫了一個Class部份內容如下:
class CMainWnd:public CFrameWnd
{
public:
CMainWnd();
virtual ~CMainWnd();
virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
public:
CToolBar m_wndToolBar;
CStatusBar m_wndStatusBar;
CTreeView m_wndTreeView;
CStatic m_wndStatic; static CALLBACK BOOL SetStatusBarDateTime(); //我想將此Function作為CreateThread的CallBack函數;
//...
};//然后在OnCreate后,加了一個執行緒,讓它專門顯時日期和時間;
CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)(this->SetStatusBarDateTime),NULL,0,NULL);BOOL CALLBACK CMainWnd::SetStatusBarDateTime()
{
char szDate[10],szTime[10];
SYSTEMTIME uSysDateTime;
::GetLocalTime(&uSysDateTime);
sprintf(szDate,"%d/%d/%d",uSysDateTime.wYear,uSysDateTime.wMonth,uSysDateTime.wDay);
sprintf(szTime,"%d:%d:%d",uSysDateTime.wHour,uSysDateTime.wMinute,uSysDateTime.wSecond);
//因為這個成員Function是static的,所以沒this指針,我只有強行轉換m_pMainWnd指針);
CMainWnd *pMainWnd=static_cast<CMainWnd *> (AfxGetApp()->m_pMainWnd);
pMainWnd->m_wndStatusBar.SetPaneText(4,szDate); //運行到這里就出錯;
pMainWnd->m_wndStatusBar.SetPaneText(5,szTime);
return TRUE;
}以上編譯均正確,並pMainWnd指針都沒問題.
但運行到:
pMainWnd->m_wndStatusBar.SetPaneText(4,szDate);
pMainWnd->m_wndStatusBar.SetPaneText(5,szTime);
就出錯了..如果不創建線程.在MENU OR BUTTON 的Click過程中再調用SetStatusBarDateTime()卻沒問題?
如:void CMainWnd::OnTest1()
{
this->SetStatusBarDateTime(); //這樣調用就沒問題.
}請問各位大俠是什麼原因?
class CMainWnd:public CFrameWnd
{
public:
CMainWnd();
virtual ~CMainWnd();
virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
public:
CToolBar m_wndToolBar;
CStatusBar m_wndStatusBar;
CTreeView m_wndTreeView;
CStatic m_wndStatic; static CALLBACK BOOL SetStatusBarDateTime(); //我想將此Function作為CreateThread的CallBack函數;
//...
};//然后在OnCreate后,加了一個執行緒,讓它專門顯時日期和時間;
CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)(this->SetStatusBarDateTime),NULL,0,NULL);BOOL CALLBACK CMainWnd::SetStatusBarDateTime()
{
char szDate[10],szTime[10];
SYSTEMTIME uSysDateTime;
::GetLocalTime(&uSysDateTime);
sprintf(szDate,"%d/%d/%d",uSysDateTime.wYear,uSysDateTime.wMonth,uSysDateTime.wDay);
sprintf(szTime,"%d:%d:%d",uSysDateTime.wHour,uSysDateTime.wMinute,uSysDateTime.wSecond);
//因為這個成員Function是static的,所以沒this指針,我只有強行轉換m_pMainWnd指針);
CMainWnd *pMainWnd=static_cast<CMainWnd *> (AfxGetApp()->m_pMainWnd);
pMainWnd->m_wndStatusBar.SetPaneText(4,szDate); //運行到這里就出錯;
pMainWnd->m_wndStatusBar.SetPaneText(5,szTime);
return TRUE;
}以上編譯均正確,並pMainWnd指針都沒問題.
但運行到:
pMainWnd->m_wndStatusBar.SetPaneText(4,szDate);
pMainWnd->m_wndStatusBar.SetPaneText(5,szTime);
就出錯了..如果不創建線程.在MENU OR BUTTON 的Click過程中再調用SetStatusBarDateTime()卻沒問題?
如:void CMainWnd::OnTest1()
{
this->SetStatusBarDateTime(); //這樣調用就沒問題.
}請問各位大俠是什麼原因?
beijingshizi(北京石子)(★★★★★)
static_cast 及 dynamic_cast 是要将派生类转化为基类, 和static 型变量没有关系!去掉
static_cast
也可吧
CMainWnd *pMainWnd=static_cast<CMainWnd *> (AfxGetApp()->m_pMainWnd);
和
CMainWnd *pMainWnd=(CMainWnd*)(AfxGetApp()->m_pMainWnd);
都一樣,這個是強行把派生类转化为基类的.
但应该加上WINAPI如: BOOL WINAPI SetStatusBarDateTime();