• 酱香酒为什么要在端午时节制曲微生物 酒曲 2019-08-17
  • “光有米”平台经营者利用花呗套现3.2亿 涉罪被批捕 2019-08-17
  • “两年督遍全国”,期待环保督察常态化 2019-08-15
  • 《归去来》:青年一代 在温柔的撕裂中觉醒 2019-08-15
  • 而另外发达国家都做不到,垃圾只能往中国出口。前两年我们才禁止了洋垃圾的进口,我们生产的垃圾要销往哪里 2019-08-12
  • 更聪明、更可靠、更低价 广汽传祺全新GS4上市 2019-08-12
  • 中国端午节文化走进韩国校园 2019-08-10
  • 秦皇岛原料药干混输送一体机研发生产基地正式投产 2019-08-10
  • 懒人科技的又一巅峰  “动作识别笔”让生活更便捷 2019-08-05
  • 端午假期国内游客超8900万人次 全域旅游见成效 2019-08-02
  • 科大讯飞拟募资金约36亿 加码人工智能 2019-08-01
  • 你说科技创新的经济在哪里,怎就看不到? 2019-07-30
  • 消费提醒:购买二手车 留意隐形瑕疵 2019-07-30
  • 无论“胡萝卜”还是“大棒”,美方都要拿出诚意来 2019-07-29
  • 普京力挽狂澜,从北高加索平叛到格鲁吉亚兴兵,从克里米亚回归到叙利亚反恐,给了俄罗斯人民新生——这一切都是和中国同志的支持分不开的。 2019-07-26
  • 分享到:文章主题: MFC中CWnd::GetDlgItem()的坑
    bn95楼主
    本能
    身份
    用户
    文章
    393
    星座
    水瓶座
    积分
    27541
    等级
    乔木(5)

    发信人: bn95 (本能), 信区: Programming
    标  题: MFC中CWnd::GetDlgItem()的坑
    发信站: 水木社区 (Fri Nov 16 09:57:46 2018), 站内
      
    CString str;
    CWnd* pWnd;
    pWnd = GetDlgItem(IDC_STATIC_INFO);
    pWnd->GetWindowText(str);
    这样的代码是不合规范而且是危险的,可能导致程序崩溃。如果你这么做没遇到崩溃是你的程序的运气。
    因为:
      
    CWnd::GetDlgItem  
    CWnd* GetDlgItem( int nID ) const;
      
    void CWnd::GetDlgItem( int nID, HWND* phWnd ) const;
      
    Return Value
      
    A pointer to the given control or child window. If no control with the integer ID given by the nID parameter exists, the value is NULL.  
      
    The returned pointer may be temporary and should not be stored for later use.
      
    --
    ※ 修改:·bn95 于 Nov 16 09:58:32 2018 修改本文·[FROM: 183.134.62.*]
    ※ 来源:·水木社区 //www.lmfr.net·[FROM: 183.134.62.*]

    返回顶部
    xiaoju第1楼
    可爱的龙猫
    身份
    用户
    文章
    98952
    积分
    49961
    等级
    斗拱(14)

    河北快三开奖结果 www.lmfr.net 发信人: xiaoju (可爱的龙猫), 信区: Programming
    标  题: Re: MFC中CWnd::GetDlgItem()的坑
    发信站: 水木社区 (Fri Nov 16 10:36:37 2018), 站内
      
    这个用法是没有问题的,你没看懂帮助说的到底是什么。程序如果真崩了是因为你的IDC_STATIC_INFO不存在。
      
    MSDN自己例子就是这么用的:
    https://msdn.microsoft.com/en-us/library/1xb05f0h.aspx#cwnd__getdlgitem
      
        // uses GetDlgItem to return a pointer to a user interface control
        CEdit* pBoxOne;
        pBoxOne = (CEdit*)GetDlgItem(IDC_MYEDIT);
        GotoDlgCtrl(pBoxOne);
      
      
    【 在 bn95 (本能) 的大作中提到: 】
    : 标  题: MFC中CWnd::GetDlgItem()的坑
    : 发信站: 水木社区 (Fri Nov 16 09:57:46 2018), 站内
    :  
    : CString str;
    : CWnd* pWnd;
    : pWnd = GetDlgItem(IDC_STATIC_INFO);
    : pWnd->GetWindowText(str);
    : 这样的代码是不合规范而且是危险的,可能导致程序崩溃。如果你这么做没遇到崩溃是你的程序的运气。
    : 因为:
    :  
    : CWnd::GetDlgItem  
    : CWnd* GetDlgItem( int nID ) const;
    :  
    : void CWnd::GetDlgItem( int nID, HWND* phWnd ) const;
    :  
    : Return Value
    :  
    : A pointer to the given control or child window. If no control with the integer ID given by the nID parameter exists, the value is NULL.  
    :  
    : The returned pointer may be temporary and should not be stored for later use.
    :  
    : --
    : ※ 修改:·bn95 于 Nov 16 09:58:32 2018 修改本文·[FROM: 183.134.62.*]
    : ※ 来源:·水木社区 //www.lmfr.net·[FROM: 183.134.62.*]
      
      
    --
      
    ※ 来源:·水木社区 www.lmfr.net·[FROM: 113.29.7.*]

    返回顶部
    bn95第2楼
    本能
    身份
    用户
    文章
    393
    星座
    水瓶座
    积分
    27541
    等级
    乔木(5)

    发信人: bn95 (本能), 信区: Programming
    标  题: Re: MFC中CWnd::GetDlgItem()的坑
    发信站: 水木社区 (Fri Nov 16 15:17:41 2018), 站内
      
    微软不是神,微软花了几十年改bug,bug依然越来越多。
      
      CEdit* pBoxOne;  
      pBoxOne = (CEdit*)GetDlgItem(IDC_MYEDIT);  
      dosomething();//如果这里花了几秒钟时间去干其他活呢????程序将会不可预知。虽然大部分时间和系统上没事,但有时会出事。因为微软MFC专门有一个线程在空闲时间去释放这些GetDlgItem返回的指针对象。
      GotoDlgCtrl(pBoxOne);  
        
    这是我数天排查一个bug进行地毯式打印log和看mfc代码得出来的教训。
    IDC_STATIC_INFO不可能消失,因为就是一个对话框程序而已,对话框不会消失。
    GetDlgItem的返回也是对的,立即进行指针操作也是对的。但是过一点时间再操作就不可预知了。
      
    有代码洁癖的我自此以后再也不用GetDlgItem返回对象指针了,而是直接用api返回窗口句柄保存起来:
    HWND GetDlgItem(  HWND hDlg,       // handle to dialog box
       int nIDDlgItem   // control identifier);
      
    【 在 xiaoju 的大作中提到: 】
    : 这个用法是没有问题的,你没看懂帮助说的到底是什么。程序如果真崩了是因为你的IDC_STATIC_INFO不存在。
    : MSDN自己例子就是这么用的:
    : https://msdn.microsoft.com/en-us/library/1xb05f0h.aspx#cwnd__getdlgitem
    : ...................
      
    --
    ※ 修改:·bn95 于 Nov 16 15:33:06 2018 修改本文·[FROM: 183.134.62.*]
    ※ 来源:·水木社区 //www.lmfr.net·[FROM: 183.134.62.*]

    返回顶部
    dormouseBHU第3楼
    dormouseBHU
    身份
    用户
    文章
    4476
    星座
    金牛座
    积分
    57376
    等级
    楠木(12)

    发信人: dormouseBHU (dormouseBHU), 信区: Programming
    标  题: Re: MFC中CWnd::GetDlgItem()的坑
    发信站: 水木社区 (Fri Nov 16 17:25:08 2018), 站内
      
    MFC哪个线程是用来清理这个的?
    我好歹也玩过几年逆向工程,从来没发现MFC有你说的这个线程…
    【 在 bn95 的大作中提到: 】
    : 微软不是神,微软花了几十年改bug,bug依然越来越多。
    :  CEdit* pBoxOne;  
    :  pBoxOne = (CEdit*)GetDlgItem(IDC_MYEDIT);  
    : ...................
    --
      
    ※ 来源:·水木社区 //m.www.lmfr.net·[FROM: 223.104.3.*]

    返回顶部
    xiaoju第4楼
    可爱的龙猫
    身份
    用户
    文章
    98952
    积分
    49961
    等级
    斗拱(14)

    发信人: xiaoju (可爱的龙猫), 信区: Programming
    标  题: Re: MFC中CWnd::GetDlgItem()的坑
    发信站: 水木社区 (Fri Nov 16 18:14:36 2018), 站内
      
    倒,MFC这种老古董你玩出垃圾回收了
      
    【 在 bn95 (本能) 的大作中提到: 】
    : 微软不是神,微软花了几十年改bug,bug依然越来越多。
    :  CEdit* pBoxOne;  
    :  pBoxOne = (CEdit*)GetDlgItem(IDC_MYEDIT);  
    : ...................
      
    --
      
    ※ 来源:·水木社区 www.lmfr.net·[FROM: 27.91.71.*]

    返回顶部
    tazz第5楼
    速度复合弓
    身份
    用户
    文章
    12249
    星座
    水瓶座
    积分
    33369
    等级
    灵樨(8)

    发信人: tazz (速度复合弓), 信区: Programming
    标  题: Re: MFC中CWnd::GetDlgItem()的坑
    发信站: 水木社区 (Fri Nov 16 18:37:39 2018), 站内
      
    哇,好久没见到mfc代码了。
    因为都在一个线程里,所以没问题的。
      
    【 在 bn95 的大作中提到: 】
    : CString str;
    : CWnd* pWnd;
    : pWnd = GetDlgItem(IDC_STATIC_INFO);
    : ...................
    --
      
    ※ 来源:·水木社区 //m.www.lmfr.net·[FROM: 61.151.178.*]

    返回顶部
    xiaoju第6楼
    可爱的龙猫
    身份
    用户
    文章
    98952
    积分
    49961
    等级
    斗拱(14)

    发信人: xiaoju (可爱的龙猫), 信区: Programming
    标  题: Re: MFC中CWnd::GetDlgItem()的坑
    发信站: 水木社区 (Fri Nov 16 18:42:52 2018), 站内
      
    楼主大概率自己开了个线程把UI线程的东西给释放了
      
    新手一般对指针和线程的使用非常大胆,所以python既没指针也不支持多线程。MFC设计的时候,既没有C++11的std::thread和capture,又没有ATL这种简易封装库,想把多线程写对很不容易
      
    【 在 tazz (速度复合弓) 的大作中提到: 】
    : 哇,好久没见到mfc代码了。
    : 因为都在一个线程里,所以没问题的。
      
      
    --
      
    ※ 来源:·水木社区 www.lmfr.net·[FROM: 27.91.71.*]

    返回顶部
    bn95第7楼
    本能
    身份
    用户
    文章
    393
    星座
    水瓶座
    积分
    27541
    等级
    乔木(5)

    发信人: bn95 (本能), 信区: Programming
    标  题: Re: MFC中CWnd::GetDlgItem()的坑
    发信站: 水木社区 (Sat Nov 17 01:53:58 2018), 站内
      
    我经历过这种灾难
    https://blog.csdn.net/mood8125/article/details/1113341
      
    【 在 dormouseBHU 的大作中提到: 】
    : MFC哪个线程是用来清理这个的?
    : 我好歹也玩过几年逆向工程,从来没发现MFC有你说的这个线程…
      
    --
      
    ※ 来源:·水木社区 //www.lmfr.net·[FROM: 183.134.62.*]

    返回顶部
    dormouseBHU第8楼
    dormouseBHU
    身份
    用户
    文章
    4476
    星座
    金牛座
    积分
    57376
    等级
    楠木(12)

    发信人: dormouseBHU (dormouseBHU), 信区: Programming
    标  题: Re: MFC中CWnd::GetDlgItem()的坑
    发信站: 水木社区 (Sat Nov 17 08:31:48 2018), 站内
      
    OnIdle() 的作用就是释放临时资源,你没搞懂onidle的作用就乱用,这个锅mfc不能背。
    【 在 bn95 的大作中提到: 】
    : 我经历过这种灾难
    : https://blog.csdn.net/mood8125/article/details/1113341
    :
    --
      
    ※ 来源:·水木社区 //m.www.lmfr.net·[FROM: 223.72.78.*]

    返回顶部
    bn95第9楼
    本能
    身份
    用户
    文章
    393
    星座
    水瓶座
    积分
    27541
    等级
    乔木(5)

    发信人: bn95 (本能), 信区: Programming
    标  题: Re: MFC中CWnd::GetDlgItem()的坑
    发信站: 水木社区 (Sat Nov 17 09:18:44 2018), 站内
      
    我又没用OnIdle() ,OnIdle() 不是系统自动运行的?
    【 在 dormouseBHU 的大作中提到: 】
    : OnIdle() 的作用就是释放临时资源,你没搞懂onidle的作用就乱用,这个锅mfc不能背。
    : :
      
    --
    ※ 修改:·bn95 于 Nov 17 09:19:15 2018 修改本文·[FROM: 223.72.82.*]
    ※ 来源:·水木社区 //www.lmfr.net·[FROM: 223.72.82.*]

    返回顶部
  • 酱香酒为什么要在端午时节制曲微生物 酒曲 2019-08-17
  • “光有米”平台经营者利用花呗套现3.2亿 涉罪被批捕 2019-08-17
  • “两年督遍全国”,期待环保督察常态化 2019-08-15
  • 《归去来》:青年一代 在温柔的撕裂中觉醒 2019-08-15
  • 而另外发达国家都做不到,垃圾只能往中国出口。前两年我们才禁止了洋垃圾的进口,我们生产的垃圾要销往哪里 2019-08-12
  • 更聪明、更可靠、更低价 广汽传祺全新GS4上市 2019-08-12
  • 中国端午节文化走进韩国校园 2019-08-10
  • 秦皇岛原料药干混输送一体机研发生产基地正式投产 2019-08-10
  • 懒人科技的又一巅峰  “动作识别笔”让生活更便捷 2019-08-05
  • 端午假期国内游客超8900万人次 全域旅游见成效 2019-08-02
  • 科大讯飞拟募资金约36亿 加码人工智能 2019-08-01
  • 你说科技创新的经济在哪里,怎就看不到? 2019-07-30
  • 消费提醒:购买二手车 留意隐形瑕疵 2019-07-30
  • 无论“胡萝卜”还是“大棒”,美方都要拿出诚意来 2019-07-29
  • 普京力挽狂澜,从北高加索平叛到格鲁吉亚兴兵,从克里米亚回归到叙利亚反恐,给了俄罗斯人民新生——这一切都是和中国同志的支持分不开的。 2019-07-26
  • 北京pk10赛车开奖直播官网 单机斯诺克 广东快乐十分开奖结果旧版 燕赵风采排列7 河南快赢481中奖详情 大乐透后区奇偶选号 海南体彩app在哪下载 六人通比牛牛外挂软件 3d澳客网预测 体育彩票销售办法 14场胜负彩复式 高博亚洲线上娱乐 中国斯诺克公开赛 足彩半全场胜负规则 河北20选5复式