部分代码如下:
class CTTDlg : public CDialog
{
...
private:
CWinThread *m_pThread;
void OnUpdateControl(WPARAM wParam, LPARAM lParam);
static UINT ThreadFunc(LPVOID pvParam);
...
}
BOOL CTTDlg::OnInitDialog()
{
// Set object handle for thread
HWND *phObjectHandle = new HWND;
*phObjectHandle = GetSafeHwnd();
// Create thread
m_pThread = AfxBeginThread(ThreadFunc, phObjectHandle);
return TRUE; // return TRUE unless you set the focus to a control
}
UINT CTTDlg::ThreadFunc(LPVOID pvParam)
{
HWND *phObjectHandle = static_cast<HWND *>(pvParam);
for(;;)
{
::PostMessage(*phObjectHandle, WM_UPDATE_CONTROL, 0, 0);
::Sleep(1000);
}
// Release memory
delete phObjectHandle;
return 0;
}
void CTTDlg::OnUpdateControl(WPARAM wParam, LPARAM lParam)
{
CString strText;
strText.Format("TEST:%d秒", ++m_dwCount);
GetDlgItem(IDC_THREAD_TEXT)->SetWindowText(strText);
}
上述对话框在其他程序中引用时如果作为模式对话框将阻塞在DoModal()函数处,故采用无模式对话框,但调用后IDC_THREAD_TEXT控件并无显示。
pTT = new CTTDlg;
pTT.Create(IDD_TTDLG);
pTT->CenterWindow();
pTT->ShowWindow(SW_SHOW);
pTT->UpdateWindow();
class CTTDlg : public CDialog
{
...
private:
CWinThread *m_pThread;
void OnUpdateControl(WPARAM wParam, LPARAM lParam);
static UINT ThreadFunc(LPVOID pvParam);
...
}
BOOL CTTDlg::OnInitDialog()
{
// Set object handle for thread
HWND *phObjectHandle = new HWND;
*phObjectHandle = GetSafeHwnd();
// Create thread
m_pThread = AfxBeginThread(ThreadFunc, phObjectHandle);
return TRUE; // return TRUE unless you set the focus to a control
}
UINT CTTDlg::ThreadFunc(LPVOID pvParam)
{
HWND *phObjectHandle = static_cast<HWND *>(pvParam);
for(;;)
{
::PostMessage(*phObjectHandle, WM_UPDATE_CONTROL, 0, 0);
::Sleep(1000);
}
// Release memory
delete phObjectHandle;
return 0;
}
void CTTDlg::OnUpdateControl(WPARAM wParam, LPARAM lParam)
{
CString strText;
strText.Format("TEST:%d秒", ++m_dwCount);
GetDlgItem(IDC_THREAD_TEXT)->SetWindowText(strText);
}
上述对话框在其他程序中引用时如果作为模式对话框将阻塞在DoModal()函数处,故采用无模式对话框,但调用后IDC_THREAD_TEXT控件并无显示。
pTT = new CTTDlg;
pTT.Create(IDD_TTDLG);
pTT->CenterWindow();
pTT->ShowWindow(SW_SHOW);
pTT->UpdateWindow();
解决方案 »
- CMainFrame::OnCreate函数里面,各个GUI元素的创建顺序,有什么要求么?
- 大家好,我用ON_NOTIFY_RANGE时遇到了一个问题,上网搜发现一个老外和我一样的情况,而且表达的很清楚,直接贴过来了,请大虾们指教一下
- 基于对话框的程序,没有错误,可是运行后对话框不显示
- 安装问题,,,,急
- 如何用TREE控件显示一个文件夹下的所有文件包括其中的文件夹
- 熟悉WMI SDK的朋友请进
- 关联两个对话框中的文本框
- 如何能够简单的得到昨天的日期?
- 低级问题:如何直接在列表框中输入信息,,,,,,,,,,,,,,,,???????????????????????
- 那儿有光驱编程接口的资料?
- 高分!!!, 谁有ADPCM压缩/解压缩算法,可否共享,谢谢
- ###急急###怎么样在ActiveX中给客户端的某个目录写文件 up有分
pTT.Create(IDD_TTDLG);
应为pTT->Create(IDD_TTDLG);
在线等待,急~~
建议跟踪
::PostMessage(*phObjectHandle, WM_UPDATE_CONTROL, 0, 0);
strText.Format("TEST:%d秒", ++m_dwCount);
两条语句,如果是第一条执行了,第二条没执行,那问题就很简单了。