您的位置:首页 > 编程语言 > C语言/C++

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

2013-01-11 18:35 267 查看
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);

  }

来改变窗体中的控件值。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐