MFC C++ 从 WM_KEYDOWN 处理程序获取在 OnDraw() 中编辑的 CDC pDC 的句柄

Posted

技术标签:

【中文标题】MFC C++ 从 WM_KEYDOWN 处理程序获取在 OnDraw() 中编辑的 CDC pDC 的句柄【英文标题】:MFC C++ Getting handle to CDC pDC edited in OnDraw() from WM_KEYDOWN handler 【发布时间】:2016-05-04 03:10:05 【问题描述】:

Single Document,最简单的 MFC 应用程序。

这个想法是默认 CDC pDC 是通过 onDraw() 函数以某种方式编辑(着色)的。当用户点击一个数字时,我希望它使用 pDC 中的颜色显示。

如果我对 WM_KEYPRESS 使用默认处理函数 OnKeyDown,我将没有获得指向我编辑的 pDC 的指针。

我的问题是如何访问已编辑的 pDC? 我确信我缺少一个简单的解决方案,请帮忙。

【问题讨论】:

【参考方案1】:

我不是 100% 确定我正确理解了这个问题,但让我试试......

在 MFC 中执行我认为您想要的通常和推荐的方法是仅处理 onDraw() 中的所有绘图。

因此,在onKeyDown() 处理程序中,您会将按下的键存储到成员变量(或者甚至将其推送到要绘制的键的vectorlist),然后调用Invalidate(false)。这会导致 Windows 向您的窗口生成 WM_PAINT 消息,最终在 onDraw() 中处理,您现在可以根据您当前的成员变量值绘制正确的内容。

也可以在onDraw() 之外创建一个CPaintDC 并以此为基础。但如前所述,通常在 MFC 应用程序中,所有绘图都保存在一个位置。 Windows 可能会随时请求您的应用重绘,并通过WM_PAINT 消息执行此操作。

【讨论】:

以上是关于MFC C++ 从 WM_KEYDOWN 处理程序获取在 OnDraw() 中编辑的 CDC pDC 的句柄的主要内容,如果未能解决你的问题,请参考以下文章

对话框捕获WM_KEYDOWN消息

VS 2008 MFC - 删除 MFC 处理程序

c++编程 qt mfc

从 C# 访问 Win32/MFC “Stuff”

实现 COM 接口 C++ / VC++ 6.0 / MFC

哪个是 MFC C++ 中单选组合框的事件处理程序