原文网址:https://software.intel.com/zh-cn/blogs/2010/11/30/vc-3

为了保证界面的用户体验经常要把数据处理等放到子线程中进行,然后把结果更新到主界面,通常有这样几种方法。

1. 启动线程时把控件关联变量的指针传参给线程函数,这种方法无疑是最简单的方法,但极容易造成访问异常,因为VC6中的控件都不是线程安全的。

2. 就是先进一点的方法,把控件的句柄传给线程函数,有时也不好用在子线程中通过SendNotifyMessage or PostMessage等进行操作。这种方法是线程安全的,但对许多未公开控件你根本不知道要发送什么消息的,比如绝大多数的ActiveX控件,像MSFLEXGRID、DBGRID,它们的消息ID是无从知晓的,这种时候第二种方法就没用了。

3. 这种方法我感觉是最万能的方法了,而且这样代码的逻辑也最清楚。就是在窗口类中针对线程要进行的操作自定义消息,启动线程时直接把窗口的句柄传给线程函数,线程要控制界面时直接给窗口发消息就可以了。窗口类中对自定义消息添加消息映射,在其中进行具体的控制操作。

自定义消息:

VC自定义消息的方法VC文章 2010-07-11 16:02:54 阅读2785 评论0 字号:大中小
第一步:定义消息。

#define WM_MY_MESSAGE (WM_USER+100)

第二步:实现消息处理函数。该函数使用WPRAM和LPARAM参数并返回LPESULT

LRESULT Dlg::OnMyMsg(WPARAM wParam, LPARAM lParam)
{

return 0;

}

第三步:在类头文件的AFX_MSG块中说明消息处理函数。

virtual BOOL OnInitDialog();
afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
afx_msg LRESULT OnMyMsg(WPARAM, LPARAM); //复制这里

DECLARE_MESSAGE_MAP()

第四步:在用户类的消息块中,使用ON_MESSAGE宏指令将消息映射到消息处理函数中。

BEGIN_MESSAGE_MAP(C自动填表Dlg, CDialog)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_MESSAGE(WM_MY_MESSAGE, OnMyMsg) //复制这里

//}}AFX_MSG_MAP
END_MESSAGE_MAP()

注意:自己添加的消息处理函数的返回值必须是LRESULT ,否则会出现“ON_MESSAGE转换类型无效”的提示信息!!!

转载于:https://www.cnblogs.com/wi100sh/p/4220131.html

【转】VC 多线程中控制界面控件的几种方法相关推荐

  1. VC多线程中控制界面控件的几种方法

    为了保证界面的用户体验经常要把数据处理等放到子线程中进行,然后把结果更新到主界面,通常有这样几种方法. 1.启动线程时把控件关联变量的指针传参给线程函数,这种方法无疑是最简单的方法,但极容易造成访问异 ...

  2. MFC中访问界面控件的两种方法

    1.在资源中创建一个对话框资源,放置一些控件,然后使用类向导创建一个此对话框类型的变量,项目中会自动创建此对话框的.h和.cpp文件. 有两种方式可在代码中访问控件. (1)如果在代码中直接访问,则使 ...

  3. Jsp页面中使用fckeditor控件的两种方法

    fckeditor控件请到官方网站下载[url]http://www.fckeditor.net[/url],本例主要用到FCKeditor_2.6.3.zip.fckeditor-java-demo ...

  4. QT-子线程或自定义类操作访问主界面UI控件的几种方法

    前言 QT创建窗体工程,一般在MainWindow或Dialog类里可以直接通过ui指针访问控件,但是添加新的类后又如何访问呢,可以通过以下几种方式: 1.将ui指针公开后直接访问 (1)例如有个自己 ...

  5. excel日历弄到html,Excel中进行添加日历控件的两种方法

    有时我们在运用Excel表格的时候会运用到日历的控件,可是小伙伴们却不知道在哪里添加.那么我们来看一下,它到底躲藏在哪里,又该怎么添加呢?今天,学习啦小编就教大家在Excel中进行添加日历控件的两种方 ...

  6. VC/MFC中的CComboBox控件使用详解

    CComboBox控件详解 CComboBox控件又称作组合框控件,其有三种形态可供选择,1.简单组合框(Simple)2.下拉组合框(Drop-down)3.下拉列表式组合框(Drop-down l ...

  7. c# vs2005 多线程中调用窗体控件 (摘)

    Vs 2003用多了,装了VS 2005就有点用不习惯了,以前在2003里面不会因为在线程里面对其它线程中的控件进行操作而报错,到了2005这个就变成一个异常了,不过这也是为了线程之间的安全性,所以只 ...

  8. HTML中禁用表单控件的两种方法readonly与disabled

    时候我们会希望表单上的控件是不可修改的,比如在修改密码的网页中,显示用户名的文本框就应该是不可修改状态的,下面与大家分享下禁用表中控件的两种方法 在网页的制作过程中,我们会经常使用到表单.但是有时候我 ...

  9. ASP.NET 中获取html控件的值的方法

    一.知识点: 1.name是用来提交数据的,提供给表单用,可以重复:  2.id则针对文档操作时候用,不能重复.如:document.getElementById():   document.getE ...

最新文章

  1. 公告三大“罪状”,无人驾驶公司Roadstar联合创始人被罢免
  2. AMNO.6 给出一个不多于5位的整数,要求 1、求出它是几位数 2、分别输出每一位数字 3、按逆序输出各位数字,例如原数为321,应输出123 输入 一个不大于5位的数字
  3. centos 安装 rabbitMq
  4. c语言ascw,Asc/AscB/AscW和Chr/ChrB/ChrW函数之间的区别
  5. susan算子的运用
  6. django-python3-mysql问题
  7. BZOJ-3171-循环格-TJOI2013-费用流
  8. java-构建jar带哟参数提示的
  9. javascript的DOM、BOM操作
  10. 中国铁路官宣:高铁Wi-Fi将融合5G技术
  11. traceping是什么意思_关于CCNA ,ping 与trace 有什么区别
  12. JS/NPAP之间传递数组:NPVARIANT_TO_OBJECT/OBJECT_TO_NPVARIANT
  13. 微服务:知识点梳理(SOA、服务拆分、服务治理、分布式事务)
  14. ESRI大赛三维模块介绍
  15. 批处理变量输出时提示“ECHO处于关闭状态”
  16. MacOS制作ubuntu18.04系统U盘启动盘
  17. 【JavaFx 构建ProAdmin UI界面】
  18. 怎么获取淘宝商品详情
  19. 2019区块链概念股龙头
  20. 数据留存的计算-sql boy必备

热门文章

  1. php 上传进度条api,php如何实现上传进度条
  2. python pip install 总是出错的解决方法_pip安装总是失败怎么办? 3个方法帮你解决...
  3. 5双机配置_CentOS 7 高可用双机热备实现
  4. java语言生日蛋糕代码_AcWing 168. 【Java】生日蛋糕
  5. Java Scheduler ScheduledExecutorService ScheduledThreadPoolExecutor示例
  6. linux tee命令_Linux tee命令示例
  7. dir函数python_Python dir()函数
  8. 迅捷cad_迅捷数组
  9. kotlin方法类型_Kotlin类型检查,Kotlin类型铸造
  10. Java中的原型设计模式