• MFC MDI 主框架和标签页数据互操作


    ==================================声明==================================

    本文原创,转载在正文中显要的注明作者和出处,并保证文章的完整性。

    未经作者同意请勿修改(包括本声明),保留法律追究的权利。

    未经作者同意请勿用于学术性引用。

    未经作者同意请勿用于商业出版、商业印刷、商业引用。

    本文不定期修正完善,为保证内容正确,建议移步原文处阅读。

    本文链接:http://www.cnblogs.com/wlsandwho/p/4389576.html

    =======================================================================

    为了宇宙的和平,还是拿之前我的魔改系列说事儿吧!

    本文内容基于http://www.cnblogs.com/wlsandwho/p/4282242.html

    =======================================================================

    之前成功的实现了MDI的自定义模板视图。

    现在,假如一个标签页上有一个CListCtrl控件,如何使存储在主框架窗口的数据显示在CListCtrl中?或者使CListCtrl中的数据能够在主框架窗口使用?

    =======================================================================

    人世间有百媚千种,呃,解决问题的办法有千万种,我只选简单易行把握大的,盈盈一握的不行。

    =======================================================================

    这里我选择采用用户自定义消息的方式。

    1 简单。

    2 懒。

    3 自带队列。

    4 就算没响应也没关系,再发就是了。

    5 子视图发送的请求传递到主框架执行,毕竟数据在那里。

    =======================================================================

    大致代码,不一定能用,毕竟消毒后呵呵哒。

    代码位置大家都懂得。

    1 #define WM_WLS_LALALA    WM_USER+321
     1 void CXXXFV::OnNMClickListRecordinfo(NMHDR *pNMHDR, LRESULT *pResult)
     2 {
     3     LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);
     4     // TODO: 在此添加控件通知处理程序代码
     5 
     6     if(m_ListCtrl.GetNextItem(-1,LVNI_ALL | LVNI_SELECTED) != -1)
     7     {
     8          int nItem =m_ListCtrl.GetNextItem(-1,LVNI_ALL | LVNI_SELECTED);
     9 
    10          CString* pstrXX=new CString;
    11         *pstrSampleID=m_ListCtrl.GetItemText(nItem,1);
    12 
    13         int nType=1;
    14 
    15         ::PostMessage(theApp.m_pMainWnd->m_hWnd,WM_WLS_LALALA,(WPARAM)pstrXX,(LPARAM)nType);
    16     }
    17 
    18     *pResult = 0;
    19 }
    ON_MESSAGE(WM_DATA_EXCHANGE,&CMainFrame::OnXXX)
    
     1 LRESULT CMainFrame::OnXXX( WPARAM wParam, LPARAM lParam)
     2 {
     3     int nType=(int)lParam;
     4  
     5     if (nType==1)
     6     {
     7         CString strXXX=*(CString*)wParam;
     8 
     9         //blablabla...
    10     }
    11     
    12     delete (CString*)wParam;
    13 
    14     return 0;   
    15 }

    要注意的是PostMessage用的是API。用的是PostMessage而不是SendMessage。

    毕竟数据准确也是很重要的。

  • 相关阅读:
    个人项目:Java实现WC
    第六篇Scrum冲刺博客
    java实现小学生四则运算
    实现wc部分功能 java
    WordCount作业修改
    我的过去、现在和未来
    WordCount
    Window 通过cmd查看端口占用、相应进程、杀死进程等的命令
    《《《在同一台服务器上配置多个Tomcat
    关于Android 5.x的低功耗蓝牙BLE开发简介
  • 原文地址:https://www.cnblogs.com/wlsandwho/p/4389576.html
Copyright © 2020-2023  润新知