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

论坛 期权论坛 编程之家     
选择匿名的用户   2021-6-2 20:08   3193   0
  • 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);
    }
    来改变窗体中的控件值。

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP