- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个派生自 CWnd 的自定义类,我想从工作线程向其发布消息。我正在使用 PostMessage 函数来实现这一点。 PostMessage 的第一个参数是我的类的 HWND 类型句柄,接下来是我想要处理的消息。对于第一个参数,我使用 GetSafeHwnd() 函数生成我的类的句柄,对于第二个参数,我使用 WM_USER+3。此外,我在我的类头文件中声明了一个消息映射,并在 BEGIN_MESSAGE_MAP 和 END_MESSAGE_MAP block 中为消息处理程序添加了一个条目。但是,我的处理程序没有被调用。我也查看了PostMessage函数的返回值,是1,代表成功。
这是我的代码:
在 MyClass.h 中
class CMyClass : CWnd
{
....
....
public:
void InitHandle();
protected:
afx_msg LRESULT OnMessageReceived(WPARAM wParam, LPARAM lParam);
DECLARE_MESSAGE_MAP()
}
在 MyClass.cpp 中
#define WM_MY_MESSAGE WM_USER+3
HWND handleToMyClassWindow;
BEGIN_MESSAGE_MAP(CMyClass, CWnd)
ON_MESSAGE(WM_MY_MESSAGE, OnMessageReceived)
END_MESSAGE_MAP()
LRESULT CMyClass::OnMessageReceived(WPARAM wParam, LPARAM lParam)
{ .... }
void CMyClass::InitHandle()
{
handleToMyClassWindow = GetSafeHwnd();
}
内部工作线程
UINT WorkerThreadFunction(LPVOID pParam )
{
....
PostMessage(handleToMyClassWindow, WM_MY_MESSAGE, NULL, NULL);
....
}
我的问题是,没有调用 OnMessageReceived 处理程序的可能原因是什么。
附言
我注意调用对象调用 InitHandle() 函数。
我对我程序的 View 类(派生自 CView)尝试了相同的技术,它在那里工作,但在这里失败了。
最佳答案
如果窗口尚未创建,则无法发布到窗口。如果您实际上没有使用您的类创建窗口,GetSafeHwnd() 将返回 NULL。
关于c++ - MFC - 无法将消息发布到从 CWnd 派生的自定义类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24296024/
根据 msdn ,当我用 CWnd::FromHandle 得到 CWnd* 时, The pointer may be temporary and should not be stored for
我在一个高度多线程的应用程序上遇到了无数次崩溃。 阅读这些 MSDN page , technical note和 this article on TLS ,我已经了解 CWnd 对象被映射到 Thr
我有一个动态创建的 CWnd 窗口,标题栏区域和任务栏的图标似乎是随机选择的。 要设置图标,我调用: // Set the icon for this dialog. The framework d
我的应用程序具有基于 ATL 的 GUI(CWnd、CDialog、...),它由多个页面(CDialog)组成。其中一个页面是空的,但它有一个占位符框架 (CWnd),可随对话框调整大小。一切都构建
H, 我有一个旧的 MFC 应用程序,它有一个继承自 CWnd 的类。我正在与原作者交谈,他说 Cwnd::Create() 创建了一个新线程。但是,我在 MSDN 文档中找不到对此的任何引用 htt
我正在尝试调用 CWnd 类的函数 GetParent()。每次都会抛出异常。我正在从工作线程调用该函数。 这是导致异常的行:CWnd* parent = this->GetParent(); 我也试
我有一个显示图像的自定义控件。当图像超过可显示大小时,它会显示滚动条。出于某种原因,我想知道是否显示水平或垂直滚动条。我在 CWnd 类中找不到任何直接函数。 我找到了 GetScrollBarI
我编写了一个 MFC 应用程序,需要一个不会将输入焦点从另一个窗口移开的按钮。 不幸的是,当用户用鼠标单击按钮时,删除 WS_TABSTOP 样式没有帮助。当我阻止 WM_LBUTTONDOWN 时,
我目前大量使用这样的代码来确定控件在窗口客户区内的位置: CRect rect; GetDlgItem(IDC_CONTROL_ID)->GetWindowRect(&rect); ScreenToC
如何获取 CWnd* 的高度和宽度? CWnd 窗口是否正确?为什么不是命令: CWnd* parent = this->GetParent(); // C++ command parent->Get
背景 MFC CWnd::SetTimer调用 WinAPI 的 SetTimer简单地。 _AFXWIN_INLINE UINT_PTR CWnd::SetTimer(UINT_PTR nIDEve
我有一个 CWnd 类名 mywindow 的成员 我想给它添加一个滚动条。 我该怎么做? 我已经尝试做: mywindow.EnableScrollBarCtrl(SB_BOTH,TRUE); 它显
我有一个对话框,CFormView,其中包含一些按钮和一个面板,其中包含 Tabcontrol、单选按钮、文本输入字段等。 因此,在我的面板 CWnd 上,我创建了如下输入字段: pEdit = ne
(最后一行有一个 TL;DR) 我正在实现一个处理程序来关闭在软件应用程序中打开的选定窗口。这是一个粗略的代码: void CDlg_Dummy_Dialog::OnCloseWindows() {
我正在编写一个带有多个控件的 MFC 对话框。我目前有一个 CWnd,它位于 dialog 的右半部分。单击编辑按钮后,子 CWnd 会调整大小以占据对话框的较大部分。 但是,现在当我尝试调整窗口大小
如果我有一个带有按钮控件的 MFC 对话框,有没有办法使用按钮的 ID(例如 IDC_BUTTON_YES)为该控件构造 HWND 或 CWND? 最佳答案 是的,可以使用MFC对话框的GetDlgI
所以我有一个 MFC 应用程序,当我们执行某些操作时它会闪烁。所以我想我应该设置 SetRedraw(false) 并在函数结束时将其设置为 true。 该应用程序不再刷新,但如果我在 SetRedr
我是一个 C++ 新手,所以请多多包涵。 位于函数内的这行代码: CWnd* pWnd = CWnd::FindWindow("Shell_TrayWnd", ""); CWnd 显示为“未定义”。我
我正在处理我们的 32 位 MFC VC2010 应用程序中出现的偶发生产问题。该应用程序在 Windows Server 2008 R2 Standard SP1 64 位上运行。 此问题是由于无法
我有一个派生自 CWnd 的自定义类,我想从工作线程向其发布消息。我正在使用 PostMessage 函数来实现这一点。 PostMessage 的第一个参数是我的类的 HWND 类型句柄,接下来是我
我是一名优秀的程序员,十分优秀!