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);
}
来改变窗体中的控件值。
一、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);
}
来改变窗体中的控件值。
相关文章推荐
- c++多线程读写窗体控件_自定义消息的实现
- c++多线程读写窗体控件_自定义消息的实现
- 实现自定义消息对话框控件MsgBox简介
- 利用内存读写函数和自定义消息实现进程间通信
- C#Windows窗体界面设计_05_自定义函数 外部类访问读写窗体类的控件的私有属性
- 窗体背景的绘制(Windows窗体每次都会重绘其窗体背景,所以我们可以通过拦截窗体重绘背景的消息(WM_ERASEBKGND),并自定义方法来实现重绘窗体背景)
- C#应用WindowsApi实现查找\枚举(FindWindow、EnumChildWindows)窗体控件,并发送消息。
- MFC如何自定义消息与在线程中向主窗体控件发送数据
- vc如何自定义消息与在线程中向主窗体控件发送数据
- vc如何自定义消息与在线程中向主窗体控件发送数据
- [原创]C#应用WindowsApi实现查找\枚举(FindWindow、EnumChildWindows)窗体控件,并发送消息。
- 网易云信实现自定义消息
- 扩展GridView实现的一个自定义无刷新分页,排序,支持多种数据源的控件TwfGridView
- Android开发进阶自定义控件之滑动开关实现方法【附demo源码下载】
- CYQ.Data 轻量数据访问层(七) 自定义数据表实现绑定常用的数据控件(上)
- Silverlight自定义分页控件,实现客户端分页【效果图】
- C# 实现消息窗体闪烁
- 【转】C#实现窗体中所有控件跟随窗体尺寸的自由变换
- 自定义Gallery控件实现简单3D图片浏览器
- JAVA 桌面消息窗体实现