请教CWnd派生类的问题

来源:百度知道 编辑:UC知道 时间:2024/06/21 08:14:29
我现在从CWnd类派生了一个类然后用create函数创建,但是发现生成的窗口什么都不能响应,包括标题栏的拖动等功能,并且鼠标点击这个窗口的时候如果窗口后面有按钮就直接响应这个按钮的点击了,仿佛这个新生成的窗口是不存在的一样。
请问应该怎么使用CWnd类的派生类呢?就是创建好之后就有一些基本功能比如点击标题拖放窗口什么的 我现在生成的窗口什恶魔都做不了啊
谢谢!
谢谢啊!
从CDialog派生的时候必须有Dialog资源才行吗?就是一个Dialog资源的ID
如何不使用对话框资源就生成一个CDialog的对象呢?
==============
再次感谢,不过我用了CFrameWnd 之后可以生成窗口但是一关闭就会报错的,好像还是不太适用啊,看报错信息我也不太确定是怎么回事 而且默认的CFrameWnd的构造析构函数都是保护成员的 直接拿来也是不能用

我一直以为CWnd有了好多功能呢 唉 难道得自己在派生类里实现那些功能?
==================================================================
有没有比较方便的类可以用来派生来用呢?不想用CDialog了。只要是实现基本的窗口功能就行了。CWnd直接派生来的实在不会用了。。。

你没理解window的意思啊,各个控件窗口都是继承自CWND的。CWND只有一些很基本的功能,如接收消息等。
按你说的要求你应该继承的是CDialog吧。

CDialog能不能不用resouce file 不大清楚啊。
直觉应该可以不用,但是我做的项目都用了。
你再看看CFrameWnd吧,这个肯定可以不用

=============================
CWnd是mfc所有窗体的基类,功能当然不会太多,你想如果按钮、文本框、对话框的功能都放进去这个类还怎么写。但是mfc本身有很多窗口元素的类是继承CWnd的。CFrameWnd的构造函数和析构函数是公共成员你可以看afxwin.h上的声明

CWnd对象接收到的Windows通知消息通过消息映射被自动发送到适当的CWnd OnMessage成员函数。你可以在派生类中重载OnMessage成员函数以处理成员的特定消息。也就是说使用CWnd对象 需要自己写消息出来动作

CDialog可以不依赖资源 其他资源必须动态new出来 比较麻烦

是不是你的create里面第三个参数DWORD dwStyle没有写好,WS_OVERLAPPED 等等。
dwStyle
Specifies the window style attributes. WS_POPUP cannot be used. If you wish to create a pop-up window, use CWnd::CreateEx instead.
如果你要创建WS_POPUP样式的用 CWnd::CreateEx代替。

我个人觉得这是窗口样式的问题。
下面是我自己随便写了个简单的,,

CWnd wnd;
void CDialog1::OnButtonTest()
{
// TODO: Add your control notification handler code here
RECT rect = {0, 0, 200,200};
wnd.Create(