c++多线程读写窗体控件_自定义消息的实现

来源:互联网 发布:淘宝多少天自动收货 编辑:程序博客网 时间:2024/06/16 00:08
  • c++多线程读写窗体控件_自定义消息的实现
  • 来源:http://www.greensoftcode.net/   发布日期:2011-09-01      点击次数:1130 发布者IP:218.25.20.77
  • c++多线程读写窗体控件_自定义消息的实现

    一、c++多线程读写窗体控件 这个我研究啦半天终于搞定共享给大家:
       基本代码为

     1.线程定义在头文件.H中
      protected:
       HANDLE hThread1;
        static DWORD WINAPI  fun1( LPVOID lpParameter );  

     2. 线程函数
     DWORD WINAPI   CTestDlg::fun1( LPVOID lpParameter )

      {
     CString str="你好";
       //这里是关键
       HWND   hWnd  =  ::FindWindow(NULL ,"test"); //test为窗体标题  
       HWND  hEdit   =   ::GetDlgItem(   hWnd   ,   1002 ); //1002是主线程窗体中控件ID在resource.H中  能找到
       HWND  hEdit1   =   ::GetDlgItem(   hWnd   ,   1003 ); 
           ::SendMessage(hEdit1,WM_SETTEXT,0,*(LPARAM*)&str);//设置控件ID=1002文本值
           ::SendMessage(hEdit,WM_GETTEXT,10,*(LPARAM*)&str);//读取控件ID=1003文本值
     return 0;
      }
    3.建立线程
    void CTestDlg::OnButton1() 
    {
          UpdateData(true);
     HANDLE hThread1;
     hThread1=CreateThread(NULL,0,fun1,GetDlgItem(IDD_TEST_DIALOG)->GetSafeHwnd(),0,NULL);
     CloseHandle(hThread1);
    }
    二、多线程调用自定义消息给控件赋值
        
      1.定义消息在StdAfx.h文件中
        #define WM_MyMessageo WM_USER + 200 
        #define WM_MyMessaget WM_USER+ 201
      2.绑定消息对应的方法在项目的.H文件中
         afx_msg  void OnMyMessage1(WPARAM wParam, LPARAM lParam);
         afx_msg  void OnMyMessage2(WPARAM wParam, LPARAM lParam);
      注意格式不要错误个人测试啦下参数不能改变 究竟能否改变参数 我没有深入研究.
      3.在项目文件.CPP中写入消息
         BEGIN_MESSAGE_MAP(CTestDlg, CDialog)
     //{{AFX_MSG_MAP(CTestDlg)
     ON_WM_SYSCOMMAND()
     ON_WM_PAINT()
     ON_WM_QUERYDRAGICON()
     ON_BN_CLICKED(IDC_butt, Onbutt)
     ON_BN_CLICKED(IDC_BUTTON1, OnButton1)
             //自定义消息下面的,上面的是类导航器生产的.可以看出系统生产的也是MS自定义的没什么特别。
            ON_MESSAGE(WM_MyMessageo,OnMyMessage1)
            ON_MESSAGE(WM_MyMessaget,OnMyMessage2)
     //}}AFX_MSG_MAP
        END_MESSAGE_MAP()

       4.执行自定义消息
           void CTestDlg::OnButton1() 
           {
          SendMessage(WM_MyMessageo,NULL,0);
          }

      这个消息也可以应用到线程的函数fun1中

      DWORD WINAPI   CTestDlg::fun1( LPVOID lpParameter )

      {::SendMessage(hWnd,WM_MyMessaget,0,0); 
      }
     来改变窗体中的控件值。


原创粉丝点击