小弟在做一个程序
基于对话框的
我想在一个文本框里面动态的显示程序现在的运行位置
由于是多线程程序 因此 我用的是SendMessage 发送消息给主窗口但是 程序运行起来的时候 , 编辑框的更新特别卡 好长时间不出现东西 然后一次出现很多东西因此 我猜想可能要使用界面线程可是 问题来了 我的程序就是一个对话框 如何创建界面线程??有没有别的处理办法??可以让我的编辑框比较流畅的显示程序运行的位置?
基于对话框的
我想在一个文本框里面动态的显示程序现在的运行位置
由于是多线程程序 因此 我用的是SendMessage 发送消息给主窗口但是 程序运行起来的时候 , 编辑框的更新特别卡 好长时间不出现东西 然后一次出现很多东西因此 我猜想可能要使用界面线程可是 问题来了 我的程序就是一个对话框 如何创建界面线程??有没有别的处理办法??可以让我的编辑框比较流畅的显示程序运行的位置?
//自定义消息处理函数
LRESULT CTraficDlg::ChangeUI(WPARAM wParam,LPARAM lParam)
{
CString str = (LPCTSTR)lParam;
if(str != "查询到")
str+="\r\n";
m_strMsg+=str;
UpdateData(FALSE);
return 0;
}
...
ON_MESSAGE (WM_USER_CHANGEUI, ChangeUI)
CString str = (LPCTSTR)lParam;
if(str != "查询到")
str+="\r\n";
m_strMsg+=str;
UpdateData(FALSE);
这部分的操作放到线程里处理,用一个while(GetMessage(.....))循环,当有消息时就发送PostThreadMessage消息给这个线程
我在做一个多线程显示时,用的就是这个函数向主界面的动态显示列表发送消息的。
static UINT YourThreaded( LPVOID pVoid );
m_pThread = ::AfxBeginThread( YourThreaded, (LPVOID) this,
THREAD_PRIORITY_BELOW_NORMAL );
UINT CYourDlg::YourThreaded(LPVOID pVoid)
{
CYourDlg* pThis = (CYourDlg*)pVoid;
while(GetMessage(.....))
{
..................
..........................
pThis->m_strMsg+=str;
................
}
return 0;
}
大概就是这个过程
退出线程时就m_pThread.PostThreadMessage(WM_QUIT...)
我试试看 行的话 分的大头就是你的~
没想到过用this指针...
没有那么麻烦,填上红色那句(IDC_MYEDIT改成你的edit的id)应该就可以了。
就用SendMessage
在线程里....
sendmessage(主窗口handle, 消息名,0, "要打打印的字符串");在线程外响应这个消息,接收字串,加到Listbox如果这样都出问题,LZ应该是范了某个低级错误,或者是486的机器?
发帖有点草率...
确实是用的SendMessage...
应该不会有什么错误
如果不用界面线程的话
我是运行一部分 发送一个消息
然后 Sleep一下
再运行 再发送 再Sleep而显示出来的时候就是要么不显示 要么一下全出来了
按照MSDN上面说的 应该是消息处理了才会有返回的 才会继续运行的
估计是机器的问题...