永发信息网

MFC如何在自定义函数中调用控件变量

答案:2  悬赏:70  手机版
解决时间 2021-04-01 10:43
MFC如何在自定义函数中调用控件变量
最佳答案
线程函数要定义为控件所在的父窗口类的“静态成员函数”,其参数要给定为该窗口类的对象指针,在调用CreateThread创建线程时,由于线程函数的参数不是 void*,所以需将线程函数强制为 LPTHREAD_START_ROUTINE 类型,在线程函数里,可以通过参数传递进来的窗口指针访问其中的控件了。
例:
class CMyDialog : public CDialog { // 窗口类
...
CEdit m_edtMyEdit; // 编辑框控件对象
static DWORD WINAPI MyThreadRoutine (CMyDialog* pMyDialog); // 线程函数(静态成员函数),参数为窗口类指针
...
};

DWORD WINAPI CMyDialog::MyThreadRoutine (CMyDialog* pMyDialog) // 线程函数
{
...
pMyDialog->m_edtMyEdit.SetWindowText("MyEdit"); // 通过pMyDialog访问成员
...
}

可以在OnInitDialog中或合适的时机创建线程:
CreateThread (..., // 线程安全属性
..., // 栈大小
LPTHREAD_START_ROUTINE(MyThreadRoutine), // 线程函数,注意强制
this, // 线程函数的参数,必须是窗口类的对象指针,this就可以了。
..., // 线程创建属性
...); // 线程ID追问CreatThread的MyThreadRoutine找不到,未定义?追答MyThreadRoutine是窗口类的静态成员函数啊,你调用CreateThread时,必须在该类的作用域内,例如对话框的OnInitDialog函数里。MyThreadRoutine函数,不要定义在全局,否则在线程里访问控件,会遇到很多访问控制(private,protected)的限制。
全部回答
将对象传进去追问怎么传啊?具体些,在哪里加上什么代码,菜鸟一个,求教啊追答你在CreateThread的时候第四个参数是可以穿入一个参数,然后你的DWORD WINAPI Producer(LPVOID lpPara)中LPVOID lpPara是接受到这个参数,你可以在CreateThread的时候传入一个this指针追问我是要输出信息到编辑框控件啊,怎么弄?追答把编辑框控件于变量绑定,然后传入这个变量所在的对象,然后通过修改这个变量就能改编辑框信息了追问Code Code
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
北京匠心之轮好吗
关于端午节的诗句——《端午日》
我的男孩大结局是什么,大结局,人物最终结局
《水浒传》中梁山上先后三位首领的名字分别是
我从秦淮区扇骨里小区到鼓楼区汉口西路银河证
关于亚洲的气候说法,不正确的是A.海洋性特征
配眼镜瞳距问题,瞳距是什么意思
7.26E-06是什么意思
蓝之羽贵族羽绒被多少钱一床?要5980元吗?北
i3 540集成显卡和nvidia 7300le独显那个好
猎场中胡歌是不是死了
用一台直流电动机拖动另一台直流电动机,第2台
怀孕13周6天,为什么尿老想尿,刚刚上
12点1o分钟减9点4o分钟竖式怎么写
玉米十分甜是怎么一回事
推荐资讯
简述众数、中位数和均值的特点和应用场合。
重庆璧山秀湖美景看图写话
英语翻译如果这个我要买2个可以吗
庄重的乞讨阅读屏息细听的意思
分解因式:4X²-9Y²=?
□÷(54÷6)=10 方框里是几
本人想请教一个问题,这个世界上有哪些国家没
1976年刊发周总理逝世特辑的《人民画报》什么
算命日上月令如运关到底说是好还是坏
little by little是什么短语?
怎样才能用用四块相同的不等腰的直角三角板,
世上真的有僵尸行星吗
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?