工作者线程中怎样取对话框中的成员 我创建了一个对话框程序,在对话框中放入了一个Progress control,然后我想在一个工作者线程中控制该对话框进度的增长,可是工作者线程是一个全局函数,怎样才能得到该控件变量呢 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 首先要说的就是:线程中不能访问GDI的GDI对象,那样有异常,那那么你必须通过其他办法来做然后在创建THREAD的时候,你将DLG的handle传递给线程作为参数使用SendMessage或者postmessage给DLG,让DLG自己来更新 直接将progress control的HWND传递给线程 使用SendMessage或者postmessage给DLG,让DLG自己来更新这样比较好 获得HANDLE后呢?怎样得到指针?用FromHandle()返回的指针并不总是可用 不能在工作线程中使用FromHandle方法是CWnd::Deatch->向工作线程传递HWND->在工作线程调用CWnd::Attach. http://support.microsoft.com/default.aspx?scid=kb;en-us;147578http://support.microsoft.com/default.aspx?scid=kb;en-us;175668 可以将progress 窗口指针传入 线程函数 或者使用回掉函数. 回掉函数指针同样需要传入线程函数.一般这样实现的dialog 中有一个public 函数 设置进度public dialog::setpos(int)全局变量dialog* gpdlg;全局回掉函数void callbackfunc(int pos){ if (gpdlg) { gpdlg->setpos(pos); }}启动线程需要的工作dialog::beginthread(){ gpdlg = this; //启动线程 并传入 callbackfunc 函数地址}//线程函数typedef void(*call_func)(int);void thread(LPVOID param){ call_func pfunc =(call_func)param; //下面是伪代码,还需要注意线程间同步 //while() { // pfunc(进度); //}} 线程函数应该返回 UINT, 要改一下. 启动线程 可以这样 beginthread(thread ,(void*)callbackfunc) 具体参考 afxbeginthread 或者 _beginthread 的说明关键是把 callbackfunc 转为 (void*) 就可以了. 看不明白代码 关于写服务器程序的问题 怎么实现嵌在tab上打开文件对话框? vc操纵word问题:查找到图片后如何得到该图片的长宽信息 大家帮帮忙! 求教数据库的连接方式! 怎么实现把其他的程序窗口隐藏? 过驱动保护之 最新绕过TX驱动保护TesSafe.sys方法(现在可以用)3 搞了个完全免费的网站,没有脚本,没有弹出窗口,没有广告,推荐精品软件和网址,欢迎大家来看看,多多指教! 可以浏览自己的文档格式的IE plug-ins怎么编程,例如Adobe pdf Reader 4.0 菜鸟问题! 在VC中如何调用已经注册的COM对象,比如Wscript.Shell对象 ?
线程中不能访问GDI的GDI对象,那样有异常,那那么你必须通过其他办法来做
然后在创建THREAD的时候,你将DLG的handle传递给线程作为参数
使用SendMessage或者postmessage给DLG,让DLG自己来更新
这样比较好
方法是
CWnd::Deatch->向工作线程传递HWND->在工作线程调用CWnd::Attach.
http://support.microsoft.com/default.aspx?scid=kb;en-us;175668
一般这样实现的
dialog 中有一个public 函数 设置进度public dialog::setpos(int)全局变量
dialog* gpdlg;全局回掉函数
void callbackfunc(int pos)
{
if (gpdlg) {
gpdlg->setpos(pos);
}
}启动线程需要的工作
dialog::beginthread()
{
gpdlg = this;
//启动线程 并传入 callbackfunc 函数地址
}//线程函数
typedef void(*call_func)(int);
void thread(LPVOID param)
{
call_func pfunc =(call_func)param;
//下面是伪代码,还需要注意线程间同步
//while() {
// pfunc(进度);
//}}
可以这样
beginthread(thread ,(void*)callbackfunc) 具体参考 afxbeginthread 或者 _beginthread 的说明
关键是把 callbackfunc 转为 (void*) 就可以了.