在一个多线程的过程中,如何修改对话框中控件的值 本人建一个对话框形式的PROJECT,其中创建一个工作进程,在进程中想修改对话框中某个控件的值,请问要怎样实现. 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 将对话框类的this指针作为参数,传给线程回调函数。 danyueer,还有没有其它可以得到对话框句柄的办法呢?然后用SetDlgItemText来修改还想请教,线程回调函数只能接收一个参数吧? 在Worker线程中操作CWnd*,不行。class CYourDialog{...static UINT ThreadFunc(LPVOID pUser){//AfxBeginThread(ThreadFunc,this); return (reinterpret_cast<CYourDialog*>(pUser))->ThreadProc(); } UINT ThreadProc();...} 我试了下用this->m_hWnd做全局变量,在THREADPROC中使用::SetDlgItemText(窗口句柄,..,..)是可行的;还有其它好办法吗? // 要在线程中改变对话框上的值关键还是要把类的指针传进去才行// 创建线程把this指传进去AfxBeginThread(ThreadFunc,this);// 线程函数UINT CXxx::ThreadProc(LPVOID lparam){ CXxx* pDlg = (CXxx*)lparam; CString str; for(int i=0;i<1000;i++) { str.Format("This:%d",i); pDlg->m_edit.SetWindowText(str); pDlg->m_edit.UpdateWindow(); } return 0;} 再AfxBeginThread函数中,第二个参数传递对话框的指针。 HWND hwndEdit;void CTestView::OnButton7() { int x; DWORD dwThreadID; LastData = Data = 0; bExit = false; GetDlgItem(IDC_EDIT3,&hwndEdit); FThread=CreateThread(NULL,0,DisplayData, (LPVOID )&x,CREATE_SUSPENDED,&dwThreadID); ResumeThread(FThread);}DWORD WINAPI DisplayData(LPVOID param){ MSG msg; CString s_Data; while(TRUE) { Data++; if(LastData != Data) { s_Data.Format("%d",Data); ::SetWindowText(hwndEdit,s_Data); LastData = Data; } if(bExit) ExitThread(0); } return 0;} 请问CTypedPtrArray怎么生成2维数组 便宜售C/C++/VC旧书了,想要的进来看一下(书名见列表),方便大家,请版主不要删,谢谢! 通过 IHTMLDocument2 (execScript)调用javascript脚本有时候可以,有时候不行!! 点和线的问题,请教. 在视图类中如何得到用户区的大小?多谢! 如何获得普通医疗器械的串口输出数据! 关于内存释放的问题? 去年的今天我来到了北京,一年好快呀!放分纪念一下! 一直困扰的问题-resource.h 寻找一个控件,使用户只能输入000.0000型的数据。 问一个关于.ncb的问题 文件传送
还想请教,线程回调函数只能接收一个参数吧?
{
...
static UINT ThreadFunc(LPVOID pUser){//AfxBeginThread(ThreadFunc,this);
return (reinterpret_cast<CYourDialog*>(pUser))->ThreadProc();
}
UINT ThreadProc();
...
}
AfxBeginThread(ThreadFunc,this);// 线程函数
UINT CXxx::ThreadProc(LPVOID lparam)
{
CXxx* pDlg = (CXxx*)lparam;
CString str;
for(int i=0;i<1000;i++)
{
str.Format("This:%d",i);
pDlg->m_edit.SetWindowText(str);
pDlg->m_edit.UpdateWindow();
}
return 0;
}
void CTestView::OnButton7()
{
int x;
DWORD dwThreadID; LastData = Data = 0;
bExit = false; GetDlgItem(IDC_EDIT3,&hwndEdit); FThread=CreateThread(NULL,0,DisplayData,
(LPVOID )&x,CREATE_SUSPENDED,&dwThreadID); ResumeThread(FThread);
}
DWORD WINAPI DisplayData(LPVOID param)
{
MSG msg;
CString s_Data;
while(TRUE)
{
Data++;
if(LastData != Data)
{
s_Data.Format("%d",Data);
::SetWindowText(hwndEdit,s_Data);
LastData = Data;
} if(bExit)
ExitThread(0); }
return 0;
}