VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

有编程疑问吗?还请到提问专区发帖提问!
搜索
查看: 434|回复: 5

[求助] 关于多线程操作分割窗口的问题

[复制链接]
71_avatar_middle
在线会员 zzw843 发表于 2018-8-10 10:32:43 | 显示全部楼层 |阅读模式
3驿站币
本帖最后由 zzw843 于 2018-8-10 10:50 编辑

各位大侠:
       小弟有这样的一个困扰求助各位。
       我做了一个基于网络题库系统,客户端使用的是分割窗口,下图是运行界面,正常点击左侧的各个按钮右侧窗口都能正常切换,切换执行代码如下。
  1. BOOL CMainFrame::SetView(int index)
  2. {
  3.         m_wndSplitter.DeleteView(0, 1);
  4.         switch (index)
  5.         {
  6.         case -1://欢迎
  7.         {
  8.                                 if (!m_wndSplitter.CreateView(0, 1, RUNTIME_CLASS(CHuanYingView), CSize(100, 100), NULL))
  9.                                         return FALSE;
  10.                                 break;
  11.         }
  12.         case 0://登陆
  13.         {
  14.                            if (!m_wndSplitter.CreateView(0, 1, RUNTIME_CLASS(CDengLuScrollView), CSize(100, 100), NULL))
  15.                                    return FALSE;
  16.                            break;
  17.         }
  18.         case 1://题库管理
  19.         {
  20.                            if (!m_wndSplitter.CreateView(0, 1, RUNTIME_CLASS(CTiKuTabView), CSize(100, 100), NULL))
  21.                                    return FALSE;
  22.                            break;
  23.         }
  24.         case 2://试卷
  25.         {
  26.                            if (!m_wndSplitter.CreateView(0, 1, RUNTIME_CLASS(CShiJuanScrollView), CSize(100, 100), NULL))
  27.                                    return FALSE;
  28.                            break;
  29.         }
  30.         case 3://密码
  31.         {
  32.                            if (!m_wndSplitter.CreateView(0, 1, RUNTIME_CLASS(CMiMaScrollView), CSize(100, 100), NULL))
  33.                                    return FALSE;
  34.                            break;
  35.         }
  36.         case 4://退出
  37.         {
  38.                            if (!m_wndSplitter.CreateView(0, 1, RUNTIME_CLASS(CDengLuScrollView), CSize(100, 100), NULL))
  39.                                    return FALSE;
  40.                            break;
  41.         }
  42.         case 5://设置
  43.         {
  44.                            if (!m_wndSplitter.CreateView(0, 1, RUNTIME_CLASS(CSheZhiScrollView), CSize(100, 100), NULL))
  45.                                    return FALSE;
  46.                            break;
  47.         }
  48.         case 6://试卷管理
  49.         {
  50.                            if (!m_wndSplitter.CreateView(0, 1, RUNTIME_CLASS(CShiJuanGLScrollView), CSize(100, 100), NULL))
  51.                                    return FALSE;
  52.                            break;
  53.         }
  54.         }
  55.         m_leftxinxi = index;
  56.         m_wndSplitter.RecalcLayout();
  57.         return TRUE;
  58. }
复制代码

       运行过程中想通过定期通讯来判断服务器是否还在运行或账号是否已退出,于是我用了多线程的方法来执行,用户登陆时启动线程,用一个死循环定期通讯,如果服务器返回用户已退出就执行上面的代码强制切换界面到登陆界面。现在的问题是多线程执行到m_wndSplitter.DeleteView(0, 1)时错误,为什么我正常点击按钮就能执行,多线程就不能执行呢?请各位帮忙分析一下!多线程代码如下:
  1. UINT TongxinThreadFunc(LPVOID lpParam)
  2. {
  3.         CMainFrame* m_main = (CMainFrame*)lpParam;
  4.         m_main->SetView(4);
  5.         return 0;
  6. }
复制代码
1.png

最佳答案

查看完整内容

普通工作的线程不能直接操作界面UI,一操作就会崩溃。 如果要操作的话就必须给窗口发消息,可以使用自定义消息的形式发过去,让其进行切换。




上一篇:一个程序获取另一个程序的设置
下一篇:VC++如何操作WORD生成文本框、设置页眉首页不同等

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

51_avatar_middle
online_admins Syc 发表于 2018-8-10 10:32:44 | 显示全部楼层
普通工作的线程不能直接操作界面UI,一操作就会崩溃。
如果要操作的话就必须给窗口发消息,可以使用自定义消息的形式发过去,让其进行切换。

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复

使用道具 举报

71_avatar_middle
ico_lz  楼主| zzw843 发表于 2018-8-10 16:12:18 | 显示全部楼层
Syc 发表于 2018-8-10 11:04
普通工作的线程不能直接操作界面UI,一操作就会崩溃。
如果要操作的话就必须给窗口发消息,可以使用自定义 ...

谢谢Syc,按你的方法已经测试成功!给分
顺便再问一下,如何用VC创建WORD文本框,我用宏的方法不显示代码……

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复

使用道具 举报

51_avatar_middle
online_admins Syc 发表于 2018-8-10 16:34:14 | 显示全部楼层
zzw843 发表于 2018-8-10 16:12
谢谢Syc,按你的方法已经测试成功!给分
顺便再问一下,如何用VC创建WORD文本框,我用宏的方法不显示代 ...

用 vc 显示 word 的话一般情况下就是调用 office 的 word com 组件,加到界面上,之后显示

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复

使用道具 举报

71_avatar_middle
ico_lz  楼主| zzw843 发表于 2018-8-10 17:55:21 | 显示全部楼层
Syc 发表于 2018-8-10 16:34
用 vc 显示 word 的话一般情况下就是调用 office 的 word com 组件,加到界面上,之后显示

是的,我就是这样实现的,现在想创建一个文本框,想用WORD的宏功能看创建代码,但是什么也没有,不知道该如何实现,网上边看到一种方法,也是没能实现。

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复

使用道具 举报

21_avatar_middle
在线会员 wangzhen369 发表于 2018-8-10 21:42:28 | 显示全部楼层
虽然没看懂,但是感觉很厉害的样子

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号tongdun|网站地图wx_jqr

GMT+8, 2018-12-11 22:52

Powered by Discuz! X3.4

© 2009-2018 cctry.com

快速回复 返回顶部 返回列表