多线程 关于FindWindow,SendMessage和_beginthread的

cameracanon 2009-09-15 03:21:39
程序代码如下:
CTestDlg.cpp

void CTestDlg::OnButtonStart
{
int x;

HANDLE hThtread = (HANDLE)_beginthread(threadFunc, 0, x);
::WaitForSingleObject(hThtread, INFINITE);
}

void CTestDlg::threadFunc(void* lParam)
{

EVF_DATASET1 data;
CWnd m_hWnd = ::FindWindow(NULL, "测试"); //出错1
if (m_hWnd !=NULL) //出错2
{
::SendMessage(m_hWnd, WM_USER_EVF_DATA_CHANGED, (WPARAM) &data, NULL);

........

}

_endthread();
}

CTestDlg.h

public:

void static threadFunc(void* lParam);


编译的时候有两个错误:
1. error C2248: “CWnd::CWnd”: 无法访问 private 成员(在“CWnd”类中声明)
c:\program files\microsoft visual studio 8\vc\atlmfc\include\afxwin.h(2824) : 参见“CWnd::CWnd”的声明
c:\program files\microsoft visual studio 8\vc\atlmfc\include\afxwin.h(1967) : 参见“CWnd”的声明

2. error C2666: “CWnd::operator !=”: 2 个重载有相似的转换
c:\program files\microsoft visual studio 8\vc\atlmfc\include\afxwin.h(1978): 可能是“BOOL CWnd::operator !=(const CWnd &) const”
或“内置 C++ operator!=(HWND, HWND)”
试图匹配参数列表“(CWnd, int)”时


等待您的回答,因为是新手,不太会,也差了很多资料,但是没有得到更好的解决,还是有这两个错误

...全文
217 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
哈利路亚1874 2009-09-16
  • 打赏
  • 举报
回复
函数的返回值都给搞错了。
同一楼上的……
HWND hWnd = ::FindWindow(NULL, "测试");
zoulie 2009-09-15
  • 打赏
  • 举报
回复
注意::FindWindow返回值
m_hWnd是CWnd里的一个私有成员,标示一个窗口句柄
cameracanon 2009-09-15
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 tr0j4n 的回复:]
CWnd m_hWnd = ::FindWindow(NULL, "测试");   
不错才见鬼呢
[/Quote]

教训的好,之前也查过是HWND的,后来忘记改了
CoderOfVC 2009-09-15
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 tr0j4n 的回复:]
更神奇的,你居然弄个m_hWnd出来当变量名,无语...这个也能算是保留字了
[/Quote]

好个保留字。。哈。。
songtianxing5 2009-09-15
  • 打赏
  • 举报
回复
帮顶。关注中
MoXiaoRab 2009-09-15
  • 打赏
  • 举报
回复
还有,我怎么记得::FindWindow是返回句柄的呀,不是指针。

你这么改

HWND hWnd = ::FindWindow(NULL, "测试");  
chenyu2202863 2009-09-15
  • 打赏
  • 举报
回复
在多线程中不要对MFC的窗口进行操作,直接用API吧。
还要注意同步~
MoXiaoRab 2009-09-15
  • 打赏
  • 举报
回复
更神奇的,你居然弄个m_hWnd出来当变量名,无语...这个也能算是保留字了
MoXiaoRab 2009-09-15
  • 打赏
  • 举报
回复
你的FindWindow返回一个指针不错,居然是CWnd类型的。要知道,所有的窗体指针都是CWnd的派生类。

你为什么不直接得到句柄后操作呢

FindWindow,不要::,可以直接返回窗体的句柄,然后SendMessage不就好了
muzizongheng 2009-09-15
  • 打赏
  • 举报
回复
给出具体错误代码行, 我是说在你自己的函数里 。
MoXiaoRab 2009-09-15
  • 打赏
  • 举报
回复
CWnd m_hWnd = ::FindWindow(NULL, "测试");
不错才见鬼呢

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧