VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 509|回复: 2

[已解决]老大的高级班网络编程源码(消息响应chatClientDlg.RunModalLoop();)是啥意识啊

[复制链接]
72_avatar_middle
最佳答案
0 
在线会员 发表于 2020-4-9 17:08:24 | 显示全部楼层 |阅读模式
不知道这个函数放在这里有什么作用呢?求大佬提供一下思路。
下面是老大的代码:
  1. BOOL CChatClientApp::InitInstance()
  2. {
  3.        
  4.         INITCOMMONCONTROLSEX InitCtrls;
  5.         InitCtrls.dwSize = sizeof(InitCtrls);
  6.        
  7.         InitCtrls.dwICC = ICC_WIN95_CLASSES;
  8.         InitCommonControlsEx(&InitCtrls);

  9.         CWinAppEx::InitInstance();

  10.         AfxEnableControlContainer();

  11.         SetRegistryKey(_T("Local AppWizard-Generated Applications"));

  12.         WinSockInit();

  13.         CChatClientDlg chatClientDlg;
  14.         m_pMainWnd = &chatClientDlg;
  15.         chatClientDlg.Create(IDD_CHATCLIENT_DIALOG);
  16.         g_ChatClientDlg = &chatClientDlg;

  17.         CLoginDlg loginDlg;
  18.         INT_PTR dlgRet = loginDlg.DoModal();
  19.         if(loginDlg.m_bAuthOK == FALSE){
  20.                 return FALSE;
  21.         }

  22.         loginDlg.m_pChatRoomClient->SetTargetCallback(chatClientDlg.m_hWnd);
  23.         chatClientDlg.ShowWindow(SW_SHOW);
  24.         chatClientDlg.RunModalLoop();                   //在这里 不太懂

  25.        
  26.         return FALSE;
  27. }
复制代码


网上是这么解释的,但是我不太懂诶
        RunModalLoop里面有一个Modal,这里指的是模式的意思,比如弹出的消息框,也有对话框是模式的,模式的定义上是,当模式对话框打开的时候,除非用户关闭了这个对话框,否则不能操作这个对话框的父级窗口,比如让用户输入名称、密码、金额之类的弹出窗口就是模式窗口。运行模式窗口显示运行的消息循环就是ModalLoop,开启这个循环的方法就是RunModalLoop。也就是说RunModalLoop这个方法开启的是模式对话框的消息循环,而直接使用Run开启的是普通的非模式的窗口的消息循环。比如像qq之类的窗口就是非模式的,当然qq也可以打开模式的窗口,比如传文件时候选择文件的窗口就是模式的。
最佳答案
51_avatar_small
2020-4-10 09:14:14
正如楼上所说,RunModalLoop 确实是个“死”循环。CChatClientApp::InitInstance 是主线程的初始化函数,该函数退出了程序就退出了,如果 InitInstance 内部创建的是模态对话框那问题不大,本身 DoModal 之后就会 “卡”住,但如果是非模态对话框就不行了,直接往下走了,所以为了避免程序退出,加了个 RunModalLoop
runmodalloop.JPG




上一篇:注册表权限
下一篇:API 函数ShellExecuteEx 为什么 我运行了没有反应?
51_avatar_middle
最佳答案
90 
online_admins 发表于 2020-4-10 09:14:14 | 显示全部楼层    本楼为最佳答案   
bestAnswer
正如楼上所说,RunModalLoop 确实是个“死”循环。CChatClientApp::InitInstance 是主线程的初始化函数,该函数退出了程序就退出了,如果 InitInstance 内部创建的是模态对话框那问题不大,本身 DoModal 之后就会 “卡”住,但如果是非模态对话框就不行了,直接往下走了,所以为了避免程序退出,加了个 RunModalLoop
85_avatar_middle
最佳答案
3 
在线会员 发表于 2020-4-9 23:19:23 | 显示全部楼层
本帖最后由 tjzoo111 于 2020-4-9 23:53 编辑

封装虽然看起来简单 但是耽误人学习
不会C++但是 看到有loop 就知道可能是个循环
while (GetMessage(&_msg, NULL, 0, 0))
        {
                TranslateMessage(&_msg);
                DispatchMessage(&_msg);
        }
大楷就这意思   和系统互交
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

×【发帖 友情提示】
1、请回复有意义的内容,请勿恶意灌水;
2、纯数字、字母、表情等无意义的内容系统将自动删除;
3、若正常回复后帖子被自动删除,为系统误删的情况,请重新回复其他正常内容或等待管理员审核通过后会自动发布;
4、感谢您对VC驿站一如既往的支持,谢谢合作!

关闭

站长提醒上一条 /2 下一条

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

GMT+8, 2023-9-28 12:19

Powered by CcTry.CoM

© 2009-2021 cctry.com

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