class CDlgTest : CDialog
{
public:
void StartThread();
static DWORD __stdcall WorkThread(LPVOID pParam);
void DoWork();
HANDLE m_hThread;
}; void CDlgTest::StartThread()
{
DOWRD dwThreadID = 0;
m_hThread = CreateThread(NULL, 0, WorkThread, this, 0, &dwThreadID);
} DWORD __stdcall CDlgTest::WorkThread(LPVOID pParam)
{
CDlgTest* pDlg = (CDlgTest*)pParam;
pDlg->DoWork();
return 0;
}
void CDlgTest::DoWork()
{
// 在这里可以调用GetSafeHwnd获取句柄的,然后就可以发送消息了。
// 使用::PostMessageA (::GetDlgItem(GetSafeHwnd(),IDC_EDIT1),WM_SETTEXT,0,(LPARAM)"11");没反映 就是编辑框不会增加内容
//使用::SetDlgItemText(AfxGetMainWnd()->m_hWnd,IDC_EDIT1,"str"); 会被中断
//试了很多中方法 好多都断在 IsWindow(m_hWnd)
}我只想设置编辑框里的文本... 大家帮帮我吧
CDlgTest* pDlg你又创建了一个类的指针,已经不是你这个窗体了呀
class CDlgTest : CDialog
{
public:
void StartThread();
static DWORD __stdcall WorkThread(LPVOID pParam);
void DoWork();
HANDLE m_hThread;
}; void CDlgTest::StartThread()
{
DOWRD dwThreadID = 0;
m_hThread = CreateThread(NULL, 0, WorkThread, this, 0, &dwThreadID);
} DWORD __stdcall CDlgTest::WorkThread(LPVOID pParam)
{
CDlgTest* pDlg = (CDlgTest*)pParam;
pDlg->DoWork();
return 0;
}
void CDlgTest::DoWork() //你这时候调用直接按照如下的方法就可以了。
{
CEdit *pEdit = (CEdit*)GetDlgItem(IDC_EDIT1);
if(pEdit != NULL)
{
pEdit->SetWindowText(...);//之所以赋值出现错误,是由于窗口并没有完全创建以前,你就启动了线程,最好在OnitDialog之后(创建了窗口和上面的控件之后)
}
}其他的方面都是没错的
public:
static DWORD __stdcall ReadPipe(LPVOID pParam);
---------------------------------------------- CreateThread(0,0,ReadPipe,GetDlgItem(IDC_EDIT1),0,&dwT); // TODO: 在此添加控件通知处理程序代码
//OnOK();
}DWORD CDlg::ReadPipe(LPVOID pParam)//LPVOID
{
::PostMessageA ((HWND)pParam,WM_SETTEXT,0,(LPARAM)"11");我晕 传控件句柄怎么都没用 ::PostMessageA ((HWND)pParam,WM_SETTEXT,0,(LPARAM)"11"); 这个地方写错了吗?
static DWORD __stdcall ReadPipe(LPVOID pParam);
---------------------------------------------- CreateThread(0,0,ReadPipe,GetDlgItem(IDC_EDIT1)->GetSafeHwnd(),0,&dwT); // TODO: 在此添加控件通知处理程序代码
//OnOK();
}DWORD CDlg::ReadPipe(LPVOID pParam)//LPVOID
{
::PostMessageA ((HWND)pParam,WM_SETTEXT,0,(LPARAM)"11");