永发信息网

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

答案:2  悬赏:70  手机版
解决时间 2021-04-01 10:43
  • 提问者网友:寂寞梧桐
  • 2021-04-01 01:17
MFC如何在自定义函数中调用控件变量
最佳答案
  • 五星知识达人网友:七十二街
  • 2021-04-01 02:03
线程函数要定义为控件所在的父窗口类的“静态成员函数”,其参数要给定为该窗口类的对象指针,在调用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)的限制。
全部回答
  • 1楼网友:罪歌
  • 2021-04-01 03:18
将对象传进去追问怎么传啊?具体些,在哪里加上什么代码,菜鸟一个,求教啊追答你在CreateThread的时候第四个参数是可以穿入一个参数,然后你的DWORD WINAPI Producer(LPVOID lpPara)中LPVOID lpPara是接受到这个参数,你可以在CreateThread的时候传入一个this指针追问我是要输出信息到编辑框控件啊,怎么弄?追答把编辑框控件于变量绑定,然后传入这个变量所在的对象,然后通过修改这个变量就能改编辑框信息了追问Code Code
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯