我在 OnInitDialog 里 调用 SetDlgItemText 给编辑框 赋初值 时没问题。。 但是在 程序运行时。 我在 其它函数里调用 SetDlgItemText 时,, 在 SetDlgItemText 里卡住 不动了。 不知道原因 。 很久没用MFC了。。 请求大家帮助。
解决方案 »
- 真心求大家分析下下面我2通宵没看懂的代码中的消息循环!感谢一辈子
- 高分求助 关于对话框程序 按钮提示文字的
- zai单文档 多视图 的问题
- 模板特例化的难题,都困惑我两天了,Help me!!!!
- 【重大发现】
- 怎么修改 Sdi 程序的标题
- 推荐几个好的vc或c,c++源码站,除了codeproject和codeguru.
- class 类名,可以代替 #include "类声明.h" 吗?
- 请问,MsChart控件显示的图表类型中XY散点图是什么意思?
- 请问用vc调用java的可执行文件时传参问题
- visual studio 2008 制作安装程序,怎样将中文路径修改成英文路径
- 关于句柄和消息的问题
void AccountResCallBack(GSBsipAccountResDef *pRes)
{
SetDlgItemText( g_hDlg, RESULT, "aaa");
}
在这个全局函数里调用 SetDlgItemText,, 调用 方法如上。 但是 在 SetDlgItemText处程序 卡住 了。谁知道为什么。。
请问在 非成都函数 如果 调用 SetDlgItemText
RESULT 就是我的赋值 的 编辑框的ID。我确定我写对了。我说的卡住 不是死机。 是单步调试执行到 SetDlgItemText的时候, 按 F10执行下一步操作不动了。
memset(&callbackFun, 0, sizeof(GSCallbackFuncDef));
callbackFun.CallbackAuthorRes = AuthorResCallBack;AuthorResCallBack是回调函数
{
CROTestDlg *pThis = (CROTestDlg *)lpParameter; while(true)
{
if ( finish)
{
pThis->SetDlgItemInt( RESULT,res);
finish = false;
}
Sleep(1000);
} return 1;
}
{
// TODO: Add your control notification handler code here
CreateThread(0,0,SendWorkerThread,(LPVOID)this,0,0);
}BOOL finish = 1;DWORD WINAPI CDlgTestDlg::SendWorkerThread(LPVOID lpParameter)
{
CDlgTestDlg *pThis = (CDlgTestDlg *)lpParameter;
while(true)
{
if(finish)
{
pThis->SetDlgItemInt(IDC_EDIT_SET,10);
finish = false;
}
Sleep(1000);
}
return 1;
}
没有你所说的情况出现喔.会不会是你的其他代码有影响啊?
要不要发个工程来大家研究一下?
不同线程发送消息时会用到消息队列
如果主界面的线程阻塞的时候(如waitfor..., 循环...)SetDlgItem就会卡死主线程阻塞的时候消息队列就没办法处理, SendMessage会等待到消息处理完毕才返回
出现了楼主所说的卡住的现象.void CDlgTestDlg::OnButton1()
{
// TODO: Add your control notification handler code here
CreateThread(0,0,SendWorkerThread,(LPVOID)this,0,0);
while(1);// 加上这个,阻死窗口主线程.
}BOOL finish = 1;DWORD WINAPI CDlgTestDlg::SendWorkerThread(LPVOID lpParameter)
{
CDlgTestDlg *pThis = (CDlgTestDlg *)lpParameter;
while(true)
{
if(finish)
{
pThis->SetDlgItemInt(IDC_EDIT_SET,10);//这里就卡住响应不了了.
finish = false;
}
Sleep(1000);
}
return 1;
}