如何在工作线程内外使用GetDlgItemText

时间:2013-12-23 15:29:33

标签: multithreading mfc gettext

我在工作线程中使用GetDlgGetItemText时遇到问题。

在外面工作得非常好
TCHAR txtbuff[50];
GetDlgItemText(IDC_SLIDER1, txtbuff, 50);
SOmething = ::SendMessage(something,WM_SETTEXT,0,(LPARAM)txtbuff)

但是当我尝试在工作线程中使用相同的东西时,我被告知它不需要3个参数,因为它需要它的HWND句柄(来自我收集的),我认为这是使用winspy ++或类似的,但这些句柄一直在变化。我认为(非常错误,因为我是新手)我可以在我的工作线程中使用相同的代码。为什么上面的代码在工作线程之外工作正常?我到处都看了看,我错过了一些明显/简单的东西吗?

1 个答案:

答案 0 :(得分:0)

只需要3个参数的GetDlgItemText版本是CWnd成员函数。 MFC使用CWnd的m_hWnd成员将其转换为4参数API版本。所以你不能在CWnd对象之外使用3参数版本。

另一个问题是两个版本的GetDlgItemText都被定义为仅用于访问子窗口。因此,除非在IDC_SLIDER1控件的父窗口的上下文中调用,否则不能使用它们。

另一个问题是MFC不支持从没有创建窗口的线程访问窗口/控件。有一些有限的情况,这是有效的,但这是不好的做法。即使它工作也会导致线程之间不明显的交互,可能导致死锁。

将所有与GUI的交互放入主线程中。并将所有与子窗口(即控件)的交互放在父窗口类中。