WTL CWindowImpl 是不是与 CWnd 兼容?

Posted

技术标签:

【中文标题】WTL CWindowImpl 是不是与 CWnd 兼容?【英文标题】:Does WTL CWindowImpl compatible with CWnd?WTL CWindowImpl 是否与 CWnd 兼容? 【发布时间】:2017-06-07 12:46:03 【问题描述】:

我有简单的视频播放器。

https://github.com/sailfish009/sample_video

现在我想将它移植到 windows 模板库 9.1。

编辑:已解决,CWindowImpl 的处理程序与 CWnd 的兼容。

//screen = SDL_CreateWindowFrom(this->m_hWnd); //HWND from CWnd previous working code
screen = SDL_CreateWindowFrom(m_hWndClient);   //HWND from CWindowImpl

【问题讨论】:

解决了!我在设置宽度和高度时犯了一个错误。 CWindowImpl 中的 HWND 和 CWnd 完全相同。 【参考方案1】:

问题问错了。您不寻找兼容性,您只是寻找访问HWND窗口句柄的方法。

不,这些类是不兼容的,更多的是它们在概念上是不同的。在 ATL/WTL 中,CWindowImpl 是一个实现窗口过程的类。这样的过程通常是一个静态函数,帮助类将其“附加”到 C++ 类,将其连接到特定的瘦窗口包装器,例如CWindow,提供连接消息处理程序等的简单方法。m_hWndClient 是甚至不是CWindowImpl 的成员,属于WTL 框架窗口相关类。

【讨论】:

以上是关于WTL CWindowImpl 是不是与 CWnd 兼容?的主要内容,如果未能解决你的问题,请参考以下文章

WTL 没有 CDialog 怎么办

预注册 ATL 窗口类

将 CString::GetString() 与 CWnd::SendMessage() 一起使用是不是安全?

WTL强制资源从非mfc应用程序中的dll加载的方式? (我们使用的是 WTL/ATL,不是直接的 win32)

如何在 WTL 项目中添加对话框

WTL CIdleHandler 的正确用法是啥?