你的分享就是我们的动力 ---﹥

wince6.0 MFC应用程序怎使除此以外一个对话框的静态文本框显示指定内容

wince6.0 MFC应用程序怎使另外一个对话框的静态文本框显示指定内容
void CMainUI::OnBnClickedButtonSet()
{
// TODO: Add your control notification handler code here
CPswIn dlg;
dlg.DoModal();
CString str;
str.Format(_T("请输入密码(0-9999):"),NULL);
::SendDlgItemMessage(dlg.m_hWnd,IDC_STATIC_IPPR,WM_SETTEXT,0,(LPARAM)(LPCTSTR)str.GetBuffer(0));
}
点击CMainUI对话框上的ButtonSet,显示CPswIn对话框,需要在CPswIn对话框上的静态文本框中显示请输入密码(0-9999):

上面的代码编译没出错,但是不能显示文字。
------解决思路----------------------
引用:
Quote: 引用:

你上面的代码,因为 dlg.DoModal(); 后会阻塞代码的运行,直到 dlg 窗体关闭后才会继续运行。
所以,无法完成对 dlg 窗体中静态文本框 内内容的修改。

按你上面的逻辑要求,需要用到线程。将 dlg.DoModal(); 放在线程中,或将 改变静态文本框 内容的代码放到线程中。


你说的逻辑我懂了,但是不知道怎么编程实现,就操作系统里学过进程线程,很久没搞过这种东西,能不能给点代码看下,新手。谢了!


新手,这不是借口。你不做就一直是新手!
网上有很多的关于线程的使用方法。
------解决思路----------------------
用线程

引用:
你上面的代码,因为 dlg.DoModal(); 后会阻塞代码的运行,直到 dlg 窗体关闭后才会继续运行。
所以,无法完成对 dlg 窗体中静态文本框 内内容的修改。

按你上面的逻辑要求,需要用到线程。将 dlg.DoModal(); 放在线程中,或将 改变静态文本框 内容的代码放到线程中。


不推荐用线程。用线程的方法会将dlg变成非模态窗口,触摸屏的时候点击后面的窗口会将当前dlg窗口弄到后面去,如果隐藏了任务栏搞不好程序可能就会死锁。
------解决思路----------------------
假如说,为了str内容变化,那么直接提供带参数的构造函数,传入str也是很简单的啊。
还搞啥线程??
------解决思路----------------------
重新看了一下你的题目内容,我理解错了,你这种情况更简单,直接在CPswIn 类里定义一个成员变量,然后在调用DoModal之前,设置一下它的值就可以了!
CPswIn dlg;
dlg.SetValue(.....);  // 这里添加
dlg.DoModal();
//.....